这是一个问题,可能会导致一些经验丰富的开发人员在使用古老设备挖掘的Foxbase洞中闪回火炮......
我们有一些老化的Web代码,我们需要对它进行一些低级数据库处理。我们已经编写了一个COM库来执行其他处理,例如加密和用户身份验证,我们已经确定最好的方法是创建扩展现有ADODB_TLB接口的COM接口,增加处理。
如果完成所有操作,将如何使用它来替换一些现有的调用:
Set CMD = Server.CreateObject("ADODB.Command")
CMD.ActiveConnection = DB
CMD.CommandType = adCmdStoredProc
CMD.CommandText = "Country_Code_Get"
CMD.Parameters.Append CMD.CreateParameter(, adInteger, adParamInput, 4, NULL)
Set RS = CMD.Execute()
使用看起来更像这样的新代码:
Set CMD = Server.CreateObject("MyADODB.Command")
CMD.ActiveConnection = DB
CMD.CommandType = adCmdStoredProc
CMD.CommandText = "Country_Code_Get"
CMD.SpecialHandling = "Extra Stuff"
CMD.Parameters.Append CMD.CreateParameter(, adInteger, adParamInput, 4, NULL)
Set RS = CMD.Execute()
目标是扩展现有的ADODB库,以便通过我们的大型代码库所需的最少量更改来实现我们的额外处理。
有没有办法扩展现有的_Command接口,只添加我们的新参数(当然,重写必要的Execute函数来适当地处理新参数),而不需要有效地复制整个_Command接口?
答案 0 :(得分:0)
如果我猜对了,你问题中的代码片段可能会在Command对象上使用后期绑定。这意味着它可能会通过IDispatch接口的方法。看一下TAutoObject
单元中的ComObj.pas
,它实现IDispatch
并映射到Delphi类型系统的类型信息。
所以在这种情况下扩展 ADO,我不会烦恼ADO_TLB或类型库GUI(可能除了File> New> Other ...以及来自ActiveX- tab:" Automation Object")并专注于创建另一个IDispatch实现,修补您不会覆盖到ADO.Command实例的实时实例的IDispatch指针的任何调用。 (还有更多关于here)
的信息