怎样实现VB中的Recordset与delphi进行数据交换?
其中接口怎样实现???简单的说就是VB传一个RecordSet到delphi中,delphi实现数据的保存等功能?

解决方案 »

  1.   

    换句话说就是VB中的ADO对象RecordSet对应delphi中哪个类型?
      

  2.   

    delphi中的ADO也有RecordSet试试看
      

  3.   

    TADORecordSet这个类在哪个单元呢?
    还有接口怎样实现?
      

  4.   

    VB中的ADO对象RecordSet对应delphi中TCustomADODataSet.RecordSet
    但是怎样结合起来我就不太清楚了。
      

  5.   

    首先要告诉你的是:
      VB和DELPHI各自都对ADO的RECORDSET有额外的包装,想要直接通过类型转换的话是行不通的。
    其次:VB和DELPHI都有原生ADO对象,这个是所有语言都一样的,你必须先找到这个原生ADO对象。记得是在adointf.pas里有,你看看,我机器上没有DELPHI。
    另外告诉你,试图直接传递ADO对象RecordSet给外面去用,并不是一个好的设计方式。
      

  6.   

    找到ADO原生对象后,可以通过直接类型转换,把他转换成和DELPHI的RECORDSET相同的类型。
    实在不行的话,可以用IDISPATCH试下:  With TVarData(Value) do
        if VType = varDispatch then
          Result := IDispatch(TVarData(Value).VDispatch) as _Recordset
      

  7.   

    TO foxnt
    能不能具体的说一下,因为小弟刚接触接口方面的知识,所以在许多方面还不懂!请指教
      

  8.   

    在 Delphi 中导入 ADO 的类型库后,就可以像在 VB 中一样使用原始的 ADO 对象了!procedure test();
    var
      adoc: _Connection;
      ador: _Recordset;begin
      ……
      adoc := CreateOleObject('ADODB.Connection') as _Connection;
      ador := CreateOleObject('ADODB.Recordset') as _Recordset;
      ……
    end;要在 Delphi 中使用 VB 传来的 RecordSet,可以把 VB 的 RecordSet 作为变体参数传入,在 Delphi 中将之转化为 _Recordset 接口类型,就能够使用了。
      

  9.   

    delphi中变体参数怎样转化为_RecordSet?
      

  10.   

    OleVariant-->_RecorSet怎样转换?
      

  11.   

    var
      v: OleVariant;
      ador: _Recordset;begin
      ador := IDispatch(v) as _Recordset;
      ……
      

  12.   

    转换的时候发生错误
    Could not convert variant of type (ByRef Variant) into type (Dispatch)
      

  13.   

    是 IDispatch, 不是 Dispatch!
      

  14.   

    是呀,我也是用IDispatch的,但是出现上面的错误
      

  15.   

    var
      v: OleVariant;
      i: IDispatch;
    begin
      i := IDispatch(v);
    end;我刚试过,没问题啊!
      

  16.   

    编译通过,但在asp中引用该接口出现错误
      

  17.   

    我觉得如果使用delphi开发asp程序的话应该没有这样麻烦,好像李维的书中介绍过,就是在开始的new的时候选择asp开发,然后delphi中的组件就可以正常使用。开发完成后,程序生成一个asp对象,然后在asp程序中调用这个对象的各种方法就可以了。如果还要转化接口什么的话,就没有必要使用delphi开发了。
      

  18.   

    那我就帮不了你了。可能你传给 Delphi 程序的参数有问题,这个参数应该是你在 vb 中创建的 Recordset 对象的 IDispatch 接口指针,以 OleVariant 形式传递。如果参数有问题,在 Delphi 程序中就会产生异常!
      

  19.   

    VB传的参数就是Recordset对象,delphi中的方法参数类型是OleVariant(In)
      

  20.   

    vb 我很久没用了。不知道在 vb 中可不可以获得 IDispatch 接口? 可以先把 Recordset 转化成 IDispatch ,再作为 Variant 传递
      

  21.   

    to leapmars
    能不能试过的发个Mail
    [email protected]
    万分感激
      

  22.   

    to leapmars
    把你试过的例子发个Mail
      

  23.   

    统一转换到IDISPATCH,不明白你为什么喜欢转成OleVariant?
      

  24.   

    接口实际上就是个指针,当variant传递就行了.
      

  25.   

    你把DELPHI的RECORDSET接口转为IDISPATCH,然后交给VB,再由VB转为RECORDSET。
    反过来也一样。(当然,前提是你的RECORDSET为ADO类型的RECORDSET,而不是DELPHI的RECORDSET)
        你不要受某些书的影响,总是把某些类型转为OLEVARIANT,这种转化既没有效率,也增加你自己的开发难度。就象你现在的问题,转为IDISPATCH就什么问题都没有了。
      

  26.   

    to zjhnwlh:  怎么你的问题还没解决吗? 如果 vb 支持 IDispatch 接口类型,就像楼上 foxnt 说的,当然可以把它作为参数类型。我昨天给你发的例子,传递的就是 IUnknown 接口指针,道理是一样的!  当然如果 vb 不直接支持 IDispatch 接口类型,就只有用变体了。
      

  27.   

    http://expert.csdn.net/Expert/topic/1636/1636914.xml?temp=.6488001其实我想实现的是在ASP中向ActiveForm传递VB中的RecordSet对象
      

  28.   

    to leapmars
    其实我在delphi中能实现这个功能,但在ActiveForm中不知怎样来实现
      

  29.   

    vb 是直接支持 IDispatch 接口类型的。
    我们写程序的时候,就经常在VC的COM里倒出IDISPATCH,然后给VB用。很好用的,比用变体方便的多,楼主的做法其实是舍近求远。
      

  30.   

    to foxnt
    现在我的问题是在ASP怎样来调用或者传递VB这个RecordSet对象给ActiveForm?
    请帮忙,万分感谢!!!
      

  31.   

    创建 ADODB.RecordSet 对象后,得到该对象的 IDispatch 接口指针,然后把这个指针传给 ActiveForm。在 vb 中参数的传送方式应为 ByVal,如果是 ByRef,传的就是指针的地址,这就不对了。
      

  32.   

    to leapmars
    能不能举个例子!
      

  33.   

    你可以把我给你的例子稍作改动啊!比如:
    TOne = class(TAutoObject, IOne) //原来为 TOne = class(TTypedComObject, IOne)TAutoObjectFactory.Create(……) //原来为 TTypedComObjectFactory.Create(……) 在 type library editor 中把 IOne 的 Parent Interface 改为 IDispatch,并且把方法中原来传递的 IUnknown* 参数改为 IDispatch*。 客户端 IntfTst 改用 vb 实现。就 ok 了!
      

  34.   

    当然 ITwo 也要做类似改动
      

  35.   

    哪么在ASP中怎样来调用它?
    在VB中是OK的,在ASP中怎样来传递对象呢?
      

  36.   

    ASP 和 VB 里面的使用应该差不多吧。你既然在 VB 里面已经 OK 了,那就没什么大问题了!自己试试吧。不过 ASP 用的 VBScript 只有变体类型吧,所以还是有点区别。但这些内容 上面已经讨论过了,应该不难! 我没用过 ASP,具体的也不清楚了!
      

  37.   

    在ASP中如何传递<对象>呢?
      

  38.   

    COM 编程是基于接口的,传递的参数也是接口,我们上面的讨论也都是关于接口传递的,怎么楼主还在问如何传递“对象”呢?建议楼主先看看 COM 方面的知识。