Совместимый DDL (CREATE TABLE) для разных баз данных SQL? - PullRequest
4 голосов
/ 18 января 2011

Я работаю над настольным приложением, которое должно (в настоящее время) поддерживать MS Access и SQL Server.Приложение находится в постоянной разработке, и в базу данных часто вносятся изменения, в основном это добавление таблиц и представлений для поддержки новых функций (а также некоторых DROP и ALTER TABLE для добавления новых столбцов).

У меня естьсистема, которая компилирует DDL в исполняемый файл, проверяет базу данных, чтобы увидеть, есть ли у исполняемого файла какой-либо новый DDL, который должен быть выполнен, и выполняет его.Это прекрасно работает для одной базы данных.

Моя непосредственная проблема заключается в том, что SQL Server и Access поддерживают дико разные имена для типов данных, поэтому оператор CREATE TABLE, выполняемый для Access, не будет выполняться для SQL Server (или, что еще хужевыполнить, но создать таблицу с разными типами данных).

Существует ли метод, который можно использовать для создания DDL (особенно команд CREATE TABLE), который можно выполнить через ADO для обеих этих баз данных без необходимости создания отдельного DDLдля каждого провайдера?

Ответы [ 4 ]

3 голосов
/ 18 января 2011

Это можно сделать с помощью DBX в Delphi.

Ниже приведены ссылки на пример кода, показывающий, как это можно сделать.http://cc.embarcadero.com/item/26210

3 голосов
/ 18 января 2011

Поскольку вы уже используете ADO, вам следует изучить Microsoft ADOX

. Это позволяет вам манипулировать структурами в источнике данных, используя объектную модель ADO, которая не зависит от базовых данных.Тип источника.т.е. без обращения к явному DDL

Поддержка ADOX не гарантируется каким-либо конкретным поставщиком ADO, и уровень поддержки ADOX может варьироваться, даже если он доступен.Но для MS Access и MS SQL Server, я думаю, вы найдете все возможности, которые вам требуются (и, возможно, даже больше!)

1 голос
/ 18 января 2011

У меня была такая же проблема. Я решил применить препроцессор C к SQL перед его выполнением. Препроцессор включает макросы для обработки разных БД.

Stefano

0 голосов
/ 18 января 2011
...