我對Delphi數據庫組件有問題。我試圖給程序添加一些功能,但遇到了奇怪的問題。我把它分解成一個簡單的示例項目,行爲仍然存在。Delphi數據庫組件的奇怪行爲
我在Delphi 2007上創建了一個新的Forms應用程序,添加了TSQLConnection,TSQLTable,TDataSetProvider和TClientDataSet。我插入用於本地MS SQL數據庫中的信息,這是內部的表,這是一個簡單的測試表:
CREATE TABLE dbo.Test1(
[Name] varchar(32) not null primary key,
[Type] varchar(16) not null,
[Selected] BIT not null)
我然後加入一個TEDIT,和的TListBox 2個按鈕。該功能應該是:按Add(添加),名稱爲Edit1的記錄被輸入到數據庫中。按更新並且列表視圖被填充數據庫中已有的條目。
代碼:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
ClientDataSet1.Refresh;
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
ListBox1.AddItem(ClientDataSet1Name.AsString,nil);
ClientDataSet1.Next;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.Append;
ClientDataSet1Name.AsString := Edit1.Text;
ClientDataSet1Type.AsString := 'A1';
ClientDataSet1Selected.AsBoolean := false;
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);
end;
現在我奇怪的是,啓動該程序時,加2條(管理工作室,他們是真的有檢查),現在我點擊更新後,列表保持爲空,因爲一旦執行Button1Click的開始刷新,ClientDataSet的RecordCount就爲0。然而,條目是並且保留在數據庫中。
另一個奇怪的是,只要我退出程序,並再次啓動並嘗試添加另一條記錄,我收到錯誤「無法創建新的連接,因爲在手動或分佈式事務模式下」。只要我從表中刪除記錄並重新啓動程序,我可以再次添加。
有人可以告訴我這種奇怪的行爲是如何發生的,我該如何解決它?
在此先感謝。
好吧,我發現的第一個問題做搜索結果的LOF如果我在ClientDataSet1.Refresh之前調用SQLTable1.Refresh,則不會發生,但我認爲這是DataSet應該自己做的事情 – Marks
對於刷新,SQLTable1是否在程序啓動時關閉?如果基本數據集是打開它不會再打開它 – jachguate
不,SQLTable1已打開,我檢查了它,並且如果它是clo sed我無法執行刷新,因爲如果表已關閉,則會發生錯誤。 – Marks