怎样实现VB中的Recordset与delphi进行数据交换?
其中接口怎样实现???简单的说就是VB传一个RecordSet到delphi中,delphi实现数据的保存等功能?
其中接口怎样实现???简单的说就是VB传一个RecordSet到delphi中,delphi实现数据的保存等功能?
解决方案 »
- delphi 毛织行业系统
- 关于delphi 事件的奇怪问题!
- 如何生成不用注册的dll?
- 关于创建窗体
- 请教高手,在线等待
- 如何用QuickReport实现对ListView内容的打印。就69分了,全给你!
- 一个关于DELPHI记录集下移的问题!!!急,急,急,急。
- 请问一下,SQLSERVER2000中如何控制SELECT语句选取记录的数量。比如我想一次只选择10条记录,这样的SQL该如何写。回答的都有分。
- NT4.0是不是要装一个叫MTS管理器的东东管理组件?
- 小问题,可以告诉我哪里有DBGridEh for Delphi6下载吗?
- 关于ORACLE的连接,急啊!!
- 关于数据库记录锁定的问题?
还有接口怎样实现?
但是怎样结合起来我就不太清楚了。
VB和DELPHI各自都对ADO的RECORDSET有额外的包装,想要直接通过类型转换的话是行不通的。
其次:VB和DELPHI都有原生ADO对象,这个是所有语言都一样的,你必须先找到这个原生ADO对象。记得是在adointf.pas里有,你看看,我机器上没有DELPHI。
另外告诉你,试图直接传递ADO对象RecordSet给外面去用,并不是一个好的设计方式。
实在不行的话,可以用IDISPATCH试下: With TVarData(Value) do
if VType = varDispatch then
Result := IDispatch(TVarData(Value).VDispatch) as _Recordset
能不能具体的说一下,因为小弟刚接触接口方面的知识,所以在许多方面还不懂!请指教
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 接口类型,就能够使用了。
v: OleVariant;
ador: _Recordset;begin
ador := IDispatch(v) as _Recordset;
……
Could not convert variant of type (ByRef Variant) into type (Dispatch)
v: OleVariant;
i: IDispatch;
begin
i := IDispatch(v);
end;我刚试过,没问题啊!
能不能试过的发个Mail
[email protected]
万分感激
把你试过的例子发个Mail
反过来也一样。(当然,前提是你的RECORDSET为ADO类型的RECORDSET,而不是DELPHI的RECORDSET)
你不要受某些书的影响,总是把某些类型转为OLEVARIANT,这种转化既没有效率,也增加你自己的开发难度。就象你现在的问题,转为IDISPATCH就什么问题都没有了。
其实我在delphi中能实现这个功能,但在ActiveForm中不知怎样来实现
我们写程序的时候,就经常在VC的COM里倒出IDISPATCH,然后给VB用。很好用的,比用变体方便的多,楼主的做法其实是舍近求远。
现在我的问题是在ASP怎样来调用或者传递VB这个RecordSet对象给ActiveForm?
请帮忙,万分感谢!!!
能不能举个例子!
TOne = class(TAutoObject, IOne) //原来为 TOne = class(TTypedComObject, IOne)TAutoObjectFactory.Create(……) //原来为 TTypedComObjectFactory.Create(……) 在 type library editor 中把 IOne 的 Parent Interface 改为 IDispatch,并且把方法中原来传递的 IUnknown* 参数改为 IDispatch*。 客户端 IntfTst 改用 vb 实现。就 ok 了!
在VB中是OK的,在ASP中怎样来传递对象呢?