Erro ao Abrir o ClientDataSet

Delphi

22/06/2009

Estou com problema ao abrir meu ClientDataSet apos uma consulta no Banco de Dados, acredito que seja, por que meu SQL esta muito grande dentro do Meu SqlQuery.

A mensagem que aparece quando eu tento abrir meu CDS é:

´Project MN_Relatorios.exe raised exception class TDBXError with message ´ORA-24337: handle de instrução não preparado´.´

alguem ja teve este problema?

O codigo executado abaixo:


if trim(FormPrincipal.SQLQBaseConectadaINSTANCE_NAME.Text) = ´prdo´ then
begin
with SQLQuery1 do
begin
ClientDataSet1.Close;
SQL.Clear;
SQL.Add(´select a.empresa, ´);
SQL.Add(´ f.den_empresa, ´);
SQL.Add(´ c.pedido, ´);
SQL.Add(´ g.seq_item_nf, ´);
SQL.Add(´ c.ord_montag, ´);
SQL.Add(´ a.nota_fiscal, ´);
SQL.Add(´ a.serie_nota_fiscal, ´);
SQL.Add(´ a.sit_nota_fiscal, ´);
SQL.Add(´ a.usu_incl_nf, ´);
SQL.Add(´ a.dat_hor_emissao, ´);
SQL.Add(´ c.natureza_operacao, ´);
SQL.Add(´ g.cod_fiscal, ´);
SQL.Add(´ a.cliente, ´);
SQL.Add(´ b.nom_cliente, ´);
SQL.Add(´ c.item, ´);
SQL.Add(´ e.den_item, ´);
SQL.Add(´ c.qtd_item as qtd_item, ´);
SQL.Add(´ c.unid_medida, ´);
SQL.Add(´ c.peso_unit as peso_unit, ´);
SQL.Add(´ c.preco_unit_liquido as preco_unit_liquido, ´);
SQL.Add(´ --c.pre_unit_ped ´);
SQL.Add(´ c.val_liquido_item as val_liquido_item, ´);
SQL.Add(´ --e.val_desc_cred_icm ´);
SQL.Add(´ a.val_frete_rodov, ´);
SQL.Add(´ a.val_seguro_rodov, ´);
SQL.Add(´ --e.val_tot_ipi ´);
SQL.Add(´ --a.val_tot_icm ´);
SQL.Add(´ a.val_mercadoria as val_mercadoria, ´);
SQL.Add(´ g.bc_trib_mercadoria as bc_trib_mercadoria, ´);
SQL.Add(´ a.val_nota_fiscal as val_nota_fiscal, ´);
SQL.Add(´ c.val_contab_item as val_contab_item, ´);
SQL.Add(´ g.val_trib_merc as icms, ´);
SQL.Add(´ a.moeda, ´);
SQL.Add(´ a.cond_pagto, ´);
SQL.Add(´ d.den_cnd_pgto, ´);
SQL.Add(´ a.peso_liquido as peso_liquido, ´);
SQL.Add(´ a.peso_bruto as peso_bruto, ´);
SQL.Add(´ a.transportadora, ´);
SQL.Add(´ a.placa_veiculo, ´);
SQL.Add(´ h.num_conhec ´);
SQL.Add(´ from fat_nf_mestre a , ´);
SQL.Add(´ clientes b, ´);
SQL.Add(´ fat_nf_item c, ´);
SQL.Add(´ cond_pgto d, ´);
SQL.Add(´ item e, ´);
SQL.Add(´ empresa f, ´);
SQL.Add(´ fat_nf_item_fisc g, ´);
SQL.Add(´ frete_sup_x_nff h ´);
SQL.Add(´ where f.cod_empresa = a.empresa ´);
SQL.Add(´ and a.cliente = b.cod_cliente ´);
SQL.Add(´ and a.empresa = c.empresa ´);
SQL.Add(´ and a.trans_nota_fiscal = c.trans_nota_fiscal ´);
SQL.Add(´ and a.empresa = e.cod_empresa ´);
SQL.Add(´ and c.item = e.cod_item ´);
SQL.Add(´ and a.cond_pagto = d.cod_cnd_pgto ´);
SQL.Add(´ and a.empresa = g.empresa ´);
SQL.Add(´ and a.trans_nota_fiscal = g.trans_nota_fiscal ´);
SQL.Add(´ and e.cod_empresa = c.empresa ´);
SQL.Add(´ and c.empresa = g.empresa ´);
SQL.Add(´ and c.trans_nota_fiscal = g.trans_nota_fiscal ´);
SQL.Add(´ and c.seq_item_nf = g.seq_item_nf ´);
SQL.Add(´ and a.empresa = h.cod_empresa (+) ´);
SQL.Add(´ and a.nota_fiscal = h.num_nff (+) ´);
SQL.Add(´ and a.transportadora = h.cod_transpor (+) ´);
{Aqui começa os filtros do relatório, conforme preenchido pelo usuário BASE PRDO}
if RDBNormal.Checked = true then
SQL.Add(´ and a.sit_nota_fiscal = ´´N´´ ´);
if RDBCancelada.Checked = true then
SQL.Add(´ and a.sit_nota_fiscal = ´´C´´ ´);
if edtempresa.Text <> ´´ then
SQL.Add(´ and a.empresa like ´´´+edtempresa.Text+´¬´´ ´);
if edtcliente.Text <> ´´ then
SQL.Add(´ and a.cliente like ´´´+edtcliente.Text+´¬´´ ´);
if edtproduto.Text <> ´´ then
SQL.Add(´ and c.item like ´´´+edtproduto.Text+´¬´´ ´);
if edttransportador.Text <> ´´ then
SQL.Add(´ and a.transportadora like ´´´+edttransportador.Text+´¬´´ ´);
if edtnatoperacao.Text <> ´´ then
SQL.Add(´ and c.natureza_operacao like ´´´+edtnatoperacao.Text+´¬´´ ´);
if edtnf.Text <> ´´ then
SQL.Add(´ and a.nota_fiscal like ´´´+edtnf.Text+´¬´´ ´);
SQL.Add(´ and trunc(a.dat_hor_emissao) between ´´´+DateToStr(datanfini.Date)+´´´ and ´´´+DateToStr(datanffim.Date)+´´´ ´);
if edtpedido.Text <> ´´ then
SQL.Add(´ and c.pedido like ´´´+edtpedido.Text+´¬´´ ´);
if edtom.Text <> ´´ then
SQL.Add(´ and c.ord_montag like ´´´+edtom.Text+´¬´´ ´);
if edtplaca.Text <> ´´ then
SQL.Add(´ and a.placa_veiculo like ´´´+edtplaca.Text+´¬´´ ´);
if edtcfop.Text <> ´´ then
SQL.Add(´ and g.cod_fiscal like ´´´+edtcfop.Text+´¬´´ ´);
SQL.Add(´ and g.tributo_benef = ´´ICMS´´ ´);

