不同SQL数据库间是否兼容DDL(CREATE TABLE)?

4

我正在开发一个桌面应用程序,必须支持(目前)MS Access和SQL Server后端。该应用程序在不断开发中,数据库经常进行更改,主要是添加表和视图以支持新功能(但也包括一些DROPs和ALTER TABLEs以添加新列)。

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

我目前的问题是,SQL Server和Access支持非常不同的数据类型名称,因此针对Access执行的CREATE TABLE语句将无法针对SQL Server执行(或更糟糕的是,将执行但创建具有不同数据类型的表)。

是否有一种方法可以创建DDL(特别是CREATE TABLE命令),可以通过ADO针对这两个数据库执行,而无需为每个提供程序制定单独的DDL?

4个回答

3

既然您已经在使用ADO,那么您应该了解一下Microsoft ADOX

这使您能够使用独立于底层数据源类型的ADO对象模型来操作数据源中的结构,即无需显式DDL。

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


你能推荐一个关于如何在Delphi中使用ADOX的教程或者其他资料吗?我尝试绑定类型库,但是在TTable上出现了冲突,并且发现TCatalog没有暴露我需要的方法(比如设置连接字符串的能力)。使用CreateOLEObject取得了更多成功,但是在SQL Server数据库上却遇到了某种权限拒绝的问题(虽然我可以使用相同的连接字符串发出等效的DDL)。 - Larry Lustig

3

我会研究一下dbExpress,但是在这个项目中,我已经深入研究了ADO。顺便问一句,dbExpress是否支持JET? - Larry Lustig
我不知道它是否这样做。 - Robert Love

1

我曾经遇到过同样的问题。 我通过在执行 SQL 之前应用 C 预处理器来解决它。 预处理器包括宏以处理不同的数据库。

Stefano



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接