Cannot update a complex query with more then one table

27/03/2013

7

PESSOAL POR FAVOR ME AJUDEM TENHO UM FORMULARIO ONDE FAÇO AS NOTAS FISCAIS, TENHO UM BOTÃO ONDE EU IMPORTO OS CUPONS FISCAL
POREM QUANDO CLICO NESTE BOTÃO ATE INICIA A CHAMADA DOS ITENS,MAIS AI JA DA ESTE ERRO,(Cannot update a complex query with more then one table).
PESSOAL PRECISO MUITO DA AJUDA DOS COLEGAS POIS PRECISO ENTREGAR ISSO NA SEXTA FEIRA (PARA MUITOS FERIADO).
*************************
TO COLOCANDO MEU CODIGO AQUI PARA DAR OLHADA...
procedure Tfrmnotafiscal_importacupom.ecupomKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then perform(wm_nextdlgctl,0,0);
end;

procedure Tfrmnotafiscal_importacupom.bconfirmaClick(Sender: TObject);
var
vtotal,vsubtotal,vdesconto,vbaseicms,vvaloricms : double;
vitem : integer;
vcodvendedor, vnumero_nota, vcfop, vcodcliente, vcodfilial ,vmodelo,vserie : string;
vemissao , vsaida : TDateTime;
begin
if ecupom.Text <> '' then
begin

vtotal := 0;
vsubtotal := 0;
vdesconto := 0;
vbaseicms := 0;
vvaloricms := 0;

ProgressBar1.Position := 0;
cxMemo1.Text := '';
cxMemo1.Lines.Add('Aguarde, Verificando a Exitência da Nota Fiscal!');

query.Close;
query.SQL.Clear;
query.SQL.Add('select CUPOM_NUMERO,CUPOM_MODELO from c000032 where cupom_numero = '''+ecupom.Text+'''');
query.SQL.Add('and cupom_modelo = ''01''');
query.Open;
if query.RecordCount > 0 then
begin
Application.messagebox('Já Foi Emitido Uma Nota Fiscal Para Esse Cupom!','Atenção!',mb_ok+MB_ICONEXCLAMATION);
ecupom.Text := '';
ecupom.SetFocus;
cxMemo1.Text := '';
exit;
end;

{
qrnotafiscal_item.Close;
qrnotafiscal_item.SQL.Clear;
qrnotafiscal_item.SQL.Add('select * from c000062');
qrnotafiscal_item.Open;
}

query.Close;
query.SQL.Clear;
query.SQL.Add('select * from c000032 where cupom_numero = '''+ecupom.Text+'''');
query.SQL.Add('and ecf_serie = '''+ copy(combo_ecf.Text,7,20) +'''');
query.SQL.Add('and cupom_modelo = ''2D''');
query.SQL.Add('order by cupom_item descending');
query.Open;

if query.RecordCount > 0 then
begin

ProgressBar1.Max := query.RecordCount;
cxMemo1.Text := '';

vnumero_nota := frmnotafiscal.ENUMERO.Text;
vnumero_inclui_cupom := query.fieldbyname('cupom_numero').AsString;
vnumero_inclui_nota := frmprincipal.codifica('000061'); //frmmodulo.qrnotafiscal.fieldbyname('codigo').asstring;
vcfop := frmnotafiscal.ecfop.Text;
vcodcliente := frmnotafiscal.ecliente.Text;
vcodfilial := frmnotafiscal.efilial.Text;
vmodelo := frmnotafiscal.ecodmodelo.Text;
vserie := frmnotafiscal.eserie.Text;
vemissao := frmnotafiscal.edata_cadastro.Date;
vsaida := frmnotafiscal.EDATA_SAIDA.Date;
vcodvendedor := query.fieldbyname('codvendedor').AsString;

while not query.Eof do begin
cxMemo1.Lines.Add(query.fieldbyname('codproduto').AsString+ ' ' +frmmodulo.qrnotafiscal.fieldbyname('numero').asstring+' '+formatfloat('#,###,##0.00',query.fieldbyname('total').AsFloat));


