2014-01-21 65 views
1

即時通訊編寫一個數據庫程序,我有一個DBGrid和Navagator連接到一個DataSource女巫掛鉤到一個ClientDataSet。這保存到一個XML文件。當我使用導航器刪除記錄時,它將從DBGrid中刪除(也是當我重新啓動應用程序時),但它仍在XML文件中。我想保持清潔,那麼是否有辦法通過使用我現在使用的組件來從XML文件中刪除記錄?刪除ClientDatSet中的記錄將不會刪除它在我的XML文件

procedure TForm1.serverExecute(AContext: TIdContext); 
var 
sLoginName, sPassword: string; 
LoginExist: Boolean; 
NewLogin: TStringList; 
begin 
    if AContext.Connection.Socket.ReadLn = 'NewAccount' then 
    lbLog.Items.Add('New account request form: ' + aContext.Connection.Socket.Binding.PeerIP); 
    sLoginName := aContext.Connection.Socket.ReadLn; 
    sPassword := aContext.Connection.Socket.ReadLn; 
    lbLog.Items.Add('With Login Name: ' + sLoginName); 

    LoginExist := False; 
    ClientDataSet1.DisableControls; 
    try 
     ClientDataSet1.First; 
     while not ClientDataSet1.Eof do 
     begin 
     if ClientDataSet1.Fields[0].Value = sLoginName then 
     begin 
      LoginExist := True; 
      Break; 
     end; 
     ClientDataSet1.Next; 
     end; 
    finally 
     ClientDataSet1.EnableControls; 
    end; 
    if LoginExist = false then 
    begin 
    NewLogin := TStringList.Create; 
    NewLogin.Add(sLoginName); 
    NewLogin.Add(sPassword); 
    lbLog.Items.Add('Name accepted'); 
    lbLog.Items.Add('---------------'); 
    ClientDataSet1.InsertRecord([NewLogin[0], NewLogin[1]]); 
    FreeAndNil(NewLogin); 
    lbLog.Items.Add(''); 
    end 
    else 
    lbLog.Items.Add('Login name allready exists'); 
    lbLog.Items.Add('---------------'); 
+0

請參閱['MergeChangeLog'](http://docwiki.embarcadero.com/RADStudio/XE3/en/Merging_Changes_into_Data)。 –

+0

yeas Ive禁用更改日誌 – Eszee

回答

3

TClientDataset組件不會自動將其記錄保存到外部文件。每次您要將文件與內存記錄進行同步時,您必須調用TClientDataset.SaveToFile方法。

如果您想保留兩個文件和記錄(在TClientDataset s's vernacle,it's命名爲Data)完美同步所有的時間,加上處理程序來AfterDeleteAfterPost事件,並通過調用保存的數據集內容這樣的方法。

同樣在你的代碼中,我可以看到你運行一個循環來查找某個登錄的記錄。有一種名爲Locate的方法,我認爲在這種情況下很有用,所以我的建議是重構你的代碼來使用它。

我建議您花些時間閱讀組件的幫助,這是一個更好地學習如何使用它的好方法。

UPDATE:

關於TClientDataset.FileName,財產,幫助說:

「的更改將不會合併到當它被保存到文件中的數據這允許使用的應用程序「公文包」模型可以設置FileName而不會丟失發往數據庫服務器的更新,單層應用程序應該在關閉數據集並將數據保存到磁盤之前顯式合併更改。

我想這解釋了爲什麼刪除的記錄仍然存在於保存的文件中。

+0

我已設置clientdataset的filename屬性。東西正被保存到該文件中。我要去看看你的其他人建議謝謝 – Eszee

+0

awsome。不要使用CD的文件名屬性,並切換到savetofile。非常感謝 – Eszee