如何从脚本创建Access数据库

3

我想从脚本创建一个Access数据库。理想情况下,我希望能够类似于使用SQL脚本创建SQL数据库的方式创建数据库。

这是否有可能?是否有任何东西可以利用我已经拥有的SQL脚本?我想要创建与我的SQL数据库相同的数据库结构。

如果需要澄清任何事情,请告诉我。谢谢。


我并没有忽略我的问题。只是有更优先的工作要处理。一旦我开始实现这个,我会选择帮助我的答案。 - Jeremy
2个回答

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")

为了运行这些脚本,我创建了一个简单的解析器来读取和运行“Access脚本”。这些脚本基于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目录)及其对象,并在Access侧重新创建具有“类似”属性的对象:表、字段、索引、关系等。

使用DAO对象模型也可以完成类似的操作,但我认为使用ADOX会更容易。

另一种选择是检查现有软件是否可以完成此操作。EMS SQL Manager是一个选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接