Inojosa 0 Denunciar post Postado Agosto 20, 2010 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
fernando.fxsoft 0 Denunciar post Postado Agosto 21, 2010 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
Inojosa 0 Denunciar post Postado Agosto 23, 2010 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