Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

удаление записи   Найти похожие ветки 

 
МАХНО   (2004-11-21 10:44) [0]

Привет.
Использую Query, DBGrid, DataSource. Требуется удалить запись, на которой стоит указатель при помощи SQL.
Delete from base - удаляет все записи. А как задать критерий - не знаю :(.


 
sniknik ©   (2004-11-21 11:30) [1]

Delete from base WHERE ID=1
(все где ID 1)


 
МАХНО   (2004-11-21 11:34) [2]

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("DELETE from base WHERE id=1");
Query1.ExecSQL;

ругается.
Пишет Invalid field name. id.


 
sniknik ©   (2004-11-21 11:40) [3]

индетификатор может быть любой, или несколько, единственное он(поле) должен существовать в таблице.


 
МАХНО   (2004-11-21 11:53) [4]

все равно не понял:(
например, у меня в таблице есть поле NAME. Пользователь в DBGridе выбрал строчку "Иванов" и нажал кнопку "Удалить".
Как же мне сформировать правильно запрос, чтобы удалилась именно эта строчка? Таблица dBase ( base.dbf). Нужно ввести в таблицу специальное поле ID? или как?


 
МАХНО   (2004-11-21 12:24) [5]

решил :)

if MessageDlg("Удалить эту запись?", mtConfirmation,
[mbCancel, mbYes], 0)=mrYes then begin
s:=Query1.FieldByName("NAME").AsString;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("DELETE from base WHERE NAME=""+s+""");
Query1.ExecSQL;

может есть другие способы?


 
sniknik ©   (2004-11-21 12:26) [6]

можно и так
Delete from base WHERE NAME="Иванов"

но ключевое поле во многих случаях просто незаменимо (в базах на SQL серверах). с локальной таблицей можно без особых ограничений обойтись (не пользоваться sql).


 
МАХНО   (2004-11-21 12:38) [7]

но насколько я знаю в dBase нельзя задать ключевое поле, только индексы. Значит при создании баз на SQL сервере нельзя использовать dBase? тогда что лучше использовать?


 
Shama_n ©   (2004-11-21 13:17) [8]

Лучше так:

if MessageDlg("Удалить эту запись?", mtConfirmation,
[mbCancel, mbYes], 0)=mrYes
then begin
S:=Query1.FieldByName("NAME").AsString;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("DELETE from base WHERE NAME= :S");
Query1.ParamByName("S").AsString := S;
Query1.ExecSQL;
end;

Иначе можно будет сосздать запись которую обычные "Смертные" уже не смогут удалить :)


 
Anatoly Podgoretsky ©   (2004-11-21 13:40) [9]

МАХНО   (21.11.04 12:24) [5]
Query1.Delete;

удалит именно одну запись, а у тебя удалит всех Ивановых


 
Anatoly Podgoretsky ©   (2004-11-21 13:42) [10]

МАХНО   (21.11.04 12:38) [7]
Ты знаешь плохо, кроме того кто сказал, что это обязательно организовывать средствами базы, а не своими логическими.



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
14-1101910349
syte_ser78
2004-12-01 17:12
2004.12.19
как лечится?


4-1099683711
Piter
2004-11-05 22:41
2004.12.19
Как определить Handle окна, которое находится под курсором мыщи?


14-1101355616
Кто---то
2004-11-25 07:06
2004.12.19
Как скопировать ассемблер из дебаггера Дельфи ?


4-1099291899
Dimka_a
2004-11-01 09:51
2004.12.19
Как узнать размер файла?


4-1099327420
Dionis
2004-11-01 19:43
2004.12.19
Визуальный компонент для работы с COM-портом