Jump to content
Sign in to follow this  
MrSpock1

multi-user "see each other data" problem

Recommended Posts

Delphi, SQlite and dbExpress
I open two copies of the app. I have one SQLConnection and two SQLQuery.
SQLQuery1.SQL:=insert into topics(da,topic) values(1,'1')
SQLQuery2.SQL:=insert into topics(da,topic) values(2,'2')

there is a suspicious
var
  Form1: TForm1; in the interface part, which I do not know how to remove

In form.oncreate
SQLConnection1.Connected:=true

The first copy runs the first code


Code:
 

procedure TForm1.Button2Click(Sender: TObject);
var
   tr: TTransactionDesc;
   finished: boolean;
begin
  try
    SQLQuery2.SQLConnection:=SQLConnection1;
    SQLConnection1.StartTransaction(tr);
    SQLQuery2.ExecSQL;
    sleep(4000);
    SQLConnection1.Commit(tr);
    finished:= true;
    SQLQuery2.SQLConnection:=nil
  except
    SQLConnection1.Rollback(tr);
    finished:= false;
  end;
  if finished
  then
    showmessage('OK')
  else
    ShowMessage('NOT OK');
end;


and the second copy runs the second code

Code:
 

procedure TForm1.Button3Click(Sender: TObject);
var
  tr: TTransactionDesc;
  finished: boolean;
begin
  repeat
    try
      SQLQuery3.SQLConnection:=SQLConnection1;
      SQLConnection1.StartTransaction(tr);
      SQLQuery3.ExecSQL;
      SQLConnection1.Commit(tr);
      finished:= true;
      SQLQuery3.SQLConnection:=nil;
      memo1.Lines.Add('OK')
    except
      sleep(400);
      SQLConnection1.Rollback(tr);
      finished:= false;
      memo1.Lines.Add('NOT OK')
    end;
  until finished;
  memo1.Lines.Add('END')
end;

When I run the codes one after another I get all right two records inserted into the database, but when I start the second code  before the first transaction finishes, I get both OK messages but there appears only one record inserted in the database. The second transaction waits normally until the first finishes.

Share this post


Link to post

So far I have identified one problem: ExecSQL raises exception, so it does not come to commit when transactions overlap

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×