Как создать базу данных Access из скрипта - PullRequest
3 голосов
/ 01 октября 2010

Я хотел бы создать базу данных Access из скрипта.В идеале мне бы хотелось что-то похожее на способ использования сценариев SQL для создания базы данных SQL.

Возможно ли это вообще?Есть ли что-нибудь, что использовало бы сценарии SQL, которые у меня уже есть?Я хочу создать ту же структуру базы данных, что и моя база данных SQL.

Дайте мне знать, если вам нужно, чтобы я что-то прояснил.Спасибо.

Ответы [ 2 ]

1 голос
/ 13 октября 2010

Я закончил с моим собственным решением.Я не мог заставить ни одного из первых двух работать очень хорошо.Я создал два исполняемых файла: один для создания базы данных и один для запуска сценариев.

Для приложения, создающего базу данных, я добавил ссылку на COM «Microsoft ADO Ext. 2.8 для DDL и безопасности».Код на самом деле довольно прост: (замените «test.mdb» на правильный путь к файлу для вашего файла.)

Dim cat As ADOX.Catalog = New ADOX.Catalog()
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Jet OLEDB:Engine Type=5")

Для запуска скриптов я создал простой парсер для чтения и запуска «Скрипты доступа».».Эти сценарии основаны на сценариях SQL, поскольку они предоставляют список команд для запуска.Например, сценарий может быть определен как:

--Create the table.
CREATE TABLE [Test] ([ID] Number, [Foo] Text(255))

--Add data to the table.
INSERT INTO [Test] ([ID], [Foo]) VALUES (1, 'Bar')

Вот код для анализатора.(Замените «test.mdb» на правильный путь к файлу для вашего файла.)

Dim textStream = File.OpenText(scriptPath)
Dim lines As List(Of String) = New List(Of String)
While textStream.Peek() <> -1
    lines.Add(textStream.ReadLine())
End While
textStream.Close()

Dim connection As OleDb.OleDbConnection = New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb")
connection.Open()
For Each line As String In lines
    If Not String.IsNullOrEmpty(line) Then
        If Not line.StartsWith("--") Then
            Dim dbCommand = New OleDb.OleDbCommand(line, connection)
            dbCommand.ExecuteNonQuery()
        End If
    End If
Next
connection.Close()

Это решение хорошо работает и его довольно просто реализовать.

0 голосов
/ 01 октября 2010

Можно создать базу данных доступа с помощью кода, либо с помощью инструкций DDL, либо путем манипулирования объектами ADO или DAO.

Я сомневаюсь, что код DDL T-SQL может пригодиться для создания базы данных Access: многие инструкции не будут поняты в Access, от типов полей до индексов и ограничений.

Одним из вариантов будет использование соединений ADODB для подключения как к исходной базе данных SQL, так и к вновь созданной базе данных Access (см. #Предложение HansUp) и использовать объектную модель ADOX.После этого вы сможете «читать» базу данных SQL (т.е. каталог ADOX) и ее объекты и воссоздавать объекты со «похожими» свойствами на стороне доступа: таблицы, поля, индексы, отношения и т. Д.

Нечто подобное можно было бы сделать с объектной моделью DAO, но я думаю, с ADOX это будет проще.

Другой вариант - проверить, могут ли существующие программы справиться с задачей.EMS SQL Manager является опцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...