【问题标题】:Delphi assign event in classDelphi 在课堂上分配事件
【发布时间】: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 中描述了继承的行为。简而言之,您设置的某个选项越低,它获得的优先级就越高(或者换句话说,如果您不修改数据集级别对象中的某个设置选项,则该选项值将从分配的连接继承,如果您不会修改连接对象中的某个设置选项,它将从全局连接管理器继承)。

标签: delphi events firedac


【解决方案1】:

好的,我刚刚“解决”了它。问题出在我的班级内部。就像;

  • 顶层:TMyCustomClass
  • 中间:TMygenerealClass
  • 底部:TSStandardClass

在 Middle 类中,Dataset.formatoptions.ownmaprules 的默认值设置为 true,这打破了传统。基本上我对遗产的运作方式缺乏了解;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2012-10-11
    • 2015-03-21
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多