Главная страница
    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.04 c
14-1101696360
Думкин
2004-11-29 05:46
2004.12.19
С днем рождения! 28 ноября


3-1100784986
Игорь Писанко
2004-11-18 16:36
2004.12.19
Открыть .dbf без индекса


1-1102024978
Shnabs
2004-12-03 01:02
2004.12.19
Графика


4-1099606582
jek_
2004-11-05 01:16
2004.12.19
WinExec


14-1102004331
vidiv
2004-12-02 19:18
2004.12.19
Одна девушка...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский