GARANTIR DESCONTO

Fórum SQLQuery com insert no IB/Firebird, só com uma linha? #273536

22/03/2005

0

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?


Danilo_zanaga

Danilo_zanaga

Responder

Posts

22/03/2005

Isaque

Basicamente pq o componente executo apenas um bloco de instruções SQL.


Responder

Gostei + 0

22/03/2005

Danilo_zanaga

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.


Responder

Gostei + 0

22/03/2005

Isaque

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.


Responder

Gostei + 0

22/03/2005

Danilo_zanaga

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.


Responder

Gostei + 0

22/03/2005

Gandalf.nho

Se vc não se importar em misturar componentes, poderia tentar o componente IBScript da paleta IBX


Responder

Gostei + 0

22/03/2005

Kotho

Não tenho certeza se funciona... mas tenta colocar um begin no começo e um end no final...

begin
insert...
...
end


Responder

Gostei + 0

22/03/2005

Danilo_zanaga

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.


Responder

Gostei + 0

22/03/2005

Danilo_zanaga

Não tenho certeza se funciona... mas tenta colocar um begin no começo e um end no final... begin insert... ... end


nao funcionou


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar