<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">Hi All,</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">Sorry that I don't know if SQLDB belongs to fpc or lazarus, so I posted to both lists.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">I am confused about the use of transaction in SQLDB. I tried to use in in my non-gui app. Here is the code:</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><div class="gmail_default">function TPortfolio.ConfirmTransaction(id: Integer): Boolean;</div><div class="gmail_default">begin</div><div class="gmail_default">  with qr do begin</div><div class="gmail_default">    SQL.Text := Format('UPDATE records SET status=%d WHERE id=%d AND status=%d',</div><div class="gmail_default">      [TR_SUCCESS, id, TR_PENDING]);</div><div class="gmail_default">    ExecSQL;</div><div class="gmail_default">    WriteLn('Confirming: ', id, ', affected: ', RowsAffected);</div><div class="gmail_default">    //tr.Commit;</div><div class="gmail_default">    //WriteLn('Confirming: ', id, ', affected: ', RowsAffected);</div><div class="gmail_default">    Result := RowsAffected > 0;</div><div class="gmail_default">  end;</div><div class="gmail_default">end;</div><div class="gmail_default"></div><div class="gmail_default">It seems that I must assign a TSQLTransaction object to the TSQLQuery object, otherwise it doesn't work. I also found that without call tr.Commit, the ExecSQL will not take effect, at least for INSERT statements.  <br></div><div class="gmail_default"><br></div><div class="gmail_default">In the above function, I found the first WriteLn will output rows-affected as 1, and the 2nd (after tr.Commit) will output rows-affected as -1!  I then commented out the tr.Commit; statement, it STILL worked.</div><div class="gmail_default"><br></div><div class="gmail_default">Now my questions are:</div><div class="gmail_default"><br></div><div class="gmail_default">1. How to control the use of transactions in SQLDB? Sometime I do NOT want transaction, but want the DDL/DML statement to be executed immediately.  Why sometime SQLDB's ExecSQL won't take effect if not followed by a Commit? BTW, I tried to set tr.Active to true/false before execute the sql, but it seems not making a difference?</div><div class="gmail_default"><br></div><div class="gmail_default">2. What is the meaning of -1 as returned by RowsAffected?</div><div class="gmail_default"><br></div><div class="gmail_default">Thanks!</div><div class="gmail_default"><br></div><div class="gmail_default">Xiangrong</div></div></div>