1 (edited by Jbanchic 2020-10-28 14:05:51)

Topic: Одновременное редактирование нескольких записей в таблице

Здравствуйте.
Есть следующая проблема.
Есть таблица с данными. И необходимо выделить несколько записей для изменения одного значения одинакового для всех выбранных записей.

Мультиселект делается по мануалу:

Form1.edGrid.Options := Form1.edGrid.Options + goMultiSelect;  

Далее нажимается кнопка и открывается форма редактирования записи, но редактируется только последняя из выбранных.
Подскажите как можно выполнить задачу редактирования одного параметра в нескольких выбранных записях одновременно?
Спасибо.

Re: Одновременное редактирование нескольких записей в таблице

This works for me, I have it in the button_OnAfterClick event.

У меня это работает, у меня это в событии button_OnAfterClick

procedure Form1.............
var
count, indx : integer;

count := Form1.edGrid.RowCount -1;

for indx := 0 to count do
begin
     if Form1.edGrid.Selected[indx] then
     begin
           your edit code here
      
     end;
end; 
On a clear disk you can seek forever

3 (edited by Jbanchic 2020-10-29 10:33:00)

Re: Одновременное редактирование нескольких записей в таблице

CDB wrote:

This works for me, I have it in the button_OnAfterClick event.

У меня это работает, у меня это в событии button_OnAfterClick

           your edit code here
 

Начальная часть понятна. Не понятно каким образом в нескольких записях базы данных внести одинаковое значение только в одном параметре? К примеру, есть имена 100 людей и некоторых из них нужно добавить в одну группу. Название группы заведено. Типовые инструменты My Visual DataBase позволяют назначить группу только кому-то одному за один раз. Как группу задать одновременно для выбранных людей?

Re: Одновременное редактирование нескольких записей в таблице

procedure Form2_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
i,:integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
     if  Form1.TableGrid1.Row[i].Selected then
         SQLExecute('UPDATE q SET qq="'+ Form2.Edit1.Text +'" WHERE id='+IntToStr(Form1.TableGrid1.dbIndexToID(i)));

  UpdateDataBase('q');
  Form1.TableGrid1.dbUpdate;
  Form2.Close;
end;
Post's attachments

Attachment icon test.rar 4.48 kb, 13 downloads since 2020-10-29 

5 (edited by Jbanchic 2020-10-29 13:11:52)

Re: Одновременное редактирование нескольких записей в таблице

sibprogsistem wrote:

...

SQLExecute('UPDATE q SET qq="'+ Form2.Edit1.Text +'" WHERE id='+IntToStr(Form1.TableGrid1.dbIndexToID(i)));

Спасибо. Я так понимаю, что приведенный пример позволяет обновлять значения параметра в таблице напрямую. Подскажите как быть в случае вложенной (связанной) таблицы? На главной таблице есть параметр связи с вложенной. Мне нужно поменять значение параметра в основной таблице на основе данных из вложенной.
И второй вопрос. Как быть если данные берутся не из текста, а из комбика?

6 (edited by sibprogsistem 2020-10-29 18:51:32)

Re: Одновременное редактирование нескольких записей в таблице

Jbanchic wrote:
sibprogsistem wrote:

...

SQLExecute('UPDATE q SET qq="'+ Form2.Edit1.Text +'" WHERE id='+IntToStr(Form1.TableGrid1.dbIndexToID(i)));

Спасибо. Я так понимаю, что приведенный пример позволяет обновлять значения параметра в таблице напрямую. Подскажите как быть в случае вложенной (связанной) таблицы? На главной таблице есть параметр связи с вложенной. Мне нужно поменять значение параметра в основной таблице на основе данных из вложенной.
И второй вопрос. Как быть если данные берутся не из текста, а из комбика?

не понял, что значит вложенная, видимо связанная, тогда нужно указать

SQLExecute('UPDATE связанная_таблица SET имя_поля="'+ Form2.Edit1.Text +'" WHERE id_имя_таблицы_с_которой_связали='+IntToStr(Form1.TableGrid1.dbIndexToID(i)));

можно получить просто текст из комбобокса Form2.ComboBox1.Text

Re: Одновременное редактирование нескольких записей в таблице

sibprogsistem wrote:
Jbanchic wrote:
sibprogsistem wrote:

...

SQLExecute('UPDATE q SET qq="'+ Form2.Edit1.Text +'" WHERE id='+IntToStr(Form1.TableGrid1.dbIndexToID(i)));

Спасибо. Я так понимаю, что приведенный пример позволяет обновлять значения параметра в таблице напрямую. Подскажите как быть в случае вложенной (связанной) таблицы? На главной таблице есть параметр связи с вложенной. Мне нужно поменять значение параметра в основной таблице на основе данных из вложенной.
И второй вопрос. Как быть если данные берутся не из текста, а из комбика?

не понял, что значит вложенная, видимо связанная, тогда нужно указать

SQLExecute('UPDATE связанная_таблица SET имя_поля="'+ Form2.Edit1.Text +'" WHERE id_имя_таблицы_с_которой_связали='+IntToStr(Form1.TableGrid1.dbIndexToID(i)));

можно получить просто текст из комбобокса Form2.ComboBox1.Text

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

SQLExecute('UPDATE person SET id_firms='+ IntToStr(firmAbonent.chFirm.dbItemID) +' WHERE id='+IntToStr(Form1.edGrid.dbIndexToID(i)));