前台接收数据的问题.大虾们,很急啊!!! (50分)

  • 主题发起人 主题发起人 子弹
  • 开始时间 开始时间
ADOQuery1.Recordset := GetData() as _Recordset;
 
你的程序,我跟踪了一下,在中间层的
MyRecordSet.Open(sSQL,MyADOConnection);
并没有取到记录,所以result返回的时候是一个指针,
那么在客户端接收肯定是要报错的,但是,我对直接使用ADO,Recordset不了解,
所以,现在还不知道该怎么去改,
好像说了一堆废话
 
to softdog:
谢谢,可以了;
请来拿分
http://www.delphibbs.com/delphibbs/dispq.asp?lid=888729
如果可能,能否讲讲其内部原因?为什么把它转化为IDISPATCH类型就可以了??
 
还有,子弹占用了你的地盘,谢谢
 
TO xiaolinj79:
不好意思,还是没有。我还有个信箱,可以试试。jocjf01.student@sina.com。
我忙了好几天了,真不想前功尽弃。拜托了!!!,千恩万谢!
S的值是‘$00FC4AF0’。
在前端,我把TClientDataset实例化了。Copy下我的代码:
procedure TForm1.Button2Click(Sender: TObject);
var
s: OleVariant;
mycom:IComtry;
MyDataset: TClientDataset;
begin
mycom := CreateComObject(Class_Comtry) as IComtry;
MyDataSet := TClientDataset.Create(nil);
s := MyCom.Getdata2('Select * from DWmc');
Mydataset.data := s;
end;
//S的值是:‘$00FC4AF0’。
//运行到最后‘Mydataset.data := s;’出错提示‘Invalid data Packet’。
 
to 子弹:
>s := MyCom.Getdata2('Select * from DWmc');
>Mydataset.data := s;
这样当然会出错,TClientDataSet.Data属性是TClientDataSet特有的数据打包格式,你赋一个
Recordset类型接口给它干什么啊?
 
TO softdog:
我希望把中间层传回的数据集附给TClientDataset。然后给Datasoure.dataset引用。
另外,你传授的方法我已经测试成功了。不过它是用接口传递的,我希望用OleVariant传
递。因为我想知道,当OleVariant包含了一个数据集时,将怎么样处理。你知道吗?
 
to 子弹:
试试这个方法:
function DataSetToVariant(ADataSet: TDataSet;
Recs: integer): Variant;
var
DPW: TDataPacketWriter;
V: Variant;
begin
if ADataset <> nil then
try
DPW := TDataPacketWriter.Create;
DPW.PacketOptions := [grMetaData];
ADataSet.First;
DPW.GetDataPacket(ADataSet, Recs, V);
finally
DPW.Free;
end;
Result := V;
end;
说明:
ADataSet: TDataSet;
要转换的数据集
Recs: integer;
转换的记录数,-1表示全部
在服务端将DataSetToVariant取得的值传递给客户端,然后直接赋值给TClientDataSet.Data即可。
 
就知道你又收不到,163的信箱有问题,别人给我寄程序也是收不到
我再给你发好了:)
 
To softDog:
TDataPacketWrite是什么类啊?我怎么找不到啊!!!
 
to 子弹:
呵呵!不好意思!写错了,应该是TDataPacketWriter,在Provider单元中。[:D]
 
呀!是你写错了,我没写错。呵呵![:D]
 
To xiaolinj79:
还是没有收到啊!,不然你可不可以Copy到这里啊!
 
To xiaolinj79:
收到了。谢谢!!!
 
分……
ps:辛苦分总有吧?:)
 
感谢xiaolinj79、softdog、daemonking对我的帮助!!!
可惜我开始给的总分太底了,真有点为难。
 
后退
顶部