TClientDataSet新插入的记录找不到(100分)

  • 主题发起人 主题发起人 yubo
  • 开始时间 开始时间
Y

yubo

Unregistered / Unconfirmed
GUEST, unregistred user!

TClientDataSet插入一条记录,保存提交,关闭窗体,在此打开
窗体找不到新插入的记录。关闭程序后,再次打开该窗体,可以
找到。但记录确实已更新到后台关闭打开TClientDataset 和
TTable 控件无效。
请关注一下‘企业逻辑和商业规则怎样作在应用服务器’
环境:Oracle 8.1.5 + Delphi5
 
我没使用过Oracle,但我觉得是你在from.onshow事件中没有将TClientDataSet刷新。
试一下在onshow事件中将TClientDataSet刷新一下看看
 
我是关闭后台的Table和前台的TClientDataSet,应该不用刷新了吧!
 
Bug.没有解决办法.
 

use apply update
 
应该是clientdataset把数据从服务器下载下来了!你应该把缓冲设置一下!
 
可能你的提交只是用了commit
要立即写如远程数据库服务器,的确要如wjs所说,use apply update
 
刷新缓冲区->Update
 
To: wjs
我是使用TClientDataSet.ApplyUpdates(0);
更新数据,数据确实已更新到后台,关闭程序就可得到正确结果。
再次打开同一窗体新增的记录找不到。
to: 浪陵纪
麻烦你,具体缓冲怎么设置可以吗?
to: rolland
书上说:TClientDataSet会自己启用事务,所以我未使用事务也就
没用commit
to: Yjwself
能具体说一下哪一个控件的Update吗?
 
是BDE的bug.database从新设一下。
 
DataSetProvider.Applyupdate时确实启动了一个事务
你采用TClientDataSet.ApplyUpdates(0)更新并未引起例外一定更新成功了
如果要刷新采用
ClientDataSet.Active := False;
ClientDataSet.Active := True;
是正确的而稳当,但效率不高
你最好把原码贴出
 
to: playboo
DataBase 应该怎么设呢?
to: kevinhe
我试过
ClientDataSet.Active := False;
ClientDataSet.Active := True;
不行,我的原码在单位,晚上我把它带回来.
 
不太清楚你讲得是什么?
我怎么没碰到过这个问题。你用得是ClientDataSet.Delta还是ClientDataSet.Data用了前者
提交后就没有了。用后者应该没问题。至少我写了这么多程序还没遇见过.

 
我这两天上不了网,抱歉!
To zdzjf:
我用 TClientDataSet.ApplyUpdates(0)提交更新,
不知你说的ClientDataSet.Delta和ClientDataSet.Data
怎莫用
 
这两个属性一个是用来放数据集的另一个是放修改后的数据的。
客户作了修改后,改动过的数据就放在DLETA里面。更新后里面的
值自动合并,就变成一个空记录集了。
 
请尽快结束问题。
 
我在<<Delphi 5 数据库编程实战与精通>>一书中看到:
“TClientdataset 组件是基于文件的单层数据库应用结构,没有用到BDE,
因此不支持多用户。”(请华大学出版社).
如果该书没有错误,是否上面的讨论.....
 
var
o, o1: OleVariant;
n: Integer;

begin
o := Null;
o1 := Null;
with ClientDataSetdo
begin
ApplyUpdates(0);
Data := DComConnection.GetServer.AS_GetRecords(ProviderName, -1, n,
grMetaData+grReset,'',o,o1);
// 参数说明: ProviderName是你服务器端的DataSetProvider.Name,
// -1: 取所有记录
// n: 返回记录数
// grMetaData+grReset: 传输参数
// '': SQL语句
// o: SQL参数
// o1: 自定义参数
end;
end;
用上述语句就可以做到ClientDataSet不需要Close/Open就能实现刷新了.
 
CLIENTDATASET用于多用于三层系统。
你这样说看不清,但问题应该很简单,给我源码,问题马上搞定。
注,如果真的更新到库中,要刷新,再select something from table.
dbgrid.refresh;
就可以啦。注,传数据要全用动态的,不要设置死啦。
 
有可能丢失了索引!
 
后退
顶部