1 (edited by Alfil 2022-03-30 11:27:43)

Topic: Writing Selected Rows to a Database Table

Good afternoon.
The form 'Komlist' has a table 'Book' with the parameter 'goMultiSelect - true'. It is necessary to write all the rows selected in this table to the 'Dolgi' database table in one action. With the help of articles on this forum, a script of the following type was assembled:

var
    i,:integer;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book) VALUES ("'+Komlist.ComChit.sqlValue+'","'+Komlist.Book.sqlValue+'")');
       Dolg.TableGrid1.dbUpdate;
end;

The cycle works, the required number of records is created, but all records are the same, that is, the rows are not sorted out, but the last selected one is simply used. How to fix it?

Post's attachments

Attachment icon Bb.jpg 353.72 kb, 122 downloads since 2022-03-30 

Re: Writing Selected Rows to a Database Table

procedure Form1_Button2_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('INSERT INTO b(bb)VALUES("'+ IntToStr(Form1.TableGrid1.Row[i].ID) +'")');

  UpdateDataBase('b');
end;
Post's attachments

Attachment icon test.zip 4.05 kb, 215 downloads since 2022-03-30 

3 (edited by Alfil 2022-03-30 13:35:23)

Re: Writing Selected Rows to a Database Table

sibprogsistem wrote:
procedure Form1_Button2_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('INSERT INTO b(bb)VALUES("'+ IntToStr(Form1.TableGrid1.Row[i].ID) +'")');

  UpdateDataBase('b');
end;

Да код работает. Сохранил себе. Но возникла проблема уже в другом - оказывается что выдергивается Id другой таблицы (KomList - на скрине можно увидеть) а возможно выдернуть ID Book оттуда? Возможно вопрос глупый и это уже где то обсуждалось, но я, к сожалению, не нашел. Я пока еще пытаюсь только разобраться в этом всем. Как выдернуть с помощью переменной я, вроде бы, понял, но как совместить переменную и данный цикл - пока не понимаю.
Если же вставляю переменную

var
    i,:integer;
    IDbook: string;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           IDbook:= SQLExecute('SELECT id_Book FROM KompList WHERE id='+ IntToStr(Komlist.Book.Row[i].ID));
           SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book) VALUES ("'+Komlist.ComChit.sqlValue+'","'+IDbook+'")');
       Dolg.TableGrid1.dbUpdate;
end;

то записывается только одна строка
Дополнено: Это я глупый и невнимательный! Забыл что цикл завершается на ";". Заключил цикл в begin - end; Все заработало! Огромное спасибо за IntToStr(Komlist.Book.Row.ID !! так теперь это выглядит

var
    i,:integer;
    IDbook: string;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           begin
              IDbook:= SQLExecute('SELECT id_Book FROM KompList WHERE id='+ IntToStr(Komlist.Book.Row[i].ID));
              SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book) VALUES ("'+Komlist.ComChit.sqlValue+'","'+IDbook+'")');
           end;
       Dolg.TableGrid1.dbUpdate;
end;

Между делом возник еще такой вопрос: Возможно ли сделать что б при открытии формы все записи в таблице по умолчанию  были выбраны?

4 (edited by sibprogsistem 2022-03-30 19:24:32)

Re: Writing Selected Rows to a Database Table

Alfil wrote:

Между делом возник еще такой вопрос: Возможно ли сделать что б при открытии формы все записи в таблице по умолчанию  были выбраны?

   

procedure Form1_OnShow (Sender: TObject; Action: string);
var
i: integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    Form1.TableGrid1.Row[i].Selected := True ;

end;
Post's attachments

Attachment icon test.zip 4.29 kb, 215 downloads since 2022-03-30 

Re: Writing Selected Rows to a Database Table

sibprogsistem wrote:
Alfil wrote:

Между делом возник еще такой вопрос: Возможно ли сделать что б при открытии формы все записи в таблице по умолчанию  были выбраны?

   

procedure Form1_OnShow (Sender: TObject; Action: string);
var
i: integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    Form1.TableGrid1.Row[i].Selected := True ;

end;

Спасибо!