if qrproduto.Locate('codigo',query.fieldbyname('codproduto').AsString,[loCaseInsensitive]) then
begin
frmnotafiscal.qrnotafiscal_item.Insert;
frmnotafiscal.qrnotafiscal_item.FieldByName('CODIGO').ASSTRING := frmprincipal.codifica('000032');
frmnotafiscal.qrnotafiscal_item.FieldByName('CODPRODUTO').ASSTRING := query.fieldbyname('codproduto').AsString;
frmnotafiscal.qrnotafiscal_item.FieldByName('PRODUTO').ASSTRING := qrproduto.fieldbyname('PRODUTO').AsString;
frmnotafiscal.qrnotafiscal_item.FieldByName('UNIDADE').ASSTRING := qrproduto.fieldbyname('UNIDADE').AsString;
//frmnotafiscal.qrnotafiscal_item.FieldByName('CODBARRA').Value := ''; //query.fieldbyname('CODBARRA').AsString;
frmnotafiscal.qrnotafiscal_item.FieldByName('codnota').asstring := vnumero_inclui_nota;
frmnotafiscal.qrnotafiscal_item.FieldByName('CODLANCAMENTO').ASSTRING := frmnotafiscal.qrnotafiscal_item.FieldByName('CODIGO').ASSTRING;
frmnotafiscal.qrnotafiscal_item.FieldByName('PESO_BRUTO').AsFloat := qrproduto.fieldbyname('PESO').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('PESO_LIQUIDO').AsFloat := qrproduto.fieldbyname('PESO_LIQUIDO').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('qtde').AsFloat := query.fieldbyname('qtde').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('UNITARIO').AsFloat := query.fieldbyname('unitario').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('TOTAL').AsFloat := query.fieldbyname('total').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('IPI').AsFloat := query.fieldbyname('ipi').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('ICMS').AsFloat := qrproduto.fieldbyname('aliquota').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('CFOP').AsString := frmnotafiscal.ecfop.Text;
frmnotafiscal.qrnotafiscal_item.FieldByName('CODGRADE').AsString := query.fieldbyname('codgrade').AsString;
frmnotafiscal.qrnotafiscal_item.FieldByName('SERIAL').AsString := query.fieldbyname('serial').AsString;
frmnotafiscal.qrnotafiscal_item.FieldByName('VALOR_IPI').AsFloat := query.fieldbyname('valor_ipi').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('CLASSIFICACAO_FISCAL').AsString := '';
frmnotafiscal.qrnotafiscal_item.FieldByName('CST').AsString := qrproduto.fieldbyname('cst').AsString;

if query.fieldbyname('aliquota').AsFloat > 0 then
begin
frmnotafiscal.qrnotafiscal_item.FieldByName('VALOR_ICMS').AsFloat := query.fieldbyname('total').AsFloat*query.fieldbyname('aliquota').AsFloat/100;
frmnotafiscal.qrnotafiscal_item.FieldByName('BASE_CALCULO').AsFloat := query.fieldbyname('total').AsFloat;
end
else
begin
frmnotafiscal.qrnotafiscal_item.FieldByName('VALOR_ICMS').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('BASE_CALCULO').AsFloat := 0;
end;

frmnotafiscal.qrnotafiscal_item.FieldByName('ICMS_REDUZIDO').AsFloat := query.fieldbyname('icms_reduzido').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('MARGEM_AGREGADA').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('BASE_SUB').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('ICMS_SUB').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('ISENTO').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('DESCONTO').AsFloat := 0; //query.fieldbyname('desconto').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('SUBTOTAL').AsFloat := query.fieldbyname('total').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('ITEM').AsString := query.fieldbyname('cupom_item').AsString;
frmnotafiscal.qrnotafiscal_item.FieldByName('GRADE').AsString := '';

if qrproduto.FieldByName('piscofins').AsString = 'S' then
begin
frmnotafiscal.qrnotafiscal_item.FieldByName('PIS_ALIQUOTA').AsFloat := frmmodulo.qrFilialPIS.AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('PIS_BASE').AsFloat := query.fieldbyname('total').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('PIS_VALOR').AsFloat := (query.fieldbyname('total').AsFloat*frmmodulo.qrFilialPIS.AsFloat/100);
frmnotafiscal.qrnotafiscal_item.FieldByName('COFINS_ALIQUOTA').AsFloat := frmmodulo.qrFilialCOFINS.AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('COFINS_BASE').AsFloat := query.fieldbyname('total').AsFloat;
frmnotafiscal.qrnotafiscal_item.FieldByName('COFINS_VALOR').AsFloat := (query.fieldbyname('total').AsFloat*frmmodulo.qrFilialCOFINS.AsFloat/100);
end
else
begin
frmnotafiscal.qrnotafiscal_item.FieldByName('PIS_ALIQUOTA').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('PIS_BASE').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('PIS_VALOR').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('COFINS_ALIQUOTA').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('COFINS_BASE').AsFloat := 0;
frmnotafiscal.qrnotafiscal_item.FieldByName('COFINS_VALOR').AsFloat := 0;
end;

