2010-09-30 83 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管理器是一个选项。