2013-03-15 18 views
2

我用下面的代碼到非autocommin連接上張貼一些記錄:提交關於MYSQL +的Zeos LIB

ZConnection1.AutoCommit := False; 

    try 
    ZTable1.Insert; 
    ZTable1.FieldByName('name').AsString := 'John Doe'; 
    ZTable1.Post; 
    ZConnection1.Commit; 
    except 
    ZConnection1.Rollback; 
    end; 

當我運行這段代碼沒有被保存在我的數據庫。

後,我嘗試下面的代碼...

ZConnection1.AutoCommit := False; 

    with ZQuery1 do begin 
     SQL.Text := 'INSERT INTO mytable (name) values ("John Doe")'; 
     ExecSQL; 
     SQL.Text := SQL.Text + 'COMMIT' ; 
     try 
     ExecSQL; 
     except 
     SQL.Text := 'ROLLBACK'; 
     ExecSQL; 
     end; 
    end; 

......所有的工作完美。

我在第一種情況下做錯了什麼?我使用Delphi6,MySql,Zeos庫和InnoDB表。

+0

你有沒有實際激活/給你打電話顯示的代碼之前打開表? – 2013-03-15 09:44:42

+0

是的,全部都打開了。我相信,在無效表Delphi的情況下,它報告爲錯誤。我沒有收到任何錯誤消息。 – gogoloi 2013-03-15 09:52:29

+0

是的,但你有嘗試插入,並沒有提及確切的錯誤信息... – 2013-03-15 11:02:55

回答

6

有固定我的問題:

這是怎麼AutoCommit財產實際的Zeos工作:

  • AutoCommit爲真,那麼交易將自動執行的每個SQL語句之後COMMITED,但你可以使用StartTransaction命令明確地阻止這種自動提交,直到您明確地調用Commit
  • AutoCommit是假的,你不應該打電話StartTransaction。然後事務自動啓動,但不會在每個執行語句後自動提交。

ZConnection1.AutoCommit := True; 
ZConnection1.StartTransaction; 
try 
    ZTable1.Insert; 
    ZTable1.FieldByName('name').AsString := 'John Doe'; 
    ZTable1.Post; 
    ZConnection1.Commit; 
except 
    ZConnection1.Rollback; 
end;