Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2015, 18:46   #1
АнтонКурышов
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 17
По умолчанию Удаление записей из таблицы в Lazarus-е

Как удалить записи из таблицы? использую компоненты SQLQuery и DBGrid
АнтонКурышов вне форума Ответить с цитированием
Старый 22.12.2015, 20:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
With SQLQuery do begin
 SQL.Text:='Delete from Таблица where Ключевое поле=:key';
 Parameters.ParamByName('key').Value:=Значение, по которому будет удаление;
 if ExecSQL=0 then ShowMessage('Записей на удаление нет');
end;
Идею уловил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.12.2015, 22:01   #3
АнтонКурышов
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 17
По умолчанию

Идею уловил?


Идею то вроде уловил.
Вот так написал:
With SQLQuery1 do begin
SQL.Text:='Delete from product where product_id =:key';
Params.ParamByName('key').Value:=Ed it6.Text;



product_id - ключевое поле
Edit6.Text - сюда ввожу значение по которому должно быть удаление
Но при нажатии на кнопку удалении появилась ошибка
SQLQuery1. Cannot open a non-select statement
Или я не то написал в "Значение, по которому будет удаление"??
Что туда надо прописать?
АнтонКурышов вне форума Ответить с цитированием
Старый 22.12.2015, 22:06   #4
АнтонКурышов
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 17
По умолчанию

От этой ошибки избавился, сам виноват!!
Но у меня просто исчезают все поля таблицы в DBGrid-e и все( то есть удаление не происходит
АнтонКурышов вне форума Ответить с цитированием
Старый 22.12.2015, 22:45   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Но у меня просто исчезают все поля таблицы в DBGrid-e и все( то есть удаление не происходит
Для удаления используйте ДРУГОЙ Query, а не тот что был использован в показе DBGrid.
Примите за правило, для каждого из действий (для каждого SQL запроса) должен быть СВОЙ отдельный SQLQuery(1, 2, 3, ....) настроенные на один и тот же Connect.

Код:
SQLQuery1.SQL.Text:='select ...'; // запрос для DBgrid
Код:
SQLQuery2.SQL.Text:='delete from t where id=:nn';

while not SQLQuery1.eof do begin
  SQLQuery2.ParamByName('nn').AsInteger:=SQLQuery1.FieldByName('id').Asinteger;
  SQLQuery2.ExecSQL;
end;
// а после удаления надо ОБНОВИТЬ(перечитать) исходный набор данных
SQLQuery1.Close;
SQLQuery1.Open;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 22.12.2015, 22:49   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А у тебя DBGrid подключен к SQLQuery тому?
Тогда либо для удаления отведи отдельно компонент, либо переоткрывай запрос SELECT заново после удаления.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.12.2015, 23:43   #7
АнтонКурышов
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А у тебя DBGrid подключен к SQLQuery тому?
Тогда либо для удаления отведи отдельно компонент, либо переоткрывай запрос SELECT заново после удаления.
Да DBGrid подключен. а вы можете как-нибудь на примере показать, как делать то что вы сказали??

Цитата:
Сообщение от evg_m Посмотреть сообщение
Для удаления используйте ДРУГОЙ Query, а не тот что был использован в показе DBGrid.
Примите за правило, для каждого из действий (для каждого SQL запроса) должен быть СВОЙ отдельный SQLQuery(1, 2, 3, ....) настроенные на один и тот же Connect.

Код:
SQLQuery1.SQL.Text:='select ...'; // запрос для DBgrid
Код:
SQLQuery2.SQL.Text:='delete from t where id=:nn';

while not SQLQuery1.eof do begin
  SQLQuery2.ParamByName('nn').AsInteger:=SQLQuery1.FieldByName('id').Asinteger;
  SQLQuery2.ExecSQL;
end;
// а после удаления надо ОБНОВИТЬ(перечитать) исходный набор данных
SQLQuery1.Close;
SQLQuery1.Open;
Вот написал как вы и сказали:
Код:
procedure TForm1.Button4Click(Sender: TObject);
begin
  SQLQuery2.Close;
  SQLQuery2.SQL.Clear;
  SQLQuery2.SQL.Text:='delete from product where product_id =:nn';
while not SQLQuery1.eof do begin
  SQLQuery2.ParamByName('nn').AsInteger:=SQLQuery1.FieldByName('product_id').Asinteger;
  SQLQuery2.ExecSQL;
end;
// а после удаления надо ОБНОВИТЬ(перечитать) исходный набор данных
SQLQuery1.Close;
SQLQuery1.Open;
end;
Но все равно не удаляет



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Stilet; 23.12.2015 в 09:35.
АнтонКурышов вне форума Ответить с цитированием
Старый 23.12.2015, 08:04   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Edit6.Text - сюда ввожу значение по которому должно быть удаление
где это в коде?!

Вы, хотели написать так?
Код:
procedure TForm1.Button4Click(Sender: TObject);
begin
  SQLQuery2.Close;
  SQLQuery2.SQL.Clear;
  SQLQuery2.SQL.Text:='delete from product where product_id =:nn';
  SQLQuery2.ParamByName('nn').AsInteger:=StrToInt(Edit6.Text);
  SQLQuery2.ExecSQL;
  // а после удаления надо ОБНОВИТЬ(перечитать) исходный набор данных
  SQLQuery1.Close;
  SQLQuery1.Open;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2015, 09:13   #9
АнтонКурышов
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
где это в коде?!

Вы, хотели написать так?
Код:
procedure TForm1.Button4Click(Sender: TObject);
begin
  SQLQuery2.Close;
  SQLQuery2.SQL.Clear;
  SQLQuery2.SQL.Text:='delete from product where product_id =:nn';
  SQLQuery2.ParamByName('nn').AsInteger:=StrToInt(Edit6.Text);
  SQLQuery2.ExecSQL;
  // а после удаления надо ОБНОВИТЬ(перечитать) исходный набор данных
  SQLQuery1.Close;
  SQLQuery1.Open;
end;
Спасибо это помогло) удаляет что я хочу)
АнтонКурышов вне форума Ответить с цитированием
Старый 23.12.2015, 09:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
АнтонКурышов
Да, и на будущее совет: Если работаешь с SQL - про циклы всякие забывай сразу. Это как пятое колесо, пришитое к рукаву зайца.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление повторяющихся слов. Delphi. Lazarus. 0льга Lazarus, Free Pascal, CodeTyphon 6 14.12.2015 20:13
Удаление записей подчиненной таблицы AVGRIN SQL, базы данных 1 07.07.2015 08:54
Delphi (Lazarus). Удаление нечётных элементов в дереве. Ovenvan Помощь студентам 7 16.06.2015 10:57
Удаление и поиск записей из таблицы Kolosok Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 21.05.2015 19:30
Удаление, обновление записей из MySQL таблицы xDjarx БД в Delphi 2 14.05.2008 13:36