跨不同SQL数据库的兼容DDL(CREATE TABLE)?

时间:2011-01-18 18:46:39

标签: sql-server delphi ms-access ado ms-jet-ace

我正在开发一个必须支持(当前)MS Access和SQL Server后端的桌面应用程序。应用程序在不断开发中,并且经常对数据库进行更改,主要是添加表和视图以支持新功能(还有一些DROP和ALTER TABLE来添加新列)。

我有一个系统将DDL编译成可执行文件,检查数据库以查看可执行文件是否有任何必须执行的新DDL并执行它。这适用于单个数据库。

我的直接问题是SQL Server和Access支持数据类型的完全不同的名称,因此针对Access执行的CREATE TABLE语句将不会针对SQL Server执行(或者更糟糕的是,将执行但创建具有不同数据类型的表)。 / p>

是否有一种方法可用于创建DDL(尤其是CREATE TABLE命令),这些方法可以通过ADO对这两个数据库执行而无需为每个提供程序设计单独的DDL?

4 个答案:

答案 0 :(得分:3)

由于您已经在使用ADO,因此应该查看Microsoft ADOX

这允许您使用独立于基础数据源类型的ADO对象模型来操纵数据源中的结构。即不诉诸明确的DDL

任何给定的ADO提供商都不保证对ADOX的支持,即使ADOX支持可用,ADOX支持的级别也可能会有所不同。但对于MS Access和MS SQL Server,我认为您将找到所需的所有功能(并且可能更多!)

答案 1 :(得分:3)

这可以使用Delphi中的DBX来完成。

以下是示例代码的链接,显示了如何完成此操作。 http://cc.embarcadero.com/item/26210

答案 2 :(得分:1)

我遇到了同样的问题。 我决定在执行之前将SQL预处理器应用于SQL。 预处理器包括宏以处理不同的dbs。

斯特凡诺

答案 3 :(得分:0)