Delphi
14/12/2003
0
Tenho uma validação q foi feita para um campo que não deve ser auto incremento, porém essa validação não está sendo correta. alguém poderia me ajudar? Uso o paradox.
Não consigo corrigir o erro, da primeira vez ele roda corretamente, da segunda vez em diante não.
Esse é o código do btn inserir
procedure Tfrmfuncionario.btninserirfClick(Sender: TObject);
begin
if (mskdrt.Text=´´) and (txtnomef.Text=´´) then
begin
Application.MessageBox(´Favor Preencher corretamnete os campos´,´Erro de Dados´,mb_ok+mb_Iconerror);
mskdrt.SetFocus;
end;
{********************************************************************************************
Início de Validação de Funcionário evitando key violation
********************************************************************************************}
dmcarrefour.tbfunc.First;
while not dm.tbfunc.eof do
begin
if mskdrt.Text=dm.tbfunc[´Cod_Funcionario´] then
begin
application.MessageBox(´Usuário já Cadastrado!!´,´Erro de Dados´,mb_ok+mb_iconerror);
mskdrt.text:=´´;
txtnomef.text:=´´;
mskdrt.setfocus;
end;
dm.tbfunc.Next;
end;
{******************************************************************************************
Fim da Validação dos Funcionários
*******************************************************************************************}
if mskdrt.text<>dm.tbfunc[´Cod_Funcionario´] then
begin
dm.tbfunc.Open;
dm.tbfunc.Append;
dm.tbfunc[´Cod_Funcionario´]:=mskdrt.Text;
dm.tbfunc[´Nome_Funcionario´]:=txtnomef.Text;
application.MessageBox(´Usuário Cadastrado com Sucesso!!!´,´Confirmação´,mb_ok+MB_ICONINFORMATION);
mskdrt.Text:=´´;
txtnomef.Text:=´´;
mskdrt.SetFocus;
end;
end;
Agradeço pela ajuda
Roberto 8)
Neo_cobain22
Posts
14/12/2003
Wagsilvasilva
1º
Quando clico no botao incluir:
If not tbdadosfunc.locate (´Codfunc´,dbedit1.text,[]) then begin
tbdadosfunc.append;
...
else showmessage(´Registro duplicado´);
Porém eu este método acima não esta funcionando, mas pela informação que tive a minha ttable nao pode estar filtrada.
Outra maneira é colocar no evento onposterror da tabela o seguinte código
procedure TUdmdados.tbdadosfuncPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
Var
ErroMens :String;
begin
ErroMens := E.Message;
if ErroMens = ´Key violation.´
then begin
edatabaseerror.Create(´Codigo já existe´);// showmessage (´Código já existe!´);
action := daAbort;
end;
end;
Não sei pq o método showmessage no codigo acima não funciona. Quando mando compilar o projeto ele diz ´undeclared identifier´, e já olhei a clausa uses e messages está la...
Espero ter ajudado um pouco
14/12/2003
Fórum Vini
dmcarrefour.tbfunc.First;
você usou dmCarrefour, e nas outras linhas, você usou somente dm; assim, quando você executa a primeira vez, o cursor já está no início, então não ocorre erro, na segunda vez, o cursor está no fim, e como você posicionou o cursor da tabela dmcarrefour.tbFunc e não da dm.tbFunc, a dm.tbFunc vai continuar no fim...
Você apenas tem que trocar dmcarrefour por dm!
dm.tbfunc.First;
Espero que você tenha entendido, :?:
Vinicius
14/12/2003
Fórum Vini
try dm.tbfunc.Open; dm.tbfunc.Append; dm.tbfunc[´Cod_Funcionario´]:=mskdrt.Text; dm.tbfunc[´Nome_Funcionario´]:=txtnomef.Text; except Application.MessageBox(´O código já existe!´, ´Violação de registro´, MB_ICONERROR); dm.tbFunc.Cancel; end;
Quando estiverem rodando o programa pelo Delphi, as duas exceções aparecerão, mas quando o programa for rodado sozinho, fora do Delphi, aparecerá somente a sua mensagem.
Espero ter ajudado.
Vinicius.
Clique aqui para fazer login e interagir na Comunidade :)