Insert com múltiplos registros

10/01/2021

5

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.
Responder

Post mais votado

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;
realmente o dataset dm.query_temp está fechado. o dataset que está aberto é o dm.Query_patrono e nele que deve ser executado o Next
Responder

Mais Posts

11/01/2021

Nilton Shiga

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.
Responder
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
Responder
Obrigado pela colaboração de todos.

Seguindo exemplo do Emerson Nascimento, resolvi o problema.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar