Comparação de chaves de uma tabela utilizando count
Saudações, gostaria de fazer com que o sistema verificasse as chaves(código - integer) de uma table antes de fazer a atualização dos dados. Só que acho que estou errando no count. Alguém pode ajudar? Vai aí o código sem o count, ele funciona apenas para o primeiro produto, posso adicionar várias vezes o mesmo produto mas quando insiro um produto diferente ele não faz a comparação e acusa Key violation.
procedure Tfrmcompesc.btconfirmarClick(Sender: TObject);
begin
fim;
if application.messagebox(´Confirma a Atualização?´,´Confirme´, mb_yesno) = idyes then
begin
try
if strtoint(dbcod.text) <> tbgiroCod_prod.asinteger then
begin
with tbesc do
begin
post;
refresh;
end;
with tbgiro do
begin
insert;
tbgiroCod_prod.asinteger := strtoint(dbcod.text);
tbgiroNome.asstring := dbnome.text;
tbgiroModelo.asstring := dbmodel.text;
tbgiroQt_ent.asinteger := strtoint(dbqtde.text);
tbgiroQt_sai.asinteger := 0;
tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger;
tbgiro.post;
tbgiro.refresh;
end
end
else
if strtoint(dbcod.text) = tbgiroCod_prod.asinteger then
begin
with tbesc do
begin
post;
refresh;
end;
with tbgiro do
begin
edit;
tbgiroQt_ent.asinteger := tbgiroQt_ent.asinteger + strtoint(dbqtde.text);
tbgiroQt_sai.asinteger := tbgiroQt_sai.asinteger;
tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger - tbgiroQt_sai.asinteger;
post;
refresh;
end;
end;
end;
except begin
MessageDlg (´Não foi possível registrar esta compra´, mtInformation,[mbOk],0);
exit;
end;
end;
end;
end;
procedure Tfrmcompesc.btconfirmarClick(Sender: TObject);
begin
fim;
if application.messagebox(´Confirma a Atualização?´,´Confirme´, mb_yesno) = idyes then
begin
try
if strtoint(dbcod.text) <> tbgiroCod_prod.asinteger then
begin
with tbesc do
begin
post;
refresh;
end;
with tbgiro do
begin
insert;
tbgiroCod_prod.asinteger := strtoint(dbcod.text);
tbgiroNome.asstring := dbnome.text;
tbgiroModelo.asstring := dbmodel.text;
tbgiroQt_ent.asinteger := strtoint(dbqtde.text);
tbgiroQt_sai.asinteger := 0;
tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger;
tbgiro.post;
tbgiro.refresh;
end
end
else
if strtoint(dbcod.text) = tbgiroCod_prod.asinteger then
begin
with tbesc do
begin
post;
refresh;
end;
with tbgiro do
begin
edit;
tbgiroQt_ent.asinteger := tbgiroQt_ent.asinteger + strtoint(dbqtde.text);
tbgiroQt_sai.asinteger := tbgiroQt_sai.asinteger;
tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger - tbgiroQt_sai.asinteger;
post;
refresh;
end;
end;
end;
except begin
MessageDlg (´Não foi possível registrar esta compra´, mtInformation,[mbOk],0);
exit;
end;
end;
end;
end;
Elias Jr
Curtidas 0
Respostas
Brnz
04/11/2003
Naum consegui ler o código direito... naum tah sobrando end nesse negocio naum???
BRNz...
BRNz...
GOSTEI 0
Elias Jr
04/11/2003
Naum consegui ler o código direito... naum tah sobrando end nesse negocio naum???
BRNz...
Olá amigo, olha com o código dessa forma ele consegue executar o programa mas apenas para o primeiro produto cadastrado(tipo, caneta). A partir daí eu posso cadastrar mais canetas que ele vai funcionar e me dar a quantidade comprada sem problema. Mas ao inserir um outro produto ele acusa keyviolation. O que eu quero é o seguinte: verificar se o código do produto cadastrado é igual a algum código existente na tabela. Se for, ele cadastra e soma o total do produto mais a quantidade comprada recentemente. Se não ele cadastra o novo produto e o total desse produto recebe a quantidade comprada. Só que eu estou errando pra utilizar tipo um count pra ele verificar a tabela chave por chave.
GOSTEI 0
Brnz
04/11/2003
Olha... pode se q compila ... maiz tem algo errado... dah uma olhada...
Viu?!?
BRNz...
procedure Tfrmcompesc.btconfirmarClick(Sender: TObject);
begin
| fim;
| if application.messagebox(´Confirma a Atualização?´,´Confirme´, mb_yesno) = idyes then
| begin
| | try
| | if strtoint(dbcod.text) <> tbgiroCod_prod.asinteger then
| | begin
| | | with tbesc do
| | | begin
| | | | post;
| | | | refresh;
| | | end;
| | | with tbgiro do
| | | begin
| | | | insert;
| | | | tbgiroCod_prod.asinteger := strtoint(dbcod.text);
| | | | tbgiroNome.asstring := dbnome.text;
| | | | tbgiroModelo.asstring := dbmodel.text;
| | | | tbgiroQt_ent.asinteger := strtoint(dbqtde.text);
| | | | tbgiroQt_sai.asinteger := 0;
| | | | tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger;
| | | | tbgiro.post;
| | | | tbgiro.refresh;
| | | end { <== Sem Ponto-e-Virgula??? }
| | end
| | else
| | if strtoint(dbcod.text) = tbgiroCod_prod.asinteger then
| | begin
| | | with tbesc do
| | | begin
| | | | post;
| | | | refresh;
| | | end;
| | | with tbgiro do
| | | begin
| | | | edit;
| | | | tbgiroQt_ent.asinteger := tbgiroQt_ent.asinteger + strtoint(dbqtde.text);
| | | | tbgiroQt_sai.asinteger := tbgiroQt_sai.asinteger;
| | | | tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger - tbgiroQt_sai.asinteger;
| | | | post;
| | | | refresh;
| | | end;
| | end;
| |
| | ?????
| | |
| | end;
| | except
| | begin
| | | MessageDlg (´Não foi possível registrar esta compra´, mtInformation,[mbOk],0);
| | | exit;
| | end;
| end;
end;
????
|
end;Viu?!?
BRNz...
GOSTEI 0
Elias Jr
04/11/2003
Valeu amigo, verifiquei o código e corrigi essas pequenas falhas. Muito obrigado pela ajuda. Mas ainda falta o que eu realmente preciso: fazer com que o sistema verifique o código de cada produto existente na tabela. Como faço isso?
GOSTEI 0
Elias Jr
04/11/2003
Valeu amigo, verifiquei o código e corrigi essas pequenas falhas. Muito obrigado pela ajuda. Mas ainda falta o que eu realmente preciso: fazer com que o sistema verifique o código de cada produto existente na tabela. Como faço isso modificando alguma coisa nesse código? Tipo, um componentcount ou um recordcount...
GOSTEI 0
Brnz
04/11/2003
Creio q o q queres eh isso... ele vai passar registro a registro analizando se o texto do DBEdit eh <> do codigo do registro ... nesse caso... inclui...
se for igual... altera...
Agora... ele vai fazer isso alterando ou inserindo para cada registro da tabela...
ou seja... se a tabela tiver 50 registros sendo q nenhum eh igual ao código informado, serão inseridos 50 registros com o novo código... e... eeeeeeeh... vai dar KeyViolation...
baum... dexa eu refazer o código... pq o principio do que vc quer eh diferente... tenq fazer a consulta... e depois incluir... jah mando... peraue!
BRNz...
se for igual... altera...
procedure Tfrmcompesc.btconfirmarClick(Sender: TObject); var i:integer; begin fim; if application.messagebox(´Confirma a Atualização?´,´Confirme´, mb_yesno) = idyes then begin try begin tbgiro.first; for i:=0 to tbgiro.recordcount do begin if strtoint(dbcod.text) <> tbgiroCod_prod.asinteger then begin with tbesc do begin post; refresh; end; with tbgiro do begin insert; tbgiroCod_prod.asinteger := strtoint(dbcod.text); tbgiroNome.asstring := dbnome.text; tbgiroModelo.asstring := dbmodel.text; tbgiroQt_ent.asinteger := strtoint(dbqtde.text); tbgiroQt_sai.asinteger := 0; tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger; tbgiro.post; tbgiro.refresh; end; end else if strtoint(dbcod.text) = tbgiroCod_prod.asinteger then begin with tbesc do begin post; refresh; end; with tbgiro do begin edit; tbgiroQt_ent.asinteger := tbgiroQt_ent.asinteger + strtoint(dbqtde.text); tbgiroQt_sai.asinteger := tbgiroQt_sai.asinteger; tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger - tbgiroQt_sai.asinteger; post; refresh; end; end; tbgiro.next; end; except begin MessageDlg (´Não foi possível registrar esta compra´, mtInformation,[mbOk],0); exit; end; end; end;
Agora... ele vai fazer isso alterando ou inserindo para cada registro da tabela...
ou seja... se a tabela tiver 50 registros sendo q nenhum eh igual ao código informado, serão inseridos 50 registros com o novo código... e... eeeeeeeh... vai dar KeyViolation...
baum... dexa eu refazer o código... pq o principio do que vc quer eh diferente... tenq fazer a consulta... e depois incluir... jah mando... peraue!
BRNz...
GOSTEI 0
Brnz
04/11/2003
Auuuuuuuuuueeeeee...
Tentaie.... achu q funfa...
BRNz...
procedure Tfrmcompesc.btconfirmarClick(Sender: TObject);
begin
fim;
if application.messagebox(´Confirma a Atualização?´,´Confirme´, mb_yesno) = idyes then
begin
try
begin
tbgiro.indexname:=´´;
if tbgiro.findkey([strtoint(dbcod.text)]) then {Verifica se o dado contido em dbcod.text existe em qualquer registro da tabela no campo da Chave Primária}
begin
with tbesc do
begin
post;
refresh;
end;
with tbgiro do
begin
insert;
tbgiroCod_prod.asinteger := strtoint(dbcod.text);
tbgiroNome.asstring := dbnome.text;
tbgiroModelo.asstring := dbmodel.text;
tbgiroQt_ent.asinteger := strtoint(dbqtde.text);
tbgiroQt_sai.asinteger := 0;
tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger;
tbgiro.post;
tbgiro.refresh;
end;
end
else
begin
with tbesc do
begin
post;
refresh;
end;
with tbgiro do
begin
edit;
tbgiroQt_ent.asinteger := tbgiroQt_ent.asinteger + strtoint(dbqtde.text);
tbgiroQt_sai.asinteger := tbgiroQt_sai.asinteger;
tbgiroQt_tot.asinteger := tbgiroQt_ent.asinteger - tbgiroQt_sai.asinteger;
post;
refresh;
end;
end;
end;
except
begin
MessageDlg (´Não foi possível registrar esta compra´, mtInformation,[mbOk],0);
exit;
end;
end;
end;Tentaie.... achu q funfa...
BRNz...
GOSTEI 0
Elias Jr
04/11/2003
Saudações amigo,
testei o seu código mas infelizmente ele está acusando keyviolation novamente...é isso mesmo que eu quero...que ele verifique na tabela, se não existir ele faz o procedimento de cima, caso exista ele fará o outro procedimento. Como será que resolvo isso? Já tentei utilizar o RecordCount mas não deu. Acho que errei em algo...
testei o seu código mas infelizmente ele está acusando keyviolation novamente...é isso mesmo que eu quero...que ele verifique na tabela, se não existir ele faz o procedimento de cima, caso exista ele fará o outro procedimento. Como será que resolvo isso? Já tentei utilizar o RecordCount mas não deu. Acho que errei em algo...
GOSTEI 0
Brnz
04/11/2003
Discuuuulpa... eu fiz ao contrario...
tipo... poe um not no if do findkey.... ou seja...
heuheu...
BRNz...
tipo... poe um not no if do findkey.... ou seja...
...
begin
try
begin
tbgiro.indexname:=´´;
{-->} if NOT tbgiro.findkey([strtoint(dbcod.text)]) then
begin
.......heuheu...
BRNz...
GOSTEI 0
Elias Jr
04/11/2003
Aew amigo! Agora sim! Exatamente o que eu queria...muito obrigado mesmo(vc nem imagina o galho que quebrou). Valeu mesmo...
GOSTEI 0