Fórum Edição de registros #337160

02/02/2007

0

Garela to com um probleminha....
é o seguinte...

tenho uma tabela q faço a gravação de meus dados, faço a Edição normal só q eu não to conseguindo fazer a gravação somete do q eu alterei,

EX:
Edito.
Antonio Costa
quero alterar p/
Antonio Costa filho
ou seja quero add o ´filho´ ou nome Antonio costa
ele não ta alterando só ´filho´, ele simplismente pega Antonio Costa filho e add novamente na tabela como se foce um novo registro.

Como resolvo esse problema?

De já agradeço.


Jarabeucp

Jarabeucp

Responder

Posts

02/02/2007

Macario

Olá.


Como está o código para alteração/salvar o registro.


[]´s 8)


Responder

Gostei + 0

02/02/2007

Jarabeucp

procedure TF_Parentesco.SBGravarClick(Sender: TObject);
begin //Ativa a tabela
DM_Agep.TParen.Active := True;
//cola em modo se inserssão
Dm_Agep.TParen.Insert;
//grava o registros
Dm_Agep.TParen.Append;
Dm_Agep.TParen.FieldByName(´DESCRICAO´).AsString:= EDescricao.Text;
DM_Agep.TParen.Post;
//Pega o valor gerado no campo código e me mostra no Edit
ECodigo.Text:= Dm_Agep.TParenCODIGO.AsString;
//Ativa os botões
SbNovo.Enabled := True;
SbEditar.Enabled := True;
SbCancelar.Enabled := False;
SbExcluir.Enabled := True;
SbGravar.Enabled := False;
//Dezativa a Tabela e dezabilita os campos
Dm_Agep.TParen.Active := False;
ECodigo.Enabled := False;
EDescricao.Enabled := False;
end;

Garoto ai ta o Código de gravar os registro, não ta o d Edição pq tentei de varia maneira e não conseguir por isso apaguei, e vim recorrer au forum.


Responder

Gostei + 0

02/02/2007

Macario

Olá.

No seu código a redundância de ação o que está lhe causando erro na operação de Alteração :

//cola em modo se inserssão 
Dm_Agep.TParen.Insert; 

//grava o registros 
Dm_Agep.TParen.Append; 


Insert e Append têm por final o mesmo objetivo um novo registro na sua tabela.

Use sempre Append, pois assim seu novo registro será posicionado como ´último´. O local deste comando por exemplo seria no botão incluir.

Como o botão de Alterar deve conter:

Dm_Agep.TParen.Edit;

Qualquer duvida estamos por aqui.


[]´s


Responder

Gostei + 0

02/02/2007

Jarabeucp

amigo entendi, vi q realmente tinha uma redundancia, Apend e Insert, ok.
Mais quanto a auteração como rezolvo?

olha só o exemplo q vc vai entender o q ta acontecendo.

registro ja gravado, Edito o registro.
ANTONIO COSTA
quero alterar p/
ANTONIO COSTA FILHO
ou seja quero add o ´FILHO´ ou nome ANTONIO COSTA
ele não ta alterando só ´FILHO´, ele simplismente pega ANTONIO COSTA FILHO e add novamente na tabela como se foce um novo registro.

Como resolvo esse problema?

De já agradeço.


Responder

Gostei + 0

02/02/2007

Rjun

Você precisa localizar o registro pelo código e utilizar o método EDIT para fazer a [b:92f2a808c1]ALTERAÇÃO[/b:92f2a808c1] e [b:92f2a808c1]RESOLVER[/b:92f2a808c1] seu problema.

Algo parecido com isso:

if Tabela.Locate(´Campo´, ValorChave, []) then
begin
  Tabela.Edit;
  Tabela.FieldByName(´Campo´).Value := ´sdfjsakfasdf´;
  Tabela.Post;
end;


Seria algo parecido com isso.


Responder

Gostei + 0

02/02/2007

Jarabeucp

Você precisa localizar o registro pelo código e utilizar o método EDIT para fazer a [b:d9376891e4]ALTERAÇÃO[/b:d9376891e4] e [b:d9376891e4]RESOLVER[/b:d9376891e4] seu problema. Algo parecido com isso:
if Tabela.Locate(´Campo´, ValorChave, []) then
begin
  Tabela.Edit;
  Tabela.FieldByName(´Campo´).Value := ´sdfjsakfasdf´;
  Tabela.Post;
