2010-09-30 3 views
3

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

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

Сообщите мне, если мне нужно что-то разъяснить. Благодарю.

+0

Я не проигнорировал свой вопрос. Я просто работаю с более приоритетными задачами. Как только я начну реализовывать это, я выберу ответ, который мне помог. – Jeremy

ответ

1

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

Для приложения, которое создает базу данных, я добавил ссылку 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

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

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

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

Что-то аналогичное может быть сделано с DAO Object Model, но я думаю, что с ADOX будет проще.

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