Insert com múltiplos registros
Olá, dede já o meu obrigado!
Utilizo Delphi 10.3, banco MariaDB.
Necessito que o resultado de um SELECT, mostrado em query1 (funcionando perfeito).
Seja gravado em uma tabela temporária (tb_temp).
Em pesquisas aqui no fórum e Google a fora, não consigo.
Ultima tentativa foi com loop: // Fonte: https://www.youtube.com/watch?v=KiJsFkIIQJc
procedure Tfrm_rel.SpeedButton5Click(Sender: TObject);
Var
I : Integer;
begin
dm.query_temp.Params.ArraySize := dm.Query_patrono.RecordCount;
dm.query_temp.SQL.Add(''INSERT INTO temp ( '');
dm.query_temp.SQL.add(''nome ) '');
dm.query_temp.SQL.Add(''values ( '');
dm.query_temp.SQL.Add('':nome ) '');
dm.Query_patrono.First;
for I := 0 to dm.Query_patrono.RecordCount -1 do
begin
dm.query_temp.ParamByName(''nome'').AsStrings [I] := dm.Query_patrono.FieldByName(''nome'').AsString;
dm.query_temp.Next;
end;
dm.query_temp.Execute(dm.Query_patrono.RecordCount);
end;
Erro apresentado é que meu (DataSet) da query_temp está fechado.
Aos que puderem me ajudar.
* Com link de exemplo
* Explicando onde está o erro do DataSet fechado.
* Uma maneira diferente de realizar este procedimento.
Att.
Utilizo Delphi 10.3, banco MariaDB.
Necessito que o resultado de um SELECT, mostrado em query1 (funcionando perfeito).
Seja gravado em uma tabela temporária (tb_temp).
Em pesquisas aqui no fórum e Google a fora, não consigo.
Ultima tentativa foi com loop: // Fonte: https://www.youtube.com/watch?v=KiJsFkIIQJc
procedure Tfrm_rel.SpeedButton5Click(Sender: TObject);
Var
I : Integer;
begin
dm.query_temp.Params.ArraySize := dm.Query_patrono.RecordCount;
dm.query_temp.SQL.Add(''INSERT INTO temp ( '');
dm.query_temp.SQL.add(''nome ) '');
dm.query_temp.SQL.Add(''values ( '');
dm.query_temp.SQL.Add('':nome ) '');
dm.Query_patrono.First;
for I := 0 to dm.Query_patrono.RecordCount -1 do
begin
dm.query_temp.ParamByName(''nome'').AsStrings [I] := dm.Query_patrono.FieldByName(''nome'').AsString;
dm.query_temp.Next;
end;
dm.query_temp.Execute(dm.Query_patrono.RecordCount);
end;
Erro apresentado é que meu (DataSet) da query_temp está fechado.
Aos que puderem me ajudar.
* Com link de exemplo
* Explicando onde está o erro do DataSet fechado.
* Uma maneira diferente de realizar este procedimento.
Att.
Wesley Fagundes
Curtidas 0
Melhor post
Emerson Nascimento
11/01/2021
dm.query_temp.SQL.Text := 'INSERT INTO temp (nome) values (:nome)'; dm.Query_patrono.First; while not dm.Query_patrono.EOF do begin dm.query_temp.ParamByName('nome').AsString := dm.Query_patrono.FieldByName('nome').AsString; dm.query_temp.Execute; // executa a instrução de dm.query_temp dm.Query_patrono.Next; // vai para o próximo registro de dm.Query_patrono end; dm.Query_patrono.First;
GOSTEI 1
Mais Respostas
Nilton Shiga
10/01/2021
Olá Wesley!
Pelo que entendi do seu código, acho que o problema está na linha "dm.query_temp.Next;" o certo seria "dm.Query_patrono.next".
Espero ter ajudado.
Pelo que entendi do seu código, acho que o problema está na linha "dm.query_temp.Next;" o certo seria "dm.Query_patrono.next".
Espero ter ajudado.
GOSTEI 0
Emerson Nascimento
10/01/2021
outra forma de fazer isso seria:
dm.query_temp.SQL.Text := 'INSERT INTO temp (nome) SELECT camponome FROM tabelausadaemquerypatrono'; dm.query_temp.Execute; // executa a instrução de dm.query_temp
GOSTEI 1
Wesley Fagundes
10/01/2021
Obrigado pela colaboração de todos.
Seguindo exemplo do Emerson Nascimento, resolvi o problema.
Seguindo exemplo do Emerson Nascimento, resolvi o problema.
GOSTEI 0