Fórum Comparação de chaves de uma tabela utilizando count #192755

04/11/2003

0

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;


Elias Jr

Elias Jr

Responder

Posts

04/11/2003

Brnz

Naum consegui ler o código direito... naum tah sobrando end nesse negocio naum???

BRNz...


Responder

Gostei + 0

04/11/2003

Elias Jr

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.


Responder

Gostei + 0

04/11/2003

Brnz

Olha... pode se q compila ... maiz tem algo errado... dah uma olhada...

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...


Responder

Gostei + 0

04/11/2003

Elias Jr

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?


Responder

Gostei + 0

04/11/2003

Elias Jr

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...


Responder

Gostei + 0

05/11/2003

Brnz

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...

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...


Responder

Gostei + 0

05/11/2003

Brnz

Auuuuuuuuuueeeeee...


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...


Responder

Gostei + 0

05/11/2003

Elias Jr

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...


Responder

Gostei + 0

05/11/2003

Brnz

Discuuuulpa... eu fiz ao contrario...

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...


Responder

Gostei + 0

05/11/2003

Elias Jr

Aew amigo! Agora sim! Exatamente o que eu queria...muito obrigado mesmo(vc nem imagina o galho que quebrou). Valeu mesmo...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar