Fórum Pequenas duvidas referentes ao desenvolvimento de um sistema #198328

02/12/2003

0

Já sou um assiduo frequentador desta pagina, mas é a primeira vez que peço ajuda. Nunca respondi nada pq ainda tenho poucos conhecimentos sobre programacao.

Bom, se alguem quiser me ajudar vou contar a estorinha...
Estou tentando fazer um cadastro simples de funcionario em delphi 6 utilizando paradox e bde. Estou utilizando dbedit´s para inserir os dados.
quando vou inserir um novo funcionario, tenho que digitar o código. O problema está que quando digito um código já existente e mando salvar o sistema dá um erro de keyviolation. Já tentei fazer uma consulta utilizando o locate mas não consegui fazer funcionar. Se alguem poder me ajudar, agradeço

Um abraço

Wagner

Gravatai/RS
icq 95434868


Wagsilvasilva

Wagsilvasilva

Responder

Posts

02/12/2003

Luineumann

coloque o seguinte comando no evento onposterror da sua tabela

Procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;var Action: TDataAction);
Var
ErroMens :String;
begin
ErroMens := E.Message;
if ErroMens = ´Key violation.´
then begin
ShowMessage(´Código já existe!´);
action := daAbort;
end;
end;


Responder

Gostei + 0

02/12/2003

Rafael Heise

Você tem como sua chave o campo CAMPO.
Então, quando você for salvar, faça o seguinte:

Se você não estiver filtrando a tabela, você pode usar o locate. Caso esteja filtrando, você deve usar uma outra Table sem filtro.
O melhor mesmo seria usar SQL talvez.
Então ai vão as alteranativas:

Table sem filter:
Isso você coloca no botão salvar, bem no começo
  if Table.Locate(´CAMPO´,DBEdit1.Text,[]) then
  begin
    ShowMessage(´Chave Duplicada´);
  end
  else
  begin
    { ... } // Seu código
  end;


SQL:
  Query.Close;
  Query.SQL.Clear;
  Query.SQL.Add(´SELECT CAMPO FROM TABELA WHERE CAMPO = ´ + DBedit1.Text);
  Query.Open;
  if not Query.IsEmpty then
  begin
    ShowMessage(´Registro Duplicado´)
  end
  else
  begin
    {...} //Seu código
  end;


Agora se você está filtrando a table, então você deve ter uma outra table para efetuar o locate.

beleza?
eu sou meio contra fazer no PostError pois você não está tratando o erro e sim caso de algum erro então faça isso. O tratar erro que digo é fazer código para que evite que o banco ou o próprio programa dê um erro. (try except).
é isso ae, espero ter sido claro...
valeu!


Responder

Gostei + 0

02/12/2003

Cinh0

Manow, eu acho melhor você utilizar esse campo como auto-incremento, só assim vc despreocupa e tudo funciona sem problema.


Responder

Gostei + 0

03/12/2003

Wagsilvasilva

Quero agradecer a todos as dicas. Vou tentar implementa-las e dou retorno a todos pra dizer se funcionou. Vou deixar aqui uma mostra de como eu estava tentando fazer a consulta do registro se existia ou nao.
If udmdados.tbdadosfunc.Locate(´Codfunc´,dbedit1.Text,[])
then...

O Zerneo falou algo referente ao filtro utilizado na tabela. Eu utilizo filtros em outra tela (tabsheet) para exibição dos dados na Dbgrid. Deve ser isso então que está ocasionando o erro.


Responder

Gostei + 0

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

Aceitar