• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 225
  • Last Modified:

Another User Changed Data

I am writing a Delphi 1.0 application.  I am getting the following error when I try to save changes to a record:  "Cannot perform edit because another user has changed the data."  No one else is using the application.  Anyone have any ideas on what is causing the error and how to stop it.
0
oasys
Asked:
oasys
  • 8
  • 7
1 Solution
 
ronit051397Commented:
Is another application using the same table?
0
 
oasysAuthor Commented:
No, no other applications are using the table.  We are developing the database also, so we are using test data.  You get the error under several circumstances.  It seems give this error after all required fields are saved and then you try to add data to fields that are not required and save again. On one form, we have a state field that is required.  If you delete the state and save the form, you do not get the error.  If you add the state back and try to save it, you will get the error.  Any ideas?

 
0
 
ronit051397Commented:
After you edit a record do you call post?
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
oasysAuthor Commented:
I do call post after the edit.  I have went so far as to call post and commit.  I get the same error.
0
 
ronit051397Commented:
What database are you using? Try to call refresh before rediting.
0
 
oasysAuthor Commented:
I am using an Oracle database.
0
 
ronit051397Commented:
Oracle 8.0?
Are you using cached updates?
0
 
oasysAuthor Commented:
We are using Oracle 7.3.3.0.0 and Oracle 7.3.2.3.0

We are not using cached updates.
0
 
ronit051397Commented:
OK, After you call post, call Refresh and tell me if you still get the error.
0
 
oasysAuthor Commented:
My boss says he has already tried the refresh after post and he still got the error.
0
 
ronit051397Commented:
Did you try to close and reopen the table immidiatly after posting?
0
 
oasysAuthor Commented:
We have not tried closing and reopening the table.  If we do that we will have to do a search to bring up the record that we have just edited.  The application is large and database will have so many records that the search will cause the performance of the application to suffer.  
0
 
ronit051397Commented:
Yes, I know, just for the test. Also before you reedited the record you verified that the table was in browse state?
0
 
oasysAuthor Commented:
If you close the table and open it back up, you do not get the error.  Delphi doesn't seem to release the record after the save. So if you try to edit right after the save, it tells you it cannot perform the edit.
0
 
ronit051397Commented:
The only solution I think of is Enabling cached updates just before editing and posting, then disabling it again immidiatly after commiting data.
Example:

with Table1 do
try
  CachedUpdates:=True;
  Edit;
  do somthing...
  Post;
  CommitChanges([Table1]);
Finally
  CachedUpdates:=False;
end;  


function CommitChanges(FTable: Array of TTable): Boolean;
var I: Byte;
begin//committing table's changes to the database
  FTable[0].Database.StartTransaction;
  try
    for I:=Low(FTable) to high(FTable) do
      if FTable[I].CachedUpdates then
        FTable[I].ApplyUpdates; {try to write the updates to the database};
    FTable[0].Database.Commit; {on success, commit the changes};
  except
    FTable[0].Database.Rollback; {on failure, undo the changes};
    raise;//raise the exception to prevent a call to CommitUpdates!
  end;
  for I:=Low(FTable) to high(FTable) do
    if FTable[I].CachedUpdates then
      FTable[I].CommitUpdates; {on success, clear the cache}
  Result:=True;
end;


0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 8
  • 7
Tackle projects and never again get stuck behind a technical roadblock.
Join Now