2011-01-18 2 views
4

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

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

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

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

ответ

3

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

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

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

+0

Можете ли вы предложить учебник или что-то в использовании ADOX с Delphi. Я пытаюсь связать тип libarary, но имел конфликты на TTable и обнаружил, что TCatalog не раскрывает методы, которые мне нужны (например, возможность установить строку соединения). У меня было больше успеха с использованием CreateOLEObject, но у меня был отказ в разрешении на базу данных SQL Server (несмотря на то, что я могу выдать эквивалентный DDL с той же строкой соединения). –

1

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

Stefano

3

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

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

+0

Я посмотрю на dbExpress, но я уже прошел довольно далеко по дороге с ADO в этом проекте. BTW, поддерживает ли dbExpress JET? –

+0

Я не знаю, если это так или нет. –