0

前段时间(实际上差不多 5 年前)这里发布了一个示例,显示了使用 ActiveX 报表查看器在 Delphi 2007 中显示 Crystal Reports 的方法。我发现它也适用于 Delphi XE3。我有一个问题的片段如下:

for i := 1 to oRpt.Database.Tables.Count do begin
oRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := 'username';
oRpt.Database.Tables[i].ConnectionProperties.Item['Password'] := 'password';
end;

我的问题:由于 oRpt 是一个变体并且没有键入,我如何找到报表查看器的属性并在显示或打印报表的 proc 中设置它们的值?

4

1 回答 1

3

阅读文档。:-)

有两种方法可以连接到 ActiveX 服务器:在编译时(早期绑定)或在运行时(后期绑定)。[ MSDN上的一篇文章对此进行了更详细的解释。

早期绑定是在您使用类型化变量时使用的(例如使用组件面板中的TWordApplicationTExcelApplication)。类型库用于确定支持哪些类型和接口,可以使用DispInterfacev-table 中的 a 查找方法;然后编译器可以验证函数是否存在并检查拼写错误等,并找出可用于 Code Completion 和 Code Insight 的功能)。

通过变体(如您的代码片段所示)访问 ActiveX 服务器是late binding. 在实际执行代码之前,编译器一无所知,此时会尝试通过IDispatch接口调用方法,并且此时它要么成功要么失败。因为编译器对你的变体可能包含什么一无所知,所以在设计或编译时无法知道哪些方法和类型可用。

因为您的代码正在使用后期绑定,所以除了阅读文档(当然,这不是一个真正的选择)之外,没有办法知道哪些属性可能可用。(另一种选择是使用早期绑定,如果有可用于 ActiveX 服务器的类型库,此时您停止使用变体并切换到编译器可以用来确定您可用的接口。)

于 2013-02-20T22:56:02.200 回答