Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Inojosa

Insert Delphi 6 + Oracle Via Código

Recommended Posts

Pessoal, o DBA aqui da empresa me entregou uma query que ele sempre executa manualmente só que ele solicitou para ser feito uma telinha no delphi6 para execultar essa query, mas esta dando um erro e não sei onde estou errando:

 

QUERY:

 

insert into faequcad

(cod_con, cod_equ, descricao)

 

select distinct '177', equ.cod_equ, equ.descricao

from faequcad equ, faecpcad ecp, faprdcad prd

where equ.cod_con='516'

and equ.cod_con=ecp.cod_con and equ.cod_equ=ecp.cod_equ

and ecp.codigo=prd.codigo

and prd.tipo_prd in ('RAX')

and not exists

( select 'a' from faequcad equ2

where equ2.cod_con='177'

and equ.cod_equ=equ2.cod_equ)

 

OBS: essa query roda file no PL-SQL oracle;

 

=======================================================

 

Como fiz no Delphi:

 

procedure TForm2.BitBtn3Click(Sender: TObject);

begin

 

DataModule3.Query4.Active := False;

DataModule3.Query4.SQL.Clear;

DataModule3.Query4.SQL.Add('insert into faequcad');

DataModule3.Query4.SQL.Add('(cod_con, cod_equ, descricao)');

DataModule3.Query4.SQL.Add('select distinct '+EditCodConv_Destino.Text+', equ.cod_equ, equ.descricao');

DataModule3.Query4.SQL.Add('from faequcad equ, faecpcad ecp, faprdcad prd');

DataModule3.Query4.SQL.Add('where equ.cod_con='+EditCodConv.Text+'');

DataModule3.Query4.SQL.Add('and equ.cod_con=ecp.cod_con and equ.cod_equ=ecp.cod_equ');

DataModule3.Query4.SQL.Add('and ecp.codigo=prd.codigo');

DataModule3.Query4.SQL.Add('and prd.tipo_prd = '+EditTipo.Text+'');

DataModule3.Query4.SQL.Add('and not exists');

DataModule3.Query4.SQL.Add('(select '+'a'+' from faequcad equ2');

DataModule3.Query4.SQL.Add('where equ2.cod_con='+EditCodConv_Destino.Text+'');

DataModule3.Query4.SQL.Add('and equ.cod_equ=equ2.cod_equ)');

try

DataModule3.Query4.Active := True;

finally

DataModule3.Query4.Active := False;

end;

end;

 

==============================================================================

 

Erro na execução:

 

Project CopiaEquivalencia.exe raised exception class EDBEngineErro with message 'General SQL error. Columm (rax) not found in any table in the query (or SLV is undefined).'.Process stopped. Use Step or Run to Continue.

 

 

Alguem ai sabe o que estou fazendo errado?

pode me dar alguma dica?

 

============================================================================

Detalhes:

 

Tem um dataSource Ligado a essa query e um DBGride Ligado a esse dataSource.

 

modifiquei a query para um SELECT * FROM .... e mostrou o resultado no grig, mas esse insert fica dando erro!

 

Já tentei colocar ate um (DataModule3.Query4.ExecSQL;) no final da query antes de dar o (...Active)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer o insert você deve utilizar "DataModule3.Query4.ExecSQL;", mas desta forma o seu grid ficará vazio.

 

Tente fazer da seguinte maneira:

 

procedure TForm2.BitBtn3Click(Sender: TObject);

begin

DataModule3.Query4.Active := False;

DataModule3.Query4.SQL.Clear;

DataModule3.Query4.SQL.Add('insert into faequcad');

DataModule3.Query4.SQL.Add('(cod_con, cod_equ, descricao)');

DataModule3.Query4.SQL.Add('select distinct '+EditCodConv_Destino.Text+', equ.cod_equ, equ.descricao');

DataModule3.Query4.SQL.Add('from faequcad equ, faecpcad ecp, faprdcad prd');

DataModule3.Query4.SQL.Add('where equ.cod_con='+EditCodConv.Text+'');

DataModule3.Query4.SQL.Add('and equ.cod_con=ecp.cod_con and equ.cod_equ=ecp.cod_equ');

DataModule3.Query4.SQL.Add('and ecp.codigo=prd.codigo');

DataModule3.Query4.SQL.Add('and prd.tipo_prd = '+EditTipo.Text+'');

DataModule3.Query4.SQL.Add('and not exists');

DataModule3.Query4.SQL.Add('(select '+'a'+' from faequcad equ2');

DataModule3.Query4.SQL.Add('where equ2.cod_con='+EditCodConv_Destino.Text+'');

DataModule3.Query4.SQL.Add('and equ.cod_equ=equ2.cod_equ)');

DataModule3.Query4.ExecSQL;

 

DataModule3.Query4.SQL.Clear;

DataModule3.Query4.SQL.Add('SELECT * FROM ...'); { complete o sql }

DataModule3.Query4.Active := True;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer o insert você deve utilizar "DataModule3.Query4.ExecSQL;", mas desta forma o seu grid ficará vazio.

 

Tente fazer da seguinte maneira:

 

procedure TForm2.BitBtn3Click(Sender: TObject);

begin

DataModule3.Query4.Active := False;

DataModule3.Query4.SQL.Clear;

DataModule3.Query4.SQL.Add('insert into faequcad');

DataModule3.Query4.SQL.Add('(cod_con, cod_equ, descricao)');

DataModule3.Query4.SQL.Add('select distinct '+EditCodConv_Destino.Text+', equ.cod_equ, equ.descricao');

DataModule3.Query4.SQL.Add('from faequcad equ, faecpcad ecp, faprdcad prd');

DataModule3.Query4.SQL.Add('where equ.cod_con='+EditCodConv.Text+'');

DataModule3.Query4.SQL.Add('and equ.cod_con=ecp.cod_con and equ.cod_equ=ecp.cod_equ');

DataModule3.Query4.SQL.Add('and ecp.codigo=prd.codigo');

DataModule3.Query4.SQL.Add('and prd.tipo_prd = '+EditTipo.Text+'');

DataModule3.Query4.SQL.Add('and not exists');

DataModule3.Query4.SQL.Add('(select '+'a'+' from faequcad equ2');

DataModule3.Query4.SQL.Add('where equ2.cod_con='+EditCodConv_Destino.Text+'');

DataModule3.Query4.SQL.Add('and equ.cod_equ=equ2.cod_equ)');

DataModule3.Query4.ExecSQL;

 

DataModule3.Query4.SQL.Clear;

DataModule3.Query4.SQL.Add('SELECT * FROM ...'); { complete o sql }

DataModule3.Query4.Active := True;

end;

 

 

 

Obrigado fernando.fxsoft, mas ainda assim, deu erro mas consegui colocando a query na propriedade SQL do Tquery, mas agora estou sem saber como faço para passar os parametros.

 

Help

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.