gpt4 book ai didi

delphi - 在ClientDatSet中删除记录不会在我的XML文件中删除它

转载 作者:行者123 更新时间:2023-12-03 19:31:03 24 4
gpt4 key购买 nike

我正在编写一个数据库程序,其中我将一个DBGrid和Navagator连接到一个DataSource上,然后连接到一个ClientDataSet上。这将保存到XML文件。当我使用导航器删除一条记录时,它已从DBGrid中删除(也当我重新启动应用程序时),但是它仍在XML文件中。我想保持事情整洁,有没有办法仅使用我现在拥有的组件从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('---------------');

最佳答案

TClientDataset组件不会自动将其记录保存到外部文件。每次要将文件与内存记录同步时,都必须调用TClientDataset.SaveToFile方法。

如果要始终保持文件和记录(在TClientDataset的地方,它称为Data)完全同步,请向AfterDeleteAfterPost事件添加处理程序并保存通过调用这种方法获取数据集内容。

同样在您的代码中,我可以看到您运行了一个循环以查找特定登录名的记录。在这种情况下,我认为有一个名为Locate的方法很有用,因此我的建议是重构您的代码以使用它。

我建议您花一些时间阅读该组件的帮助,这是更好地学习如何使用它的一种很好的方法。

更新:

关于TClientDataset.FileName属性,帮助显示:

“将更改保存到文件时,更改不会合并到数据中。这允许使用“公文包”模型的应用程序设置FileName而不丢失发往数据库服务器的更新。单层应用程序应在合并之前明确合并更改关闭数据集并将数据保存到磁盘。”

我想这解释了为什么删除的记录仍然存在于保存的文件中。

关于delphi - 在ClientDatSet中删除记录不会在我的XML文件中删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21253356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com