我想从脚本创建Access数据库。理想情况下,我会喜欢类似于SQL脚本可用于创建SQL数据库的方式。
这有可能吗?有没有什么可以利用我已经拥有的SQL脚本?我想创建与SQL数据库相同的数据库结构。
如果您需要我澄清任何事情,请告诉我。感谢。
答案 0 :(得分: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()
此解决方案效果很好,实现起来非常简单。
答案 1 :(得分:0)
可以通过代码创建访问数据库,使用DDL指令操作ADO或DAO对象。
我怀疑DDL T-SQL代码可以用于创建Access数据库:Access中不会理解大量指令,从字段类型到索引和约束。
一种选择是使用ADODB连接将两者连接到原始SQL数据库和新创建的Access数据库(请参阅#HansUp提议),并使用ADOX对象模型。然后,您将能够“读取”SQL数据库(即ADOX目录)及其对象,并在Access端重新创建具有“相似”属性的对象:表,字段,索引,关系等。
使用DAO对象模型可以做类似的事情,但我想用ADOX会更容易。
另一种选择是检查现有软件是否可以解决问题。 EMS SQL Manager是一个选项。