【问题标题】:Component published property as array of TQuery组件发布属性作为 TQuery 数组
【发布时间】:2010-10-13 09:51:37
【问题描述】:

我正在开发一个自定义组件,并且我想添加一个已发布的属性,该属性将是一个 TQuery 数组(它应该在对象检查器中可见)。主要功能是将组件放在表单上,​​然后直观地选择出现在同一表单或任何其他项目表单上的查询。

这可行吗?从我到现在所见,您只能以编程方式使用这样的数组属性...

更新

首先,感谢您的回答 Alex!

其次,问题是我必须修改别人创建的旧应用程序,所以我想尽可能少地处理它(实际上我需要“修复”第二个应用程序,我被告知它是两倍大的)。现在了解详细信息:该应用程序有大约 15 种用于各种数据库操作的表格。正如您可以想象的那样,每个表单都有 2-3 个 TQuery 对象。问题是用户必须通过数据库进行身份验证才能执行查询,因此他知道数据库用户和密码,这是一个安全流程。

为了避免这种情况,引入了中间系统。一个连接并对其进行身份验证并请求必要的数据库数据:用户、密码和数据库名称。我的工作是使用这个系统并自动登录到数据库。访问此中间系统的必要凭据不被视为安全流程,因此我将从依赖于其部署环境的 inifile 中读取它们:测试、预生产、生产。

所以我在表单上放置了一个 TDatabase 组件,将其 LoginPrompt 属性设置为 FALSE。然而,棘手的部分是在执行之前将每个 TQuery 调整为每个环境的不同数据库名称..

不知道我是否说清楚了,但这是我想出的最简单的解释


谢谢, G

【问题讨论】:

  • 为什么要数组?如果您在设计时需要访问,集合可以让您的生活变得更轻松,因为对象检查器中对它们提供了标准支持。
  • 您能否提供一个指向此类示例的链接?谢谢,G
  • vcl中有例子。 TListView 的列; THeaderControl 的部分; TCategoryButtons 的类别; TButtonGroup 的项目,仅举几例。
  • 是的,找到了,非常感谢,G

标签: delphi delphi-7 custom-component


【解决方案1】:

为了让生活尽可能简单,你可能不得不笑着忍受一次:

  • 创建一个数据模块并确保它在主窗体之前被实例化。
  • 将您的 TDatabase 组件放在该数据模块上。
  • 一次性检查所有表格,然后
    • 将数据库的数据模块添加到它的uses子句中(可以在实现部分)。
    • 一次更改所有 TQuery 和其他与数据库相关的组件,以使用数据模块中的数据库组件,而不是拥有自己的连接字符串。

在运行时,按照您的描述通过您的 TDatabase 组件登录,瞧,您的所有组件现在都将自动使用这些设置(因为它们都连接到您的 TDatabase 实例)。

【讨论】:

  • 很酷的想法,但答案要简单得多,只是我没有眼睛看到它。实际上我正在寻找一个我忘记的功能已经存在。感谢上帝为这些社区和你们创造了这些社区
【解决方案2】:

好的,您已将 TDatabase 添加到您的项目中。现在,用一些随机名称填充 TDatabase 的“DatabaseName”属性。项目中的每个 TQuery 组件也有一个“DatabaseName”属性,并在这些属性中填写相同的名称!现在您的数据库和它的所有查询都将连接起来,您可以使用 TDatabase 对象来访问它们。

【讨论】:

  • 该死,我怎么会错过(基本的菜鸟错误)?谢谢伙计,你是一个救生员:D
  • 您不是第一个错过这一点的人。 :-) 相信我,数以千计的经验丰富的 Delphi 开发人员在您之前遇到过这个问题。 :-)
  • 现在你已经提醒我了,我改变了方法。我将 TDatabase 子类化并覆盖它的 'SetConnected(Value: Boolean);'方法。这允许我在登录之前引入身份验证逻辑,并且我只需要更新所有 TQuery 以使用它的“DatabaseName”。所以基本上我不需要接触旧代码......非常感谢:-D
【解决方案3】:

是的,可以这样做,但您必须使用自己的输入表单编写自己的Property editor 来管理数组内的数据。网上有很多资料可以查到。是的,您可以创建一个组件来检查其父项上的控件,从而允许您访问这些控件。
但是实用吗?为什么在设计时需要一组 TQuery 组件?也许您需要首先重新考虑您的设计,因此您绝对确定您需要此功能。 (此外,使用数据模块包含查询有什么问题?)

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2022-01-08
    • 1970-01-01
    • 2017-07-30
    • 2017-10-16
    • 2015-12-04
    相关资源
    最近更新 更多