Como criar a base de dados de acesso a partir de um script

Eu gostaria de criar uma base de dados de acesso a partir de um script. Idealmente, eu gostaria de algo semelhante à forma como os scripts SQL podem ser usados para criar um banco de dados SQL.

Isto é possível? Há alguma coisa que possa alavancar os scripts SQL que eu já tenho? Quero criar a mesma estrutura de banco de dados que a minha base de dados SQL.

Avisa-me se precisares que esclareça alguma coisa. Obrigado.

Author: Jeremy, 2010-10-01

2 answers

Acabei por escolher a minha própria solução. Não consegui que nenhum dos dois primeiros funcionasse muito bem. Criei dois executáveis: um para criar o banco de dados e outro para executar scripts.

Para a aplicação que cria a base de dados, adicionei a referência COM "Microsoft ADO Ext. 2.8 para o DDL e a segurança". O código é realmente bastante simples: (substituir "teste.mdb " com o caminho de arquivo adequado para o seu arquivo.)

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

Para executar os scripts, criei um simples analisador para ler e executar "Access scripts". Estes scripts são baseados em scripts SQL, em que eles fornecem uma lista de comandos para executar. Por exemplo, um script pode ser definido como:

--Create the table.
CREATE TABLE [Test] ([ID] Number, [Foo] Text(255))

--Add data to the table.
INSERT INTO [Test] ([ID], [Foo]) VALUES (1, 'Bar')
Aqui está o código para o analisador. (Substituir " teste.mdb " com o caminho de arquivo adequado para o seu arquivo.)
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()

Esta solução funciona bem e foi muito simples de implementar.

 1
Author: Jeremy, 2010-10-13 15:58:52

É possível criar uma base de dados de acesso por código, com instruções DDL de manipulação de objetos ADO ou DAO.

Duvido que o código DDL T-SQL possa ser de qualquer utilidade para criar uma base de dados de acesso: muitas instruções não serão entendidas no acesso, desde tipos de Campos a Índices e restrições.

Uma opção seria usar as ligações do ADODB para ligar tanto à base de dados SQL original como à recém-criada base de dados Access (ver proposta #HansUp), e usar o ADOX Modelo De Objecto. Poderá então " ler "a base de dados SQL (ou seja, o catálogo ADOX) e os seus objectos e recriar objectos com propriedades "semelhantes" do lado do acesso: tabelas, campos, índices, relações, etc.

Algo similar poderia ser feito com o modelo objeto Dao, mas acho que será mais fácil com o ADOX.

Outra opção seria verificar se softwares existentes podem fazer o truque. EMS SQL Manager é uma opção.

 0
Author: Philippe Grondier, 2010-10-01 08:05:26