//frmnotafiscal.qrnotafiscal_item.FieldByName('CREDITO_ICMS').AsFloat := query.fieldbyname('credito_icms').AsFloat;
//frmnotafiscal.qrnotafiscal_item.Post;
Application.ProcessMessages;
end;

vtotal := vtotal+(query.fieldbyname('total').AsFloat);

vsubtotal := vsubtotal+(query.fieldbyname('TOTAL').AsFloat-query.fieldbyname('desconto').AsFloat);
vdesconto := vdesconto+(query.fieldbyname('desconto').AsFloat);

if query.fieldbyname('aliquota').AsFloat > 0 then
begin
vbaseicms := vbaseicms+(query.fieldbyname('total').AsFloat-query.fieldbyname('desconto').AsFloat);
vvaloricms := vvaloricms+(vbaseicms*query.fieldbyname('aliquota').AsFloat/100);
end;

query.Next;
vitem := vitem + 1;

ProgressBar1.Position := ProgressBar1.Position + 1;
Application.ProcessMessages;
end;

frmnotafiscal_menu.qrnota.Close;
frmnotafiscal_menu.qrnota.SQL.Clear;
frmnotafiscal_menu.qrnota.SQL.Add('select * from c000061');
frmnotafiscal_menu.qrnota.Open;

frmnotafiscal_menu.qrnota.Insert;
frmnotafiscal_menu.qrnota.FieldByName('codigo').asstring := vnumero_inclui_nota;
frmnotafiscal_menu.qrnota.FieldByName('codfilial').asstring := vcodfilial;
frmnotafiscal_menu.qrnota.FieldByName('numero').asstring := vnumero_nota;
frmnotafiscal_menu.qrnota.FieldByName('cfop').asstring := vcfop;
frmnotafiscal_menu.qrnota.FieldByName('data').AsDateTime := vemissao;
frmnotafiscal_menu.qrnota.FieldByName('data_saida').AsDateTime := vsaida;
frmnotafiscal_menu.qrnota.FieldByName('codcliente').AsString := vcodcliente;
frmnotafiscal_menu.qrnota.FieldByName('hora').AsString := TimeToStr(time);
frmnotafiscal_menu.qrnota.FieldByName('modelo_nf').AsString := vmodelo;
frmnotafiscal_menu.qrnota.FieldByName('serie_nf').AsString := vserie;
frmnotafiscal_menu.qrnota.FieldByName('tipo').AsString := 'S';
frmnotafiscal_menu.qrnota.FieldByName('codvendedor').asstring := vcodvendedor;

frmnotafiscal_menu.qrnota.fieldbyname('situacao').asinteger := 1;
frmnotafiscal_menu.qrnota.fieldbyname('baixa_estoque').asstring := 'S';
frmnotafiscal_menu.qrnota.fieldbyname('sit').asstring := 'N';
frmnotafiscal_menu.qrnota.fieldbyname('movimento').asstring := 'S';
frmnotafiscal_menu.qrnota.FieldByName('INF1').AsString := 'REF. AO CUPOM NÚMERO ' + ecupom.Text;
frmnotafiscal_menu.qrnota.FieldByName('BAIXA_ESTOQUE').AsString := 'N';
frmnotafiscal_menu.qrnota.FieldByName('itens').asinteger := vitem;
frmnotafiscal_menu.qrnota.fieldbyname('BASE_CALCULO').asfloat := vbaseicms;
frmnotafiscal_menu.qrnota.fieldbyname('VALOR_ICMS').asfloat := vvaloricms;
frmnotafiscal_menu.qrnota.FieldByName('VALOR_TOTAL_IPI').asfloat := query.fieldbyname('valor_ipi').asfloat;
frmnotafiscal_menu.qrnota.FieldByName('VALOR_PRODUTOS').asfloat := vtotal;
frmnotafiscal_menu.qrnota.FieldByName('DESCONTO').asfloat := vdesconto;
frmnotafiscal_menu.qrnota.FieldByName('TOTAL_NOTA').asfloat := vtotal-vdesconto;
//frmnotafiscal_menu.qrnota.Post;
ProgressBar1.Position := 0;
close;
end
else
begin
Application.messagebox('Cupom Não Encontrado!','Atenção!',mb_ok+MB_ICONEXCLAMATION);
ecupom.Text := '';
ecupom.SetFocus;
end;