end;
Seria algo parecido com isso.


Amigo Rjun essa rotina ja foi feita eu uso no ECodigoKeyPress do meu capo fincando assim

if key = 13 then
begin
key := 0;
//Verifica se tem o Codigo
if Dm_Agep.TParen.Locate(´Codigo´,ECodigo.Text,[])then
begin
Dm_Agep.TParen.Edit;
EDescricao.Text := Dm_agep.TParen.FieldByName(´Descricao´).AsString;
ECodigo.Enabled := False
end
else
ShowMessage(´Resgitro não Cadastrado´)
end;

Essa rotina de alteração eu quero colocar em um Button, o que preciso e alterar o registro cadastrado e gravar somente a alteração e não fazer com que ele me add um novo gegistro, olhe meu exemplo acima q vc vai entender o que eu preciso fazer.


Responder

Gostei + 0

02/02/2007

Macario

Olá.

Se voce retirou os comandos Insert e Append do botão gravar, sua rotina de alteração ira funcionar corretamente, ou seja, não ira mais incluir um registro em branco e nenhum novo registro.

[]´s


Responder

Gostei + 0

02/02/2007

Rjun

Coloque o trecho que postei no evento OnClick do Button.


Responder

Gostei + 0

02/02/2007

Jarabeucp

Amigo ai ta todo o código do meu form, vc vai ferificar q realmente eu retirei os camando q vc falou, mais olha só, eu edito e quando vou gravar, ele ta fazendo o seguinte, ele exclui o q eu editei e a alteração q foi feita ele grava somo se foce um novo registro.

o q pode ta acontecendo?

procedure TF_Parentesco.SBNovoClick(Sender: TObject);
begin //Linpa o form
ECodigo.Text := ´´;
EDescricao.Text := ´´;
//Ativa a tabela
DM_Agep.TParen.Active := True;
Dm_Agep.TParen.Append;
//Abilita os botões
SbNovo.Enabled := False;
SbEditar.Enabled := False;
SbCancelar.Enabled := True;
SbExcluir.Enabled := False;
SbGravar.Enabled := True;
ECodigo.Enabled := True;
EDescricao.Enabled := True;
EDescricao.SetFocus;
end;

procedure TF_Parentesco.SBGravarClick(Sender: TObject);
begin //grava o registros
Dm_Agep.TParen.FieldByName(´DESCRICAO´).AsString:= EDescricao.Text;
DM_Agep.TParen.Post;
//Pega o valor gerado no campo código e me mostra no Edit
ECodigo.Text:= Dm_Agep.TParenCODIGO.AsString;
//Ativa os botões
SbNovo.Enabled := True;
SbEditar.Enabled := True;
SbCancelar.Enabled := False;
SbExcluir.Enabled := True;
SbGravar.Enabled := False;
//Dezativa a Tabela e dezabilita os campos
Dm_Agep.TParen.Active := False;
ECodigo.Enabled := False;
EDescricao.Enabled := False;
end;

procedure TF_Parentesco.SBEditarClick(Sender: TObject);
begin//ativa campos do form
ECodigo.Enabled := True;
EDescricao.Enabled := True;
//Linpa os campos do form
ECodigo.Text := ´´;
EDescricao.Text := ´´;
//Ativa a tabela
Dm_agep.TParen.Active := true;
//Edita a tabela e ativa os botões
DM_Agep.TParen.Edit;
SbNovo.Enabled := False;
SbCancelar.Enabled := True;
SbExcluir.Enabled := False;
SbGravar.Enabled := True;
SbEditar.Enabled := False;
ECodigo.SetFocus;
end;
procedure TF_Parentesco.SBCancelarClick(Sender: TObject);
begin //Cancela a inserção de registros e ativa os botões
DM_Agep.TParen.Cancel;
//dezativa campos do form
ECodigo.Text := ´´;
EDescricao.Text := ´´;
ECodigo.Enabled := False;
EDescricao.Enabled := False;
//ativa os botões
SbNovo.Enabled := True;
SbExcluir.Enabled := True;
SbGravar.Enabled := False;
SbEditar.Enabled := True;
SbCancelar.Enabled := false;
//Dezativa a tabela
Dm_Agep.TParen.Active := False;
end;

