请问如何在ActiveX/OLE Aotomation中实现这样的属性、方法的定义? (100分)

  • 主题发起人 主题发起人 arhaha
  • 开始时间 开始时间
A

arhaha

Unregistered / Unconfirmed
GUEST, unregistred user!
用过IIS中ASP的ADO编程的都知道,可以这样使用ADODATASET:

set Conn = CreateOleObject("ADODB.Connection")
myDSN = "Driver={Microsoft Access Driver (*.mdb)};DBQ=countries.mdb"
Conn.open(mydsn)
writeln("CONN OK")
Mysql = "Select * from countries"
Set rs = Server.CreateOleObject("ADODB.recordSet")
rs.ActiveConnection = Conn
rs.open(Mysql)
Do while rs.eof = false
response.write rs("COUNTRY") ' "COUNTRY" 是countries.mdb中的一个字段
rs.MoveNext
loop
rs.close
conn.close
set rs = nothing
set conn = nothing

我的问题是:

上面的rs是一个对象,却可以像函数一样使用rs("COUNTRY")。但是如何在delphi的ActiveX/OLE Aotomation中实现像rs("COUNTRY")这样的方法呢?请高手指教!!!!
 
添加一个Property only的属性,设置返回参数为bstr *,传入的参数为bstr,
然后再编写对应的Get_XXXXXXX函数就可以了。
 
TO piao40993470 :
能否说的详细点?你这样做过吗?ADODATASET中的RS不仅能够用RS("xxx")取值,还能够赋值,所以光是一个GET_XXXX好像还不够吧?
昨晚我搞了一晚也没有成功:(
 
ADODB.RecordSet有一个隐藏属性Collect,有可能我们用的Rs("xxx")就是Rs.Collect("xxx"),怎么设置还不清楚
 
光是一个get_xxxx的函数就可以搞定了,函数的特征不就是传个参数返回一个值吗?
你可以通过view->Type Library,然后在接口定义部分增加一个Read only 的property就可以了,然后在对应的.pas里找到你定义的接口名称,如果你定义的名称为abcd,那么在对应的.pas里就会自动生成function Get_abcd(const aaa: WideString):WideString;你只要在begin和end之间加入你想要的功能就可以了。
 
to piao40993470,
你大概没有理解我的意思!
假设我定义了一个对象MyObj,我要实现这样的功能:
1、a = MyObj("xxx"), 可以在VB中通过这样的语法取得对象MyObj的一个某些返回值;
2、MyObj("xxx") = a, 可以为对象MyObj的某些属性设置值。
而你的方法也只是提供一个属性,且必须通过MyObj.属性("xxx")的方式去访问,而不是MyObj("xxx")的方式可以访问!!!!
 
晕,那是VB的用法吧,在D里恐怕是没办法实现的。(至少我不知道如何实现)一个对象带着参数进行某些动作倒还可以理解,但还以返回一个值,对象能有返回值吗?(我是不太清楚的),再讲通过MyObj.属性("xxx")这样的方法调用对楼主来说完成相同的功能有很在影响吗?(((也许我的疑问太多,但也只唠叨一下请楼主别见怪
 
说对了,我就是想开发一个控件供VB使用,可是现在还不知道如何实现:(
 
如果你想写的控件在VB中使用的话就写成ActiveXControl的肯定没问题,如果只是想给ASP或javascript、vbscript之类从网页调用的话写成ActiveForm或ASP对象,其它只要是COM的对象都可以通过网页调用 的。
 
不好意思,我已经找到答案了:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=982109

多谢上面两位的参与!!!!!!!!!!!!!!!!!!!!!
 
就是设置一个缺省的属性
 
呵呵,我收获 也不小。(
 
请教上面两位仁兄两个问题:
你好,想请教你一个问题,好不好,我写了个asp的dll,在里面我写了一些过程和函数,当我编译运行后,生成一个进程,而且网页也能显示我要求完成的的功能(过程完成的事件),但是我关闭网页,进程并没有关闭,然后我换了一个参数(同一过程)第二次运行时,编译不成功,不会再生成新的进程,而且运行结果还是原来那个,不会有变动,怎么样结束该进程!!!(我每次都是手动结束,再编译)!
非常期待你们的回答,如果你们能回答,可以在以下地址参与讨论,我一定会给两位分的,说到做到!
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=2434472
 
后退
顶部