SQL.Add(´union ´);

SQL.Add(´select a.cod_empresa, ´);
SQL.Add(´ g.den_empresa, ´);
SQL.Add(´ c.num_pedido, ´);
SQL.Add(´ c.num_sequencia, ´);
SQL.Add(´ c.num_om, ´);
SQL.Add(´ a.num_nff, ´);
SQL.Add(´ a.ser_nff, ´);
SQL.Add(´ a.ies_situacao, ´);
SQL.Add(´ ´´ as usu_incl_nf,--Usuario NF ´);
SQL.Add(´ a.dat_emissao, ´);
SQL.Add(´ a.cod_nat_oper, ´);
SQL.Add(´ e.cod_fiscal, ´);
SQL.Add(´ a.cod_cliente, ´);
SQL.Add(´ b.nom_cliente, ´);
SQL.Add(´ c.cod_item, ´);
SQL.Add(´ f.den_item, ´);
SQL.Add(´ c.qtd_item, ´);
SQL.Add(´ c.cod_unid_med, ´);
SQL.Add(´ c.pes_unit, ´);
SQL.Add(´ 0 as preco_unit_liquido,--c.pre_unit_ped, ´);
SQL.Add(´ --c.pre_unit_nf, ´);
SQL.Add(´ c.val_liq_item, ´);
SQL.Add(´ --a.val_desc_cred_icm, ´);
SQL.Add(´ a.val_frete_rod, ´);
SQL.Add(´ a.val_seguro_rod, ´);
SQL.Add(´ --a.val_tot_ipi, ´);
SQL.Add(´ --a.val_tot_icm, ´);
SQL.Add(´ --(verificar)g.bc_trib_mercadoria ´);
SQL.Add(´ a.val_tot_mercadoria, ´);
SQL.Add(´ a.val_tot_nff, ´);
SQL.Add(´ a.val_tot_nff, ´);
SQL.Add(´ c.pre_unit_nf as val_contab_item,--(atencao) ´);
SQL.Add(´ a.val_tot_icm as icms, --(atencao) ´);
SQL.Add(´ a.cod_moeda, ´);
SQL.Add(´ a.cod_cnd_pgto, ´);
SQL.Add(´ d.den_cnd_pgto, ´);
SQL.Add(´ a.pes_tot_liquido, ´);
SQL.Add(´ a.pes_tot_bruto, ´);
SQL.Add(´ a.cod_transpor, ´);
SQL.Add(´ e.num_placa, ´);
SQL.Add(´ 0 as num_conhec--(placa) ´);
SQL.Add(´FROM logix.nf_mestre a, ´);
SQL.Add(´ clientes b, ´);
SQL.Add(´ logix.nf_item c, ´);
SQL.Add(´ cond_pgto d, ´);
SQL.Add(´ logix.wfat_mestre e, ´);
SQL.Add(´ item f, ´);
SQL.Add(´ empresa g ´);
SQL.Add(´ where a.num_nff not in (select w.nota_fiscal from fat_nf_mestre w ´);
SQL.Add(´ where w.empresa = a.cod_empresa ´);
SQL.Add(´ and w.cliente = a.cod_cliente ´);
SQL.Add(´ and w.sit_nota_fiscal = a.ies_situacao ) ´);
SQL.Add(´ and not exists ´);
SQL.Add(´ (select * from fat_nf_mestre z ´);
SQL.Add(´ where z.empresa = a.cod_empresa ´);
SQL.Add(´ and z.cliente = a.cod_cliente ´);
SQL.Add(´ and z.sit_nota_fiscal = a.ies_situacao) ´);
SQL.Add(´ and b.cod_cliente = a.cod_cliente ´);
SQL.Add(´ and c.cod_empresa = a.cod_empresa ´);
SQL.Add(´ and c.num_nff = a.num_nff ´);
SQL.Add(´ and d.cod_cnd_pgto = a.cod_cnd_pgto ´);
SQL.Add(´ and e.cod_empresa (+) = a.cod_empresa ´);
SQL.Add(´ and e.num_nff (+) = a.num_nff ´);
SQL.Add(´ and f.cod_empresa (+) = c.cod_empresa ´);
SQL.Add(´ and f.cod_item (+) = c.cod_item ´);
SQL.Add(´ and a.cod_empresa = g.cod_empresa ´);
{Aqui começa os filtros do relatório, conforme preenchido pelo usuário BASE PRDO}
if RDBNormal.Checked = true then
SQL.Add(´ and a.ies_situacao = ´´N´´ ´);
if RDBCancelada.Checked = true then
SQL.Add(´ and a.ies_situacao = ´´C´´ ´);
if edtempresa.Text <> ´´ then
SQL.Add(´ and a.cod_empresa like ´´´+edtempresa.Text+´¬´´ ´);
if edtcliente.Text <> ´´ then
SQL.Add(´ and a.cod_cliente like ´´´+edtcliente.Text+´¬´´ ´);
if edtproduto.Text <> ´´ then
SQL.Add(´ and c.cod_item like ´´´+edtproduto.Text+´¬´´ ´);
if edttransportador.Text <> ´´ then
SQL.Add(´ and a.cod_transpor like ´´´+edttransportador.Text+´¬´´ ´);
if edtnatoperacao.Text <> ´´ then
SQL.Add(´ and a.cod_nat_oper like ´´´+edtnatoperacao.Text+´¬´´ ´);
if edtnf.Text <> ´´ then
SQL.Add(´ and a.num_nff like ´´´+edtnf.Text+´¬´´ ´);
SQL.Add(´ and trunc(a.dat_emissao) between ´´´+DateToStr(datanfini.Date)+´´´ and ´´´+DateToStr(datanffim.Date)+´´´ ´);
if edtpedido.Text <> ´´ then
SQL.Add(´ and c.pedido like ´´´+edtpedido.Text+´¬´´ ´);
if edtom.Text <> ´´ then
SQL.Add(´ and c.ord_montag like ´´´+edtom.Text+´¬´´ ´);
if edtplaca.Text <> ´´ then
SQL.Add(´ and e.num_placa like ´´´+edtplaca.Text+´¬´´ ´);
if edtcfop.Text <> ´´ then
SQL.Add(´ and a.cod_fiscal like ´´´+edtcfop.Text+´¬´´ ´);
//SQL.Add(´ and g.tributo_benef = ´´ICMS´´ ´);
end;
end;

