最近我遇到了一個奇怪的問題,請參見代碼剪如下:爲什麼使用異步模式執行qry.post?
var
sqlCommand: string;
connection: TADOConnection;
qry: TADOQuery;
begin
connection := TADOConnection.Create(nil);
try
connection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test.MDB;Persist Security Info=False';
connection.Open();
qry := TADOQuery.Create(nil);
try
qry.Connection := connection;
qry.SQL.Text := 'Select * from aaa';
qry.Open;
qry.Append;
qry.FieldByName('TestField1').AsString := 'test';
qry.Post;
beep;
finally
qry.Free;
end;
finally
connection.Free;
end;
end;
首先,創建一個新的Access數據庫名爲TEST.MDB並把它這個測試項目的目錄下,我們可以創建一個新表在其中僅命名爲aaa,其中只有一個名爲TestField1的文本類型字段。
我們在「beep」行設置一個斷點,然後在IDE調試模式下午餐測試應用程序,當ide停在斷點行(qry.post已經執行)時,此時我們使用microsoft access打開TEST.MDB和開放的表AAA,你會發現沒有表AAA任何變化,如果你讓IDE繼續按F9鍵,你可以找到一個新的記錄插入到表AAA後運行,但如果您按下CTRL + F2鍵終止在斷點處的應用程序,你會發現表AAA已經插入沒有記錄,但在正常情況下,一個新的記錄應在表AAA插入qry.post執行之後。誰能解釋這個問題,這讓我困擾了很長時間。謝謝 !!!
BTW,該IDE是德爾福2010年,是由Microsoft Access 2007年在Windows下創建的訪問mdb文件7
我預計qry.post執行後,一個新的記錄插入,因爲qry.post似乎synchronouse執行,但根據測試,它是異步執行的錯誤,把在「嘟嘟」和「qry.free」行線兩條breakponts,我發現當應用程序暫停在「嘟嘟」(已執行qry.post)新記錄未插入的行,但是當應用程序暫停在「qry.free」的行,記錄是在(qry。免費未執行),爲什麼qry.post不同步執行.... – Ryan 2010-06-13 03:15:32
是否可能是您檢查過快或不刷新MS Access中的表/查詢?我剛剛將你的代碼逐字複製(剛編輯連接)到新鮮的vcl表單應用程序上的按鈕的onclick處理程序上,並在嘟嘟聲上放置了一個斷點。啓動應用程序,點擊按鈕,當它碰到斷點時,移動到MS Access,新創建的表有兩個初始記錄的表仍然打開。只需按下刷新鍵(F5),即可從delphi應用程序新插入的記錄(仍然以嗶聲暫停)顯示出來。使用Access 2007與'Microsoft.ACE.OLEDB.12.0'提供程序。 – 2010-06-13 14:56:01
有沒有足夠的字符空間來填充我的消息,看下一個答案 – Ryan 2010-06-16 07:54:30