Fórum Executar arquivo sql no banco de dados Firebird. #590236
03/01/2018
0
Nesse exemplo o arquivo possui duas querys.
Segue o código:
procedure TForm1.recuperarDado; var resultado: Integer; teste:string; begin SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.LoadFromFile(ObterDiretorioDoExecutavel + 'comando.sql'); SQLQuery1.ExecSQL; end;
Dentro do arquivo "comando.sql" contém o seguinte:
update or insert into db_info (id, db_version, DB_SUBVERSION) values (1, 33, 1);
Como podem ver possui duas querys. Ele somente executa a primeira query e depois gerar uma mensagem de erro ao chegar no "update or insert...".
Erro que é exibido:
Preciso executar varias querys a partir de um único arquivo sql. Como eu poderia fazer?
Obrigado
Cayque
Curtir tópico
+ 0Post mais votado
04/01/2018
Exemplo:
insert into USUARIOS (CODIGO,USUARIO,SENHA) values (6,'Teste','123')
GO
update or insert into db_info (id, db_version, DB_SUBVERSION) values (1, 33, 1)
Faço desta forma no meu trabalho para executar múltiplas transações ao mesmo tempo no Firebird e funciona sem problemas.
Abs.
William Finco
Gostei + 1
Mais Posts
04/01/2018
Cayque
<br />
Exemplo:<br />
insert into USUARIOS (CODIGO,USUARIO,SENHA) values (6,''Teste'',''123'')<br />
GO<br />
update or insert into db_info (id, db_version, DB_SUBVERSION) values (1, 33, 1)<br />
<br />
Faço desta forma no meu trabalho para executar múltiplas transações ao mesmo tempo no Firebird e funciona sem problemas.<br />
<br />
Abs.<br />
<br />
João, tentei usar o GO porém não funcionou. Da erro ao ler o GO. Ainda não está aceitando mais de um comando.<br />
Estou usando o SQLConnection e o SQLQuery do DBExpress para fazer a conexão com o IBExpert/FireBird.
Gostei + 0
04/01/2018
William Finco
Desta forma, a sua primeira abordagem está super correta, usando o ponto-e-vírgula ao final de cada instrução, então o jeito que eu te sugeri está errado.
Também vi que na documentação do firebird o "UPDATE OR INSERT" que você inseriu foi introduzido a partir da versão 2.1 do firebird.
Eu sugiro que você dê uma olhada na query de exemplo do uso do "UPDATE OR INSERT" na documentação contida em https://firebirdsql.org/refdocs/langrefupd21-update-or-insert.html
Eu acho que ao final da segunda query está faltando a cláusula "MATCHING", que no seu caso ficaria:
update or insert into db_info (id, db_version, DB_SUBVERSION) values (1, 33, 1) matching (id)
Abs,
Gostei + 0
06/01/2018
Raimundo Pereira
'UPDATE or INSERT INTO sv_areas (NOME) VALUES ('''+EDT_NOME.Text+''') matching (NOME)';
matching (NOME)'; Este é campo principal que será verificado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)