Há um mês que estou com esta dúvida
Por favor como faço para tratar este erro:
Couldn´t perform the edit because another user changed the record
Estou usando Delphi 5 e Mysql e a tabela sempre é aberta e colocada em modo EDIT.
Couldn´t perform the edit because another user changed the record
Estou usando Delphi 5 e Mysql e a tabela sempre é aberta e colocada em modo EDIT.
Anonymous
Curtidas 0
Respostas
Jonny_x
13/02/2003
procedure TForm1.FormCreate(Sender: TObject);
begin
if table1.State = (dsEdit) then
begin
table1.close;
end;
end;
end.
isso são os tipos qu a tabela pode estar
type TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc, dsOpening);
begin
if table1.State = (dsEdit) then
begin
table1.close;
end;
end;
end.
isso são os tipos qu a tabela pode estar
type TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc, dsOpening);
GOSTEI 0
Anonymous
13/02/2003
Cara eu tentei algo parecido e não deu certo, mas mesmo assim muito obrigado. Vou usar esta rotina agora. Se vc precisar de algo, pode mandar para hacson@bol.com.br.
Valeu mano!!!!!!
Valeu mano!!!!!!
GOSTEI 0
Anonymous
13/02/2003
pelo amor de deus
GOSTEI 0
Anonymous
13/02/2003
alguem me ajude pelo amor de deus
GOSTEI 0
Ildefonso
13/02/2003
Olá, Hacson.
Não sei se há algo de especial no MySQL, principalmente usando IBX (se for o caso), mas quando uso o ADO, este erro aparece algumas vezes, principalmente quando:[list=1:e37a4ab0a7][*:e37a4ab0a7]Acrescento um registro e o salvo ou edito um registro e o salvo... um novo Edit ou Append não funciona;
[*:e37a4ab0a7]Envio uma SQL que altera os dados de uma das tabelas da consulta;[/list:o:e37a4ab0a7]
Nestes casos, verifico se .State é algo como dsEdit ou dsInsert... Em um desses, simplesmente envio um .Cancel e em seguida um .Refresh . Em seguida o DataSet já está pronto para nova edição.
Se der certo, coloque uma resposta aqui para sabermos que está é uma solução que funciona em outros casos, também.
Bom trabalho. 8)
Não sei se há algo de especial no MySQL, principalmente usando IBX (se for o caso), mas quando uso o ADO, este erro aparece algumas vezes, principalmente quando:[list=1:e37a4ab0a7][*:e37a4ab0a7]Acrescento um registro e o salvo ou edito um registro e o salvo... um novo Edit ou Append não funciona;
[*:e37a4ab0a7]Envio uma SQL que altera os dados de uma das tabelas da consulta;[/list:o:e37a4ab0a7]
Nestes casos, verifico se .State é algo como dsEdit ou dsInsert... Em um desses, simplesmente envio um .Cancel e em seguida um .Refresh . Em seguida o DataSet já está pronto para nova edição.
Se der certo, coloque uma resposta aqui para sabermos que está é uma solução que funciona em outros casos, também.
Bom trabalho. 8)
GOSTEI 0
Anonymous
13/02/2003
Ainda não deu resultado. Olha a sequência de gravação que eu utilizo:
1º Verifico o estado da tabela:
if (TItem.State = dsInactive) then
TItem.Open;
2º Coloco em modo de edição:
if (TItem.State <> dsEdit) then
TItem.Edit;
3º Efetuo a gravação e fecho a tabela:
if TItem.State = dsEdit then
TItem.Post;
TItem.Close;
4º No evento onclose, abro e dou um refresh:
TItem.Filtered := False;
TItem.Open;
TItem.Refresh;
Só o que consegui foi atrasar o erro. Agora o usuário pode passar pelo form duas vezes.
Existe alguma outra solução?
Valeu pelas dicas.
1º Verifico o estado da tabela:
if (TItem.State = dsInactive) then
TItem.Open;
2º Coloco em modo de edição:
if (TItem.State <> dsEdit) then
TItem.Edit;
3º Efetuo a gravação e fecho a tabela:
if TItem.State = dsEdit then
TItem.Post;
TItem.Close;
4º No evento onclose, abro e dou um refresh:
TItem.Filtered := False;
TItem.Open;
TItem.Refresh;
Só o que consegui foi atrasar o erro. Agora o usuário pode passar pelo form duas vezes.
Existe alguma outra solução?
Valeu pelas dicas.
GOSTEI 0
Anonymous
13/02/2003
Hacson Alexandre
1º Verifico o estado da tabela:
if (TItem.State = dsInactive) then
TItem.Open;
2º Coloco em modo de edição:
if (TItem.State <> dsEdit) then
TItem.Edit;
3º Efetuo a gravação e fecho a tabela:
if TItem.State = dsEdit then
TItem.Post;
3.1º Coloque um
TItem.ApplyUpdate(0);
TItem.Refresh;
TItem.Close;
O que pode tambem estar acontecendo é a versão do Delphi que você estiver utilizando. Eu consegui efetuar as atualizações, utilizando o TSimpleDataSet do Delphi 6.
1º Verifico o estado da tabela:
if (TItem.State = dsInactive) then
TItem.Open;
2º Coloco em modo de edição:
if (TItem.State <> dsEdit) then
TItem.Edit;
3º Efetuo a gravação e fecho a tabela:
if TItem.State = dsEdit then
TItem.Post;
3.1º Coloque um
TItem.ApplyUpdate(0);
TItem.Refresh;
TItem.Close;
O que pode tambem estar acontecendo é a versão do Delphi que você estiver utilizando. Eu consegui efetuar as atualizações, utilizando o TSimpleDataSet do Delphi 6.
GOSTEI 0