Há um mês que estou com esta dúvida

Delphi

13/02/2003

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.


Anonymous

Anonymous

Curtidas 0

Respostas

Jonny_x

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);


GOSTEI 0
Anonymous

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!!!!!!


GOSTEI 0
Anonymous

Anonymous

13/02/2003

pelo amor de deus


GOSTEI 0
Anonymous

Anonymous

13/02/2003

alguem me ajude pelo amor de deus


GOSTEI 0
Ildefonso

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)


GOSTEI 0
Anonymous

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.


GOSTEI 0
Anonymous

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.


GOSTEI 0
POSTAR