在三层系统中用户修改了数据但没有post.或者按了edit,insert,append,delete等用clientdataset的delta判断但出错该如何解

  • 主题发起人 主题发起人 boshao
  • 开始时间 开始时间
B

boshao

Unregistered / Unconfirmed
GUEST, unregistred user!
在三层系统中用户修改了数据但没有post.或者按了edit,insert,append,delete等用clientdataset的delta判断但出错该如何解? (100分)<br />在三层系统中用户修改了数据但没有post.或者按了.edit,insert,append,delete等
却没有输入任何内容.如果用户修改了数据但没有post但是退出时能够有提示有数据没
有存盘.按了edit,insert,append,delete等却没有输入任何内容就不提示.想到是用
clientdataset的delta属性.但用clientdataset1.delta<>null,
varisempty(clientdataset1.delta), varisnull(clientdataset1.delta)
都出现了 EDBclient错误。delta is empty.
 
ClientDataset1.ChangeCount>0
 
不行呀,如果修改了数据但没有按post.changcount还是0呀!
 
还没搞清你要做什么?还有一个Modified你试了没
 
楼上的兄弟能详细点吗?
 
急!!!!!!!!!!!!!!
 
DateSet.State in [dsEdit, ....]
 
楼上的兄弟不行呀!例如我按了append但没有输入任何内容.如果用上诉方法
都会提示数据没有存盘.
 
if (ClientDataSet1.State in [dsEdit, dsInsert]) or (ClientDataSet1.ChangeCount > 0) then
begin
Application.MessageBox(......
end;
 
没错就是要用
try
varisempty(clientdataset1.delta);
clientdataset.AppkyUpdate(0);
except
//delta数据为空Close;
end;
如果出现异常的话表示没有信息要更新到数据库
可以直接退出系统
 
先Post修改内容
if ClientDataSet1.State in [dsEdit, dsInsert] then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount > 0 then
begin
//提交数据
end;
 
varisempty(clientdataset1.delta),
varisnull(clientdataset1.delta)
借个光问一下:
这两个函数的作用是什么。什么时候要用到这两个函数阿,
他们有什么区别呀|!
 
我个人的理解:
varIsEmpty()表示该variant变量有存在但是值为空,有点像 string1=''的意思,
而varIsNull()判别variant变量不存在有,有点像Pointer=nil的意思.
因为variant变量可以表示一个变量,也可以表示一个指向地址的指针,
所以就有这两个函数来判别.
 
我的意思是:
1、在三层系统中用户修改了数据但没有post.退出时能够有提示有数据没有存盘
2、按了edit,insert,append,delete等却没有输入任何内容.退出时就不提示.
用以下方法:
if (varisempty(clientdataset1.delta) or varisnull(clientdataset1.delta)) then
不处理;
else
处理;
try
varisempty(clientdataset1.delta);如果delta为空在这一句就会出现下面的错误。
clientdataset.AppkyUpdate(0);
except
//delta数据为空Close;
end;

或者:
出现了 EDBclient错误。delta is empty.
用这种方法时:
先Post修改内容
if ClientDataSet1.State in [dsEdit, dsInsert] then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount > 0 then
begin
//提交数据
end;

假如我按了append按钮但没有输入数据。changecount也会>0;

 
如果点了EDIT或APPEND按钮而没输任何内容也没POST那么在窗体CLOSE前:
if ClientDataSet1.State in [dsEdit, dsInsert] then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount > 0 then
if MESSAGEBOX(0,'数据没有存盘,是否存盘',....)=IDYES then
ClientDataSet1.applyupdates(0)
else

........
 
很简单的,不用去看delta数据,只要看clientdataset的state状态就OK啦,
如果点击了edit的话,state的值是dsEdit,
如果添加了一条记录,state的值就是dsInsert,
如果删除了,因为cursor移动了,所以state没有修改的状态,所以这个时候就要看clientdataset的changecount是否大于0
that's all...
 
没错就是要用
try
if varisempty(clientdataset1.delta) then
clientdataset.AppkyUpdate(0);
finally
//退出系统
end;
 
在DataSource的OnUpdateData事件中判断。
 
后退
顶部