procedure TF_Parentesco.SBExcluirClick(Sender: TObject);
begin //exclui resgistros e pede confirmação da exclusão
If MessageDlg(´Deletar Registro?´,MtConfirmation, [MbYes, MbNo],0) = mrYes then
DM_Agep.TParen.Delete;
end;
procedure TF_Parentesco.FormShow(Sender: TObject);
begin
ECodigo.Text := ´´;
EDescricao.Text := ´´;
ECodigo.Enabled := false;
EDescricao.Enabled := False;

end;

procedure TF_Parentesco.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if Dm_Agep.TDepen.Active = False then
close
else
Dm_Agep.TParen.Active := False;
Close;
end;

procedure TF_Parentesco.SBSairClick(Sender: TObject);
begin
Close;
end;

procedure TF_Parentesco.ECodigoKeyPress(Sender: TObject; var Key: Char);
begin //Usando tecla Enter
if key = #13 then
begin
key := 0;
//Verifica se tem o Codigo
if Dm_Agep.TParen.Locate(´Codigo´,ECodigo.Text,[])then
begin
Dm_Agep.TParen.Edit;
EDescricao.Text := Dm_agep.TParen.FieldByName(´Descricao´).AsString;
ECodigo.Enabled := False
end
else
ShowMessage(´Resgitro não Cadastrado´)
end;
end;
end.


Responder

Gostei + 0

02/02/2007

Macario

Olá, jarabeucp.

Novamente há redundância de código, desta vez com [b:2286b91db0]DM_Agep.TParen.Edit[/b:2286b91db0] , pois você tem ele no evento [b:2286b91db0]procedure TF_Parentesco.SBEditarClick[/b:2286b91db0] e no [b:2286b91db0]procedure TF_Parentesco.ECodigoKeyPress[/b:2286b91db0].

Veja o melhor lugar que deve ser alterado para eliminar a redundância.


[]´s


Responder

Gostei + 0

02/02/2007

Jarabeucp

Olá, jarabeucp. Novamente há redundância de código, desta vez com [b:8098215818]DM_Agep.TParen.Edit[/b:8098215818] , pois você tem ele no evento [b:8098215818]procedure TF_Parentesco.SBEditarClick[/b:8098215818] e no [b:8098215818]procedure TF_Parentesco.ECodigoKeyPress[/b:8098215818]. Veja o melhor lugar que deve ser alterado para eliminar a redundância. []´s


Amigo ja tirei a redundancia, direi o TF_Parentesco.SBEditarClick continuou a mesma coisa,ai resolvi tirar do TF_Parentesco.ECodigoKeyPress, ele não grava me da uma menssagen de erro disendo o seguint. NOT IN EDIT MOD.

COMO RESOLVO ISSO?


Responder

Gostei + 0

02/02/2007

Macario

Olá.


Você deve apenas retirar de um local. :roll:


Responder

Gostei + 0

02/02/2007

Jarabeucp

Olá. Você deve apenas retirar de um local. :roll:


Amigo, fois isso mesmo que eu fiz, comentei no evento onKeyPress, e deixei somente em buttun editi,

Soque quando vou gravar ele me da a menssagen de erro q te falei assima.


Responder

Gostei + 0

02/02/2007

Rjun

Essa sua maneira de codificar é bem curiosa. Antes de gravar você deve verificar se o registro já existe. Você está usando o locate, então se o Locate retornar TRUE você coloca a tabela em modo de edição, caso contrário coloque a tabela em modo de inserção ou de um append. Depois você atribui os valores pros fields da tabela e no final de um post.


Responder

Gostei + 0

02/02/2007

Macario

Olá.
Neste caso você terá que efetuar um debugger na sua aplicaçao para identificar o ponto onde ocorre esta inconsistencia, pois pelo codigo postado por voce, ja identificamos o ponto e [b:61ef4097d9]eu[/b:61ef4097d9] e o [b:61ef4097d9]Rjun[/b:61ef4097d9] ja sugerimos as correções.

No mais, qualquer duvida poste novamente. 8)


Responder

Gostei + 0

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

Aceitar