ClientDataSet1.open;


Marlonnardi

Marlonnardi

Curtidas 0

Respostas

Marlonnardi

Marlonnardi

22/06/2009

Ninguem teve este problema?

se alguem puder me ajudar eu agradeço.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

22/06/2009

como seria a instrução [b:27aefd2cee]completa[/b:27aefd2cee], executada a partir do console do Oracle?


GOSTEI 0
Marlonnardi

Marlonnardi

22/06/2009

NO Oracle a execução do SQL seria igual ao SQL acima, a diferença é que a mesma nao possui os filstros que eu uso em minha aplicação.

select a.empresa,
f.den_empresa,
c.pedido,
g.seq_item_nf,
c.ord_montag,
a.nota_fiscal,
a.serie_nota_fiscal,
a.sit_nota_fiscal,
a.usu_incl_nf,
a.dat_hor_emissao,
c.natureza_operacao,
g.cod_fiscal,
a.cliente,
b.nom_cliente,
c.item,
e.den_item,
c.qtd_item as qtd_item,
c.unid_medida,
c.peso_unit as peso_unit,
c.preco_unit_liquido as preco_unit_liquido,
--c.pre_unit_ped
c.val_liquido_item as val_liquido_item,
--e.val_desc_cred_icm
a.val_frete_rodov,
a.val_seguro_rodov,
--e.val_tot_ipi
--a.val_tot_icm
a.val_mercadoria as val_mercadoria,
g.bc_trib_mercadoria as bc_trib_mercadoria,
a.val_nota_fiscal as val_nota_fiscal,
c.val_contab_item as val_contab_item,
g.val_trib_merc as icms,
a.moeda,
a.cond_pagto,
d.den_cnd_pgto,
a.peso_liquido as peso_liquido,
a.peso_bruto as peso_bruto,
a.transportadora,
a.placa_veiculo,
h.num_conhec
from fat_nf_mestre a ,
clientes b,
fat_nf_item c,
cond_pgto d,
item e,
empresa f,
fat_nf_item_fisc g,
frete_sup_x_nff h
where f.cod_empresa = a.empresa
and a.cliente = b.cod_cliente
and a.empresa = c.empresa
and a.trans_nota_fiscal = c.trans_nota_fiscal
and a.empresa = e.cod_empresa
and c.item = e.cod_item
and a.cond_pagto = d.cod_cnd_pgto
and a.empresa = g.empresa
and a.trans_nota_fiscal = g.trans_nota_fiscal
and e.cod_empresa = c.empresa
and c.empresa = g.empresa
and c.trans_nota_fiscal = g.trans_nota_fiscal
and c.seq_item_nf = g.seq_item_nf
and a.empresa = h.cod_empresa (+)
and a.nota_fiscal = h.num_nff (+)
and a.transportadora = h.cod_transpor (+)
and a.trans_nota_fiscal = h.trans_nota_fiscal_fatura (+)

