关于ClientDataSet的奇怪问题(分不够,再加)(200分)

  • 主题发起人 主题发起人 Puff
  • 开始时间 开始时间
P

Puff

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个C/S结构的程序中(数据库Oracle)中,在客户端使用了一个ClientDataSet临时
存些数据。单独调试时没问题,可是,一旦集成到整体环境中,第二次打开这个FORM的时
候,只要ClientDataSet一Open,就会出现这个异常:
必须加载一个dll。
本地调试没问题,集成环境采用的是动态调用bpl文件的方法。
哪位碰到过这个问题??
 
集成到整体环境是什么意思?单独调试又是什么意思?
需要加载什么dll?
tell me
 
单独调试是指,把这个出问题的FORM单独做成可执行文件,没问题。
集成环境是一个大的运行环境,作些辅助工作。
至于需要什么dll,为什么需要,我也不知道了
:(
 
关注。
我遇见过这个错误,也不知道原因。我的情况是只要用CORBA连接,服务出错时客户端就会出现
此错误;但用DCOM或SOCKET则不会。
 
to Huzzz ,
我现在没有用三层结构,还是用的BDE。只不过想在客户端临时存些数据,才用了
ClientDataSet。
你那个错误提示是什么样的?
 
程序执行到一半,弹出一个带红X的小窗口,上页写着“必须加载一个 dll。.”。就这样。
(或“灾难性错误”,在服务端确实是产生了错误,如地址错误、数据错误等。)
反正也无大碍,所以我一直没有解决它。
 
如果你不幸的用了Oracle8i,那么去下载一个它的BDE补丁试试看。
不过单单TClientDataSet是不关BDE的事,关注。
 
to Huzzz,
你的错误现象和我碰到的确实一样,不过你可以不解决它,真幸福!
我已经知道和ClientDataSet有关系(只有在ClientDataSet.Open时才出错,但是第一次
执行时没问题)。
哪位知道有这个方面的资料?
 
我觉得你更幸福,因为你不需要知道把错误显示给用户,你只需要使它不出错就行了。
你的问题我想我能帮上一点,你的ClientDataSet在OPEN时是打开什么数据表?有一个
本地连接LocalConnection连接到同一个Application的DatasetProvider吗?如果是这样,
你可以试试把DatasetProvider的Dataset改变一下,看错误是否有变化。如果不是这样,
你不能直接用OPEN方法,而应先用CreateDataset(可看帮助的例子)方法创建数据表。
 
同意 Huzzz,
 
在你的客户端要加midas.dll
 
谢谢各位的热情关注。
to Huzzz,你说的方法我也试过,但是,同样是第一次没问题,第二次再打开这个FORM,
然后执行到CreateDataset时,就出现异样!
关键是,问什么第一次没问题,而第二次就是不行。请注意,第二次执行时,FORM和
DataModule都是重新Create过的!!!
 
CreateDataset创建的是一个内存数据集,应该不会报错,我经常这样用。它不需要指定
RemoteServer和Provider,它不跟其它控件相关,而你第二次执行时是重新创建的,所以
更不应该出错了。
可能是你的用法不对,你把CreateDataset这一段代码贴一下,或者你试试下面的代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ClientDataSet1do
begin
Close;
FieldDefs.Clear;
with FieldDefs.AddFieldDefdo
begin
DataType := ftInteger;
Name := 'Field1';
end;
with FieldDefs.AddFieldDefdo
begin
DataType := ftString;
Size := 10;
Name := 'Field2';
end;
IndexDefs.Clear;
with IndexDefs.AddIndexDefdo
begin
Fields := 'Field1';
Name := 'IntIndex';
end;
CreateDataSet;
end;

end;
 
to Huzzz,
我的代码基本上和你写的一样,可是,一旦第二次创建后执行到CreateDataSet时,就会
出异常。
另外,我觉得关键应该是,为什么第一次就没问题?第二次创建后执行,和第一次有什么
区别?是不是应该从这个方面着手。
 
可是我一连创建了4次也不见它报错呀
》》第二次创建后执行,和第一次有什么区别
CreateDataset创建的是一个内存数据集,它不跟其它控件相关,所以理论上没什么区别。
但实际中你可能指定了属性、事件或引用它,程序单元不是独立的,那就有区别了。
 
我单独建一个可执行模块,也是N次都没问题。
可是,我现在必须把这个模块集成到整体环境中去,偏偏集成进去后,第二次就不行了。
所以才郁闷!!!
所以才怀疑是ClientDataSet的问题!
!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!
 
那我就帮不上你了,问题肯定是在集成时干了些什么,ClientDataSet不应有问题。
建议你把集成的东西一块块卸下来(或一块块加上)慢慢试看是到哪一块时会出错误。
祝你一路OK。
 
clientdataset前你没有close掉,
 
后退
顶部