end;
end;

ME AJUDEM AGUARDO...
Responder

Post mais votado

28/03/2013

Além da linha onde ocorre o erro, qual é o SQL da query frmnotafiscal.qrnotafiscal_item?
Responder

Mais Posts

28/03/2013

Rafael Cunha

Cara quando você debugando ele da o erro em que linha.
Responder

28/03/2013

Bruno Leandro

Esse erro deve ocorrer ao dar post, me corrija se eu estiver engando. e como o Joel disse sobre o sql da query frmnotafiscal.qrnotafiscal_item acredito que seja essa query que esteja gerando o erro existe inner, left ou outro tipo de amarração nesta tabela ? caso tenha voce precisa inserir ao mesmo tempo em varias tabela, talvez a melhor solução seja um procedure.
Responder

30/03/2013

Rodrigo Bernal


no SQL dasta query tenho somente um select
select * from itens
Responder

30/03/2013

Joel Rodrigues

Certo, mas o erro dá em que linha?
Responder

30/03/2013

William

Colega seria melhor vc debugar e verificar em qual linha está sendo disparado esse erro, pois o código que vc postou possui várias linhas e fica difícil encontrar um erro somente lendo seu código sem conhecer as amarrações existentes.

Não leve a mau, mas poderíamos supor x possibilidades de erros dentro dessa rotina!!!
Responder

31/03/2013

Rodrigo Bernal

Pessoal Debuguei o sistema e ele me deu o erro aqui nesta linha:( frmnotafiscal.qrnotafiscal_item.Insert;) isso acontece quando ele passa para o proximo iten do cupom que esta sendo chamado, consigo ate ver no memo o item 1 e 2 do cupom.
coloquei um frmnotafiscal.qrnotafiscal_item.edit; antes e nada o erro continua, ele manda para unit do zeos:

procedure RaiseSQLException(E: Exception);
begin
if E is EZSQLException then
begin
raise EZSQLException.CreateClone(EZSQLException(E)); esta marcando aqui esta linha do Zeos
end
else
begin
raise EZSQLException.Create(E.Message);
end;
end;
Responder

31/03/2013

William

Colega após analisar seu código tenho que reforçar as perguntas que o Joel e o Bruno postaram!

Existe outra instrução SQL que envolva (INNER, LEFT ou RIGHT JOIN) inserida diretamente na propriedade SQL do componente?

Pois esse tipo de exception geralmente é disparada quando uma mesma query possui várias tabelas envolvidas na consulta e posteriormente vc inseri registros visando apenas 1 das tabelas.

Sei que é cansativo bater na mesma tecla, mas a mensagem aponta para esse caminho.
Responder

08/11/2014

Michel Santos

Caso não tenha resolvido vou ser bem claro, nossos colegas estão analisando de forma correta, porem voce não esta entendendo.

O Componete ZEO que esta no form (frmnotafiscal.qrnotafiscal_item), click em cima dele e veja na aba do delphi OBJECT INSPECTOR em EVENTS.
O Unico campo que deve estar preenchido é o CONNECTION, o resto é só você comentar para testar.
Responder

08/11/2014

Michel Santos

Humm Outra coisa, o Componete ZEO que esta no form (frmnotafiscal.qrnotafiscal_item), click em cima dele e veja na aba do delphi OBJECT INSPECTOR em SQL do componente deixa como select * from nome da tabela

PS.: COMENTAR, AS LINHAS, Pois se apagar pode ter problemas com outras funções.


OBS.: Depois disso se não funcionar mesmo te garanto que se duplicar o componente e colocar outro nome funciona, mais lembre se limpa os dados do componente !!!!! (Ideia de Português)
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira