Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.10.2025, 17:25
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 174
Версия Delphi: 7
Репутация: 10
По умолчанию UPDATE выделенных строк в DBGrid

Добрый день.
Не могу разобраться как сделать обновление таблицы, но только тех записей, которые выбраны в гриде.
Одну запись обновляю так:
Код:
      myQuery := TADOQuery.Create(nil);
      myQuery.Connection := DM_prolongatsiya.ADOConnect_baza_prolongatsiya;
      myQuery.SQL.Clear;
      myQuery.Parameters.Clear;
      myQuery.SQL.Text := 'UPDATE tab_prolongatsiya SET otvetstvenniy = :otv WHERE id_prolongatsiya = :id';
      myQuery.Parameters.FindParam('otv').Value := f_prolongatsiya.DBLookupComboBox2.Text;
      myQuery.Parameters.FindParam('id').Value := DM_prolongatsiya.ADOQ_prolongatsiya.FieldByName('id_prolongatsiya').Text;
      myQuery.ExecSQL;
      myQuery.Free;
Подскажите пжл, что модифицировать в коде, чтобы обновлять те строки, которые я выбрал в гриде.
Ответить с цитированием
  #2  
Старый 11.10.2025, 22:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,111
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А в чем проблема? Что конкретно не получается?
Идея, в принципе, правильная. Теперь просто в цикле надо обновить все записи. Ты не написал каким образом у тебя сделано выделение разных записей и какое значение надо присвоить полю otvetstvenniy. Если одно и тоже, то можно схитрить - все сделать одним запросом.

Пусть у тебя есть массив идентификаторов записей (как ты его соберешь - другой вопрос, что бы на него ответить надо больше информации). Тогда запрос можно сделать так:
Код:
var
  AID : Array Of Integer; // array with ids
  I : Integer;
  strIn : String;
begin
  ...
  strIn := '';
  For I := Low(AID) To High(AID)-1 Do
    strIn := strIn + AID[i] + ', ';
  strIn := '(' + strIn + AID[High(AID)] + ')';
  ...
  mQuery.SQL.Text := 'UPDATE tab_prolongatsiya SET otvetstvenniy = :otv WHERE id_prolongatsiya IN ' + strIn;
  myQuery.Parameters.FindParam('otv').Value := f_prolongatsiya.DBLookupComboBox2.Text;
  myQuery.ExecSQL;
  ...

Последний раз редактировалось lmikle, 12.10.2025 в 18:46.
Ответить с цитированием
  #3  
Старый 12.10.2025, 08:38
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 174
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
А в чем проблема? Что конкретно не получается?
Идея, в принципе, правильная. Теперь просто в цикле надо обновить все записи. Ты не написал каким образом у тебя сделано выделение разных записей и какое значение надо присвоить полю otvetstvenniy. Если одно и тоже, то можно схитрить - все сделать одним запросом.

Пусть у тебя есть массив идентификаторов записей (как ты его соберешь - другой вопрос, что бы на него ответить надо больше информации). Тогда запрос можно сделать так:

Здравствуйте, lmikle.
Я предполагал что это через цикл, но не знаю как в данном случае его написать.
Задумка такая:
Пользователь в Гриде (DBGrid1) выделяем те строки (включена опция мультивыбор) где нужно изменить "ответственного". Выбор происходит кликом мыши.
Далее из выпадающего списка (DBLookupComboBox2) выбирается новое значение.
При нажатии на кнопку (Button2) программа обновляет данные в столбце otvetstvenniy таблицы tab_prolongatsiya на значение из DBLookupComboBox2. Как обновить одну запись - знаю, как обновить все строки из грида - знаю. А вот чтобы обновлять только выделенные еще не делал.
Попробовал применить Ваш код, но Delphi подсвечивает
Код:
AID : Array If Integer;
. Нужно подключить библиотеку?
Ответить с цитированием
  #4  
Старый 12.10.2025, 18:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,111
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, блин, опечатка же.
Должно быть
Код:
AID : Array Of Integer;
Ответить с цитированием
Ответ


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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:38.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025