Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

удаление записи [D7, dBase, FoxPro]


МАХНО ©   (2004-11-21 10:44:00) 

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


Anatoly Podgoretsky   (2004-11-21 13:42:00) [1]

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


Anatoly Podgoretsky   (2004-11-21 13:40:00) [2]

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

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


Shama_n   (2004-11-21 13:17:00) [3]

Лучше так:

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;

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


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

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


sniknik   (2004-11-21 12:26:00) [5]

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

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


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

решил :)

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;

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


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

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


sniknik   (2004-11-21 11:40:00) [8]

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


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

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:30:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо