Ir ao conteúdo
  • Cadastre-se

Delphi


Hesodia

Posts recomendados

Eu tenho um formulário ai tem o botão de Alterar os dados. Quando eu clico em alterar ele abre outro form pra colocar os dados dai quando eu clico pra alterar ele muda tudo beleza só que quando eu tento fazer qualquer outra coisa o projeto trava e da erro de Key Violation.

Eu fiz o banco no Access e tem 4 campos. Nome, Matricula, Gaveta e Situacao. Todos são preenchidos e fica dando esse erro de Key Violation.

No Onclick no botão eu coloquei : DM.Table1.Edit1;

Usei os componentes de conexão no DataModule.

Quero saber o que eu to errrando pra ficar dando esse error fela da..

Valeu galera.

Link para o comentário
Compartilhar em outros sites

Como você está fazendo para gravar as alterações? E que componentes tá usando?

As informações ficam salvas no DBGride.No on click do botão BitBtn do formulário principal:


FrmAlterar.Show;

Dai vai para o próximo formulário onde tem os DBEdits para informa o Nome, Matrícula, Gaveta e Situação. Após informar clico no botão Alterar.

No on click do botão:


procedure TFrmAlterar.BtAlterarClick(Sender: TObject);
Var
Count : String;
Begin
If Trim (DBNome.Text) = '' Then
Begin
Count := 'Informe o nome do aluno.';
end;

If Trim (DBMatricula.Text) = '' Then
Begin
If Count <> '' Then
Begin
Count := Count + #13 + 'Informe o número de matrícula.';
end
Else
Begin
Count := 'Informe o número de matrícula.';
end;
end;

If Trim (DBGaveta.Text) = '' Then
Begin
If Count <> '' Then
Begin
Count := Count + #13 + 'Informe o número da gaveta.';
end
Else
Begin
Count := 'Informe o número da gaveta.';
end;
end;

If Trim (DBSituacao.Text) = '' Then
Begin
If Count <> '' Then
Begin
Count := Count + #13 + 'Informe a situação do aluno.';
end
Else
Begin
Count := 'Informe a situação do aluno';
end;
end;
If Count = '' Then
Begin
Showmessage('Alteração concluída.');
Dm.Table1.Edit;
DBNome.Clear;
DBMatricula.Clear;
DBGaveta.Clear;
DBSituacao.Clear;
FrmAlterar.Close;
end
Else
Begin
Showmessage(Count);
end;
end;

Dai salva as informações no na linha do DBGride só que quando clico em qualquer coisa da Key Violation. Pra acessar o banco usei um DM e dentro do DM tem um DataBase1, Table1 e um DataSource1. Deixei o DataBase1 em disconnect. E to conectando pelo evento On Create do Form Principal.


procedure TFrmAluno.FormCreate(Sender: TObject);
begin
Dm.Database1.Connected := True;
Dm.Table1.Active := True;
end;

E no OnDestroy

Dm.Table1.Active := False;
Dm.Database1.Connected := False;

É isso.

Link para o comentário
Compartilhar em outros sites

Violação de chave primária ou estrangeira

Esta tabela possui ligação com alguma outra? Possui chave primária essa tabela? Pois se possuir o que pode estar causando é que quando salva ele salva o mesmo valor para a chave primária ou deixa ela como nulo, o que não é permitido por tratar de chave primária (não nulo e único)

Link para o comentário
Compartilhar em outros sites

bom... se você está fazendo exatamente do jeito q está a cima e pelo que você informou, talvez o problema seja este...

altere este trecho:

No on click do botão BitBtn do formulário principal:

deste


FrmAlterar.Show;

para este


FrmAlterar.Show;
Dm.Table1.Edit;

Isso apenas para ele já ficar em edição

e neste outro trecho no botão Alterar

mude esta parte

desta


If Count = '' Then
Begin
Showmessage('Alteração concluída.');
Dm.Table1.Edit;
DBNome.Clear;
DBMatricula.Clear;
DBGaveta.Clear;
DBSituacao.Clear;
FrmAlterar.Close;
end
Else
Begin
Showmessage(Count);
end;
end;

para este


If Count = '' Then
Begin
Showmessage('Alteração concluída.');
Dm.Table1.Post;
frmAlterar.close;
end Else
Begin
Showmessage(Count);
end;
end;

Fiz isso porque... você não precisa limpar os dbedit porque ele sempre vai tá com os valores da tabela q você vinculou... Troquei o Dm.Table1.Edit por Post porque você tava colocando ele em edição novamente e não salvando. Caso continue o problema poste ae com mais detalhes... como os componentes que você está usando :)

Espero ter ajuda

Agraços

Link para o comentário
Compartilhar em outros sites

;3816740']bom... se você está fazendo exatamente do jeito q está a cima e pelo que você informou' date=' talvez o problema seja este...

altere este trecho:

No on click do botão BitBtn do formulário principal:

deste


FrmAlterar.Show;

para este


FrmAlterar.Show;
Dm.Table1.Edit;

Isso apenas para ele já ficar em edição

e neste outro trecho no botão Alterar

mude esta parte

desta


If Count = '' Then
Begin
Showmessage('Alteração concluída.');
Dm.Table1.Edit;
DBNome.Clear;
DBMatricula.Clear;
DBGaveta.Clear;
DBSituacao.Clear;
FrmAlterar.Close;
end
Else
Begin
Showmessage(Count);
end;
end;

para este


If Count = '' Then
Begin
Showmessage('Alteração concluída.');
Dm.Table1.Post;
frmAlterar.close;
end Else
Begin
Showmessage(Count);
end;
end;

Fiz isso porque... você não precisa limpar os dbedit porque ele sempre vai tá com os valores da tabela q você vinculou... Troquei o Dm.Table1.Edit por Post porque você tava colocando ele em edição novamente e não salvando. Caso continue o problema poste ae com mais detalhes... como os componentes que você está usando :)

Espero ter ajuda

Agraços[/quote']

Fiz as alterações que você citou e agora ta alterando e funcionando normalmente. Valeu

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...