2010-09-30 29 views
3

我想從腳本創建Access數據庫。理想情況下,我會喜歡類似於SQL腳本可用於創建SQL數據庫的方式。如何從腳本創建Access數據庫

這可能嗎?有什麼可以利用我已有的SQL腳本嗎?我想創建與我的SQL數據庫相同的數據庫結構。

讓我知道你是否需要我澄清任何事情。謝謝。

+0

我沒有忽略我的問題。我只有更優先的工作項目。一旦我開始實施這個,我會選擇幫助我的答案。 – Jeremy 2010-10-06 13:01:03

回答

1

我最終用自己的解決方案。我無法讓前兩者工作得很好。我創建了兩個可執行文件:一個用於創建數據庫,另一個用於運行腳本。

對於創建數據庫的應用程序,我添加了COM參考「Microsoft ADO Ext。2.8 for DDL and Security」。該代碼其實很簡單:(更換「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

可以通過代碼創建訪問數據庫,或者通過操作ADO或DAO對象的DDL指令來創建訪問數據庫。

我懷疑DDL T-SQL代碼可以用來創建一個Access數據庫:在Access中,從字段類型到索引和約束,很多指令都不會被理解。

一種選擇是使用ADODB連接來連接原始SQL數據庫和新創建的Access數據庫(請參閱#HansUp提議),並使用ADOX對象模型。然後,您將能夠「讀取」SQL數據庫(即ADOX目錄)及其對象,並在Access端使用「類似」屬性重新創建對象:表格,字段,索引,關係等。

Something DAO對象模型也可以做類似的工作,但我想ADOX會更容易。

另一種選擇是檢查現有軟件是否可以做到這一點。 EMS SQL管理器是一個選項。