Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
МАХНО   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
14-1101897095
Xaker
2004-12-01 13:31
2004.12.19
HookMonitor - или КОНЕЦ ВСЕМ Keylogger am !


14-1101474424
dr Tr0jan
2004-11-26 16:07
2004.12.19
Загрузка компьютера по таймеру


4-1099654169
ssergey
2004-11-05 14:29
2004.12.19
Schreduler


1-1102428928
Гость
2004-12-07 17:15
2004.12.19
Модальное окно


4-1099593479
Ильичев С.А.
2004-11-04 21:37
2004.12.19
крах, перезапуск Explorer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский