【注】 TQSQLConverter 新增了多个属性,具体参考:[QDB] 更新-TQSQLConverter 新增多个属性
受制于个人的时间和精力,QDB 的直连的 Provider 目前进展并不如人意。那么在没有 Provider 的情况下,难道就没有办法结合 QDB 和现有的数据库组件来使用了吗?当然不是,QDB 为此在 qconverter_sql 单元增加了一个导出转换器类 TQSQLConverter ,我们可以利用它的子类来完成对 QDB 未提供支持的数据库的支持。
TQSQLConverter 目前继承实现了以下三个子类:
- TQMSSQLConverter
用于生成 MSSQL 的更新脚本 - TQPgSQLConverter
用于生成 PostgreSQL 的更新脚本 - TQMySQLConverter
用于生成 MySQL 的更新脚本
上面吹完了,咱们以TQDataSet + ADO 来完成对 MSSQL 的支持的演示程序。
- 放上去一个 TADOConnection 对象假设名为dc1,一个 TADODataSet 对象假设名为ds1,然后建立两者之间的关联并连接到数据库,然后让 ds1 取出需要的记录(此处省略具体的步骤设定)。
- 放一个 TQDataSet 对象,假设名为qds1。我们编写如下代码:
qds1.CopyFrom(ds1);
- 在界面上放置一个数据感知控件,如表格啥的,用来关联到 qds1 来关联修改数据。
- 修改完成时,我们要提交变更的数据内容到数据库时,我们创建一个 TQMSSQLConverter 的实例,假设为 msc,则使用下面的代码关联到数据集对象:
msc.DataSet:=qds1;
- 我们调用连接对象 dc 的 Execute 方法来更新数据到数据库:
dc.Execute(msc.SQL,AffectRows);
注意,在更新之前,有一项工作我们需要做,通过设置 qds1 中 FieldDefs 的每个字段的原始定义信息,来保证其能够正确生成相关的 SQL 脚本。
- 如果上面执行成功,则数据就会已经提交到数据库中,我们接下来调用 qds1.ApplyChanges 来应用本地更新。当然,如果有带有默认值或自增的字段,则需要重新执行第 2 步来刷新数据。