Ir para conteúdo

Arquivado

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

Thiago Mazzini

porque meu simpledataset grava em cima do meu registro anterior?

Recommended Posts

boa tarde,

tenho um fomulario de "montar lanches" uso 3 tabelas nele: ITEM, ITEM_LANCHE, LANCHE e conecto no banco com os componentes sqlconnection, datasource e simpledataset, a tabela ITEM_LANCHE tem 3 campos , o ID(q eu faço uma gambiarra pra dar um auto incremento), ID_LANCHE(q eu busco da tabela lanche) e ID_ITEM(que eu busco da tabela item), o problema é que quando vou gravar o segundo registro de um mesmo ID_ITEM ele grava o ID_LANCHE por cima do anterior e faz um novo registro ... alguem tem ideia do que estou fazendo de errado?


procedure Tfitem.btnadicionarClick(Sender: TObject);
var
id:integer;

begin
id:= SQLQuery_item_lanche.FieldByName('MAX_ID').AsInteger;
DataModule1.sdsitem_lanche.insert;
DataModule1.sdsitem_lanche.FieldByName('ID').AsInteger := id;
DataModule1.sdsitem_lanche.FieldByName('ID_LANCHE').AsInteger := DataModule1.sdslanches.FieldByName('ID').AsInteger;
DataModule1.sdsitem_lanche.FieldByName('ID_ITEM').AsInteger := (Strtoint(DBEdit1.Text));

DataModule1.sdsitem_lanche.ApplyUpdates(-1); // aqui que esta gravando errado

 

 

SimpleDataSet1.Active:=false;

SimpleDataSet1.DataSet.CommandText:='select distinct lanche.nome as Lanche from item_lanche, lanche, item where item_lanche.id_lanche = lanche.id and item_lanche.id_item = ' + (QuotedStr(DBEdit1.Text));
SimpleDataSet1.Active:=true;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que o erro seja aqui neste ponto:

 

 

id:= SQLQuery_item_lanche.FieldByName('MAX_ID').AsInteger;

 

Qual o valor que retorna aqui? O maior id ou o maior id+1? O problema não é one comita a operação, mas onde pega o id provavelmente... já debugou o código para ver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você debugou o valor retornado pelo DataModule1.sdslanches.FieldByName('ID').AsInteger; que usa para atribuir o valor ao id_lanche se está correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

debuguei, esta correto, sempre busca o maior id do cadastro +1 o negocio como eu disse é q é no id_lanche q grava o id do lanche atual e substitui o anterior pelo mesmo do atual, tipo parece q em vez de dar o insert ele edita o anterior antes


vou tentar pelo sqlquery em vez de usar o simpledataset

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.