SQLQuery com insert no IB/Firebird, só com uma linha?
Seguinte,
Estou desenvolvendo um sistema de migração de dados. Ocorre que se eu colocar dois ou mais INSERT´s no SQLQuery e executar, o delphi sempre me dá erro na linha 2. Executando a mesma query no console do IB/Firebird, esse erro não ocorre. Pq?
Estou desenvolvendo um sistema de migração de dados. Ocorre que se eu colocar dois ou mais INSERT´s no SQLQuery e executar, o delphi sempre me dá erro na linha 2. Executando a mesma query no console do IB/Firebird, esse erro não ocorre. Pq?
Danilo_zanaga
Curtidas 0
Respostas
Isaque
22/03/2005
Basicamente pq o componente executo apenas um bloco de instruções SQL.
GOSTEI 0
Danilo_zanaga
22/03/2005
Basicamente pq o componente executo apenas um bloco de instruções SQL.
Exatamente,mas deveria executar o bloco todo. Se eu colocar a seguinte clausula SQL em SQLQuery1:
INSERT INTO TABELA VALUES(´1´,´2´,´3´);
INSERT INTO TABELA VALUES(´4´,´5´,´6´);
INSERT INTO TABELA VALUES(´7´,´8´,´9´);
Executará a linha um e dará um erro na linha dois. Se eu fizer esta mesma operação em um base PostgreSQL não dará nenhum erro. Ou se eu colocar estas 3 linhas no marathon (por exemplo), não dará erro algum.
Gostaria de saber se deve ser um bug do dbexpress com o IB/Firebase e se existe maneira de realizar esta operação.
GOSTEI 0
Isaque
22/03/2005
Os componentes TSQLQuery não foram preparados para trabalharem nesse tipo de situação, logo é inviável a execução de mais de um bloco de instruções SQL no mesmo componente.
O q vc poderá fazer é criar uma rotina que encapsule os blocos de instruções SQL que vc deseja executar e logo a seguir um loop que leia essas instruções, transfira-as para um componente TSQLQuery e as execute. Isso uma a uma.
O q vc poderá fazer é criar uma rotina que encapsule os blocos de instruções SQL que vc deseja executar e logo a seguir um loop que leia essas instruções, transfira-as para um componente TSQLQuery e as execute. Isso uma a uma.
GOSTEI 0
Danilo_zanaga
22/03/2005
Os componentes TSQLQuery não foram preparados para trabalharem nesse tipo de situação, logo é inviável a execução de mais de um bloco de instruções SQL no mesmo componente.
O q vc poderá fazer é criar uma rotina que encapsule os blocos de instruções SQL que vc deseja executar e logo a seguir um loop que leia essas instruções, transfira-as para um componente TSQLQuery e as execute. Isso uma a uma.
Uma das opçoes do meu sistema é justamente essa, inserir uma linha e executar, mas tenho a opção de carregar quantas linhas o usuário quiser (ex: 1.000 por vez), e com PostgreSQL funciona direitinho (com TSQLQuery, inclusive). Creio que esta limitação está associada ao IB/FB.
GOSTEI 0
Gandalf.nho
22/03/2005
Se vc não se importar em misturar componentes, poderia tentar o componente IBScript da paleta IBX
GOSTEI 0
Kotho
22/03/2005
Não tenho certeza se funciona... mas tenta colocar um begin no começo e um end no final...
begin
insert...
...
end
begin
insert...
...
end
GOSTEI 0
Danilo_zanaga
22/03/2005
Se vc não se importar em misturar componentes, poderia tentar o componente IBScript da paleta IBX
Pensei nesta possibilidade, mas como estou querendo enviar o sistema para o ClubeDelphi (UpLoader), gostaria que fosse somente com BDE e dbExpress, mas vou tentar.
GOSTEI 0
Danilo_zanaga
22/03/2005
Não tenho certeza se funciona... mas tenta colocar um begin no começo e um end no final...
begin
insert...
...
end
nao funcionou
GOSTEI 0