Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何从脚本创建Access数据库_Database_Ms Access_Scripting_Creation - Fatal编程技术网

Database 如何从脚本创建Access数据库

Database 如何从脚本创建Access数据库,database,ms-access,scripting,creation,Database,Ms Access,Scripting,Creation,我想从脚本创建Access数据库。理想情况下,我喜欢类似于使用SQL脚本创建SQL数据库的方式 这可能吗?是否有任何东西可以利用我已有的SQL脚本?我想创建与SQL数据库相同的数据库结构 如果你需要我澄清什么,请告诉我。谢谢。可以通过代码创建access数据库,可以使用的DDL指令通过操作ADO或DAO对象 我怀疑DDL T-SQL代码能否用于创建Access数据库:从字段类型到索引和约束,Access中有很多指令都无法理解 一种选择是使用ADODB连接连接到原始SQL数据库和新创建的Acces

我想从脚本创建Access数据库。理想情况下,我喜欢类似于使用SQL脚本创建SQL数据库的方式

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


如果你需要我澄清什么,请告诉我。谢谢。

可以通过代码创建access数据库,可以使用的DDL指令通过操作ADO或DAO对象

我怀疑DDL T-SQL代码能否用于创建Access数据库:从字段类型到索引和约束,Access中有很多指令都无法理解

一种选择是使用ADODB连接连接到原始SQL数据库和新创建的Access数据库(请参见#HansUp提案),并使用ADOX对象模型。然后,您将能够“读取”SQL数据库(即ADOX目录)及其对象,并在访问端重新创建具有“相似”属性的对象:表、字段、索引、关系等

DAO对象模型也可以做类似的事情,但我想使用ADOX会更容易


另一个选择是检查现有的软件是否可以做到这一点。EMS SQL Manager是一种选择。

我最终选择了自己的解决方案。我无法让前两个中的任何一个工作得很好。我创建了两个可执行文件:一个用于创建数据库,另一个用于运行脚本

对于创建数据库的应用程序,我添加了COM参考“Microsoft ADO Ext.2.8 For DDL and Security”。代码实际上非常简单:(将“test.mdb”替换为文件的正确文件路径。)

为了运行脚本,我创建了一个简单的解析器来读取和运行“访问脚本”。这些脚本基于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(脚本路径)
按列表(字符串的)调整行的尺寸=新列表(字符串的)
而textStream.Peek()-1
lines.Add(textStream.ReadLine())
结束时
textStream.Close()
Dim连接为OleDb.OleDbConnection=新的OleDb.OleDbConnection(“提供程序=Microsoft.Jet.OleDb.4.0;数据源=test.mdb”)
connection.Open()
将每一行作为行中的字符串
如果不是String.IsNullOrEmpty(行),则
如果不是line.StartsWith(“--”),则
Dim dbCommand=新的OleDb.OleDbCommand(线路、连接)
dbCommand.ExecuteNonQuery()
如果结束
如果结束
下一个
连接。关闭()

此解决方案运行良好,实现起来非常简单。

我没有忽略我的问题。我只是有更优先的工作项目。一旦我开始实施,我将选择帮助我的答案。
--Create the table.
CREATE TABLE [Test] ([ID] Number, [Foo] Text(255))

--Add data to the table.
INSERT INTO [Test] ([ID], [Foo]) VALUES (1, 'Bar')
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()