【发布时间】:2019-01-14 14:23:20
【问题描述】:
我必须更改自定义查询类的数据类型映射(我使用的是FireDAC)。这本身没问题,我已经创建了一个可以完成这项工作的程序。但是我在大规模实施时碰壁了。
我在我的类中创建了一个过程,它从它的数据库连接组件(具有正确的数据类型映射规则)中获取self.FormatOptions.MapRules 属性。现在我想更改我的课程,以便该课程的每个组件都执行我的过程OnOpen,但我似乎找不到将过程分配给课程中的事件的方法。
当我的数据库连接组件不是我的查询组件的父级时,有没有办法做到这一点或从我的数据库连接组件“继承”该属性?
我已经尝试使用构造函数来做,但是由于我没有在运行时创建查询组件,所以没有调用构造函数
由于查询组件在项目中使用了大约 500 多次,我不想每次都手动将过程分配给事件...
【问题讨论】:
-
好吧,映射规则(实际上是所有设置,如果未在数据集对象中修改)已经从分配的连接对象继承。我认为没有理由在这里做任何事情。
-
正如维多利亚所说,地图规则已经被继承。如果您显示演示问题的代码,您将获得更好的响应。我不清楚您所说的“自定义查询类”是什么意思,所有对象——甚至是放在表单或数据模块上的组件都会调用构造函数。您可能需要考虑覆盖特定方法而不是尝试设置事件处理程序,但这只是猜测,没有看到任何代码。
-
@Victoria 最初我认为这应该像您建议的那样,但我很/很困惑,因为当我尝试访问“dat.formatoptions.maprules.items[0]”时我会遇到访问冲突(这是我的查询,在这种情况下连接已正确设置)。所以我开始搞乱“TMy(Queryclass)”。我现在将我的“TMy(Queryclass)”中的所有内容都恢复为默认值。通过测试,我发现“ownmaprules”被遗产设置为真,就像它应该的那样。但是好像不是maprules.items,应该是这样还是我对调试继承属性的误解...?
-
@Paul,对不起,我不知道你的课程设计。我只能说this help topic 中描述了继承的行为。简而言之,您设置的某个选项越低,它获得的优先级就越高(或者换句话说,如果您不修改数据集级别对象中的某个设置选项,则该选项值将从分配的连接继承,如果您不会修改连接对象中的某个设置选项,它将从全局连接管理器继承)。