Pequenas duvidas referentes ao desenvolvimento de um sistema
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
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
Curtidas 0
Respostas
Luineumann
02/12/2003
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;
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;
GOSTEI 0
Rafael Heise
02/12/2003
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
SQL:
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!
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!
GOSTEI 0
Cinh0
02/12/2003
Manow, eu acho melhor você utilizar esse campo como auto-incremento, só assim vc despreocupa e tudo funciona sem problema.
GOSTEI 0
Wagsilvasilva
02/12/2003
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.
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.
GOSTEI 0