union

select a.cod_empresa,
g.den_empresa,
c.num_pedido,
c.num_sequencia,
c.num_om,
a.num_nff,
a.ser_nff,
a.ies_situacao,
´´ as usu_incl_nf,--Usuario NF
a.dat_emissao,
a.cod_nat_oper,
e.cod_fiscal,
a.cod_cliente,
b.nom_cliente,
c.cod_item,
f.den_item,
c.qtd_item,
c.cod_unid_med,
c.pes_unit,
0 as preco_unit_liquido,--c.pre_unit_ped,
--c.pre_unit_nf,
c.val_liq_item,
--a.val_desc_cred_icm,
a.val_frete_rod,
a.val_seguro_rod,
--a.val_tot_ipi,
--a.val_tot_icm,
--(verificar)g.bc_trib_mercadoria
a.val_tot_mercadoria,
a.val_tot_nff,
a.val_tot_nff,
c.pre_unit_nf as val_contab_item,--(atencao)
a.val_tot_icm as icms, --(atencao)
a.cod_moeda,
a.cod_cnd_pgto,
d.den_cnd_pgto,
a.pes_tot_liquido,
a.pes_tot_bruto,
a.cod_transpor,
e.num_placa,
0 as num_conhec--(placa)
FROM logix.nf_mestre a,
clientes b,
logix.nf_item c,
cond_pgto d,
logix.wfat_mestre e,
item f,
empresa g
where a.num_nff not in (select w.nota_fiscal from fat_nf_mestre w
where w.empresa = a.cod_empresa
and w.cliente = a.cod_cliente
and w.sit_nota_fiscal = a.ies_situacao )
and not exists
(select * from fat_nf_mestre z
where z.empresa = a.cod_empresa
and z.cliente = a.cod_cliente
and z.sit_nota_fiscal = a.ies_situacao)
and b.cod_cliente = a.cod_cliente
and c.cod_empresa = a.cod_empresa
and c.num_nff = a.num_nff
and d.cod_cnd_pgto = a.cod_cnd_pgto
and e.cod_empresa (+) = a.cod_empresa
and e.num_nff (+) = a.num_nff
and f.cod_empresa (+) = c.cod_empresa
and f.cod_item (+) = c.cod_item
and a.cod_empresa = g.cod_empresa

Funciona Perfeitamente, erro de sintaxe não é, o problema que eu acredito que seja, é por que eu informo muita instrução dentro da query, ela deve ter algum limite.

Abrcss.


GOSTEI 0
Lightshine

Lightshine

22/06/2009

Tenta o seguinte amigo:

SQLQuery1.PrepareStatement;
ClientDataSet1.Open;


GOSTEI 0
Lightshine

Lightshine

22/06/2009

Tenta o seguinte amigo:

SQLQuery1.PrepareStatement;
ClientDataSet1.Open;

Lightshine


GOSTEI 0
POSTAR