Delphi6多么奇怪的问题呀,不知哪位大侠能指点迷津?OleVariant问题(100分)

H

hsj

Unregistered / Unconfirmed
GUEST, unregistred user!
我的系统是三层体系,客户端通过SocketConnection连接,下面出现AppServer就是
SocketConnection.AppServer.
用户服务器方法:
procedure TDataMD.GetData(RcdSet: OleVariant);
var
c:TClientDataset;
begin
c:=TClientDataSet.Create(nil);
c.Data:=RcdSet;
//...//
c.Free;
end;

客户端方法:
procedure TdlgInputInfo.Button1Click(Sender: TObject);
var
Tmp:OleVariant;
begin
AppServer.GetData(ClientDataSet1.Data);//第一次尝试,正常
Tmp:=ClientDataSet1.Data;//变量赋值
AppServer.GetData(Tmp);
//第二次尝试,异常,说什么Missing data provider or data packet
end;

我想我这里的代码也比较简单,就是把一个OleVariant的值传给服务器,但是使用ClientDataSet1.Data
作为参数没有问题,而把ClientDataSet1.Data的值赋给一个变量,然后再把这个变量作为
参数传给服务器却出现这个错误,真是搞不懂!这个代码原来在Delphi5中根本没什么问题,
什么要升到Delphi6,简直把我害苦了。
请教各位仁兄贤妹,这是不是Delphi6的一个Bug啊?还是我哪里搞错了?
 
在线等待啊……
 
procedure TDataMD.GetData(RcdSet: OleVariant);
var
c:TClientDataset;
begin
c:=TClientDataSet.Create(nil);
c.Data:=IUnknown(RcdSet) as _recordset;
//做一个类型强制转换
//...//
c.Free;
end;
 
请问yu_gao:
_recordset是什么类型?我怎么编译通不过,我也找不到声明的文件。
谢谢您!
继续等待……
 
而且这样做有什么作用呢?
我试了一下语句c.Data:=IUnknown(RcdSet) 就得到了类型不能转换的错误
 
use adodb
Iunknown 是个接口,c.Data:=IUnknown(RcdSet) 这样当然不行。
你再试试
 
但是我编译不通过啊
 
我正在试……
 
_recordset in adodb.pas,
Iunkown in system.pas
编译提示是什么?
 
错误如下:
Can not convert variant of type(Array Byte) into type (Unknown).
这是第一次调用发生的异常
 
yu_gao:
你刚才告诉我的应该是ADO对数据集处理的一种手段吧,而我这个是Midas中的情况,
问题不可能是这个方向。
谢谢您!
 
请大家继续关注!!!
 
Missing data provider or data packet
这种异常以前也经常发生。。。
不过像你这样就不知道了。。
AppServer.GetData(ClientDataSet1.Data);//
多次调用这个试试。。
还是自己慢慢调吧~~

 
youou:
我估计是网络传输的时候就把类型改变了,我调试中发现在客户端赋值后的Tmp的变量的类型
为variant array of byte,然而到服务器RcdSet变为variant array of variant,是不是传输的哪个
文件的版本不一样导致发送双方出现差异,但是我找不到可以替换的地方,我已替换了Midas.dll
,可是没有任何变化。
请大家继续关注!
我将继续在线……
 
我刚学MIDAS, 继续关注
 
把参数的类型改一下
variant 改成 variant*
 
原来Delphi5升到Delphi6就有这样的问题,Borland公司真是让人失望!
感谢大侠lgh200的指点。给分!
 
lgh200说的对,我写过好多这样的函数了都是这样的
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
958
SUNSTONE的Delphi笔记
S
顶部