Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
another multi-user "see each other data" problem
#1
So i have created a desktop test app, before moving to intraweb, with SQlite and dbExpress and opened 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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)