Cannot update a complex query with more then one table

27/03/2013

10

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar