使用 Delphi 进行数据库开发的最佳实践是什么?

2024-03-03

  1. 如何高效地使用 RAD 方式(重用代码)。任何 示例、现有库、基本 污垢生成器?
  2. 我该如何设计OOP方式?哪个 用于的设计模式 连接,抽象不同 引擎/数据库访问层 (bde-dbexpress-ado),基本 CRUD 运营。

我有自己的 Delphi/MySQL 框架,可以让我非常快速地添加“新屏幕”。我不会分享它,但我可以描述我采取的方法:

我使用带有基于 TFrame 层次结构的选项卡式界面。我创建一个选项卡并将 TFrame 链接到其中。

我使用标准 mysql 存储过程实现来处理所有的原始管道和并发控制。客户SEL、客户GET、客户UPD、客户DEL 等...

我的主窗体本质上包含导航栏面板和包含 TPageControl 的面板

我的层次结构中的类的示例

框架 TMFrame - 我的派生,具有捕获 OnShow、OnHide 和其他一些细节的接口实现

--TWebBrowserFrame --TDataAwareFrame --TObjectEditFrame --TCustomerEditFrame --TOorderEditFrame ETC... --TObjectListFrame --TCustomerListFrame

etc...

和一些对话框..

对话框 TM对话框 --TDataAwareDialog --TObject编辑对话框 -- TContactEditDialog ETC.. --TObject选择对话框 --TContactSelectDialog

etc...

当我添加要管理的新对象时,它可能是客户的新属性,假设我们想要跟踪客户拥有哪些车辆。

创建表 CustomerVehicles 我运行我的特殊 sproc 生成器来创建我的 SEL、GET、UPD、DEL 测试那些...

从我上面提到的基类派生,删除一些控件。将选项卡添加到 TCustomerEdit。

Delphi 始终将数据集作为抽象层,通过数据源将其公开给您的 GUI。将数据集添加到客户数据模块,然后“注册”。我的派生数据模块类 TMDataModule 中我自己的自定义函数

安全控制在框架中也得到了类似的处理。我“注册”需要安全标志可见或启用的组件。

我通常可以在一小时内添加一个新对象、构建存储过程、添加维护屏幕。

当然,这通常只是开始,通常当您添加某些内容时,您不仅仅将其用于跟踪。如果这是一个车库应用程序,我们想要添加客户带入车库的车辆,对其进行 ID 以便我们可以跟踪历史记录。但即便如此,速度也很快。

我尝试过使用“更新的开发工具”将其分包给年轻人,但当我说我可以用 Delphi 将这一切速度提高十倍时,他们似乎从来不相信我!我可以在两个小时内完成没有错误的事情,而他们似乎花了两天的时间,但他们仍然有错误......

DO - 仔细规划您的 VFI!正如有人提到的,如果您想更改父类之一的组件名称,请做好遇到麻烦的准备。您将需要打开并“编辑”层次结构中的每个子项,即使您清理了 DCU,您仍然可能会遇到一些 DFM 地狱。我可以向你保证,在 2006 年这仍然是一个问题。

不要创建一个怪物数据模块

请花点时间进行前期设计,创建大量依赖项后进行重构可能是一个有趣的挑战,但当您必须快速让新东西工作时,这就是一场噩梦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Delphi 进行数据库开发的最佳实践是什么? 的相关文章

  • 如何使用 Wix 运行 sql 脚本创建数据库

    我在使用 Wix 创建数据库时遇到问题 我能找到的示例 参见下面的链接 都是首先使用 wix 创建数据库并运行创建表 sql 脚本 问题是我需要将 wix 设置为使用 CREATE DATABASE 运行 sql 脚本来创建数据库和表 而不
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p
  • FireMonkey iOS RAD Studio XE2 - 在从 URL 加载的表单上显示图像

    是否可以将 TImage 放置在 iOS 的 FMX 表单上 并将图像 jpg 从 URL 加载到此 TImage 中以在 iOS 应用程序中显示 我尝试过但没有成功 任何正确方向的提示或指出都会受到赞赏 将 TButton TImageC
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • 面向对象的铸造错误[重复]

    这个问题在这里已经有答案了 将派生类强制转换为基类 我有一个通用的基本抽象类 继承自 IComparable 其定义如下 public abstract class BaseClass
  • 克隆和引用传递问题

    所以在过去的几天里 我一直在绞尽脑汁地试图让一个类能够正确克隆 问题是克隆不会删除 重做任何引用传递 结果是 主数据对象仍然作为引用传递 从而完全抵消了克隆的效果 这是问题的简化版本 class my class private data
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源
  • Delphi:现场记录应用程序错误

    使用 Delphi 7 我想知道是否有一个免费组件可以在我的应用程序在远程站点运行时收集诊断信息并帮助我调试错误报告 也许它会记录每个选择的菜单项 单击的控件 文本输入等 也许它只是在崩溃时转储堆栈 也许它还有其他作用 我不介意添加代码 例
  • 触发器与非规范化存储过程的优缺点

    当涉及到对事务数据库中的数据进行非规范化以提高性能时 至少 有三种不同的方法 通过存储过程推送更新 更新规范化交易数据和非规范化报告 分析数据 在事务表上实现更新辅助表的触发器 这几乎总是维护历史时所采取的路线 将处理推迟到夜间批处理 可能
  • 我的用例可以合并到单个查询中而不影响性能吗?

    我主要着眼于改善表现查询的内容以及是否能够解决单一查询对于我的用例之一 解释如下 涉及到2张表 Table 1 EMPLOYEE column1 column2 email1 email2 column5 column6 Table 2 E
  • 如何将枚举类型放入字符串列表中?

    这行代码 ShowMessage GetEnumName TypeInfo TAlign 1 返回 alTop 当我想使用字符串变量 TAlign 而不是TAlign时 如何将枚举类型的所有值放入字符串列表中 就像是 ShowMessage
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • 如何在 Sequelize 现有模型中添加列?

    我使用此命令添加了模型和迁移文件 node modules bin sequelize model generate name User attributes firstName string lastName string email s
  • 用于全文搜索和 2 亿多条记录的数据库

    我即将创建一个包含至少 2 亿个条目的庞大数据库 数据库需要可使用全文进行搜索 并且速度应该很快 我的数据库从许多不同的数据源获取数据 我需要定期导入新的或更新的数据 将我的所有数据存储在像 mysql 这样的关系数据库中 然后创建一个 n
  • (发件人:TObject)

    发件人 TObject 是什么意思 如 procedure TForm1 Button1Click Sender TObject var s Integer begin end Sender 是对触发事件的组件的引用 在这种情况下 Send
  • PDO获取最后插入的ID

    我有一个查询 我想获取插入的最后一个 ID 字段ID是主键并且自动递增 我知道我必须使用这个声明 LAST INSERT ID 该语句适用于如下查询 query INSERT INTO cell place ID VALUES LAST I
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • 无法将 CLOB 数据存储到 DB2 中的 CLOB 定义的列中

    我猜这是一个重复的问题 但尚未找到合适的解决方案 基本上 我试图通过以下方式将大一点的 XML 即 32000 个字符 插入到 CLOB 列中 DB2程序 插入失败并出现以下错误 看起来 DB2 正在将输入视为 String 而不是 CLO

随机推荐