Como criar um banco de dados Access usando VBA
- Última atualização em 17 Fevereiro 2012
- Acessos: 16710
Recentemente tive razão para criar um banco de dados via programação, caso ele não existisse. Como a solução me levou algumas tentativas e erro e alguma pesquisa (e, em seguida, mais tentativa e erro), eu decidi compartilhar o método para fazer isso. A rotina a seguir criará um banco de dados a partir de qualquer aplicativo com VBA, tais como Word, Excel, Outlook, etc .
Sobre o Exemplo: O exemplo a seguir cria um banco de dados na raiz do drive C:, usando seu Nome de Usuário do MS Office. Ele também cria uma nova tabela "tblSample" com seis campos nele. A parte mais interessante sobre isso é que o código abaixo, na verdade, gira em torno da configuração de compactação Unicode. Por que isso é importante?
Com Compressão Unicode desligado, o Access pad todas as entradas de campo com espaços à direita do número máximo de caracteres no campo. Isso economiza espaço no banco de dados, uma vez que esses espaços não são armazenados. Sem compressão Unicode ativado, você provavelmente precisará Trim (remover espaços) de todos os valores de campo que trabalham com no código.
Compressão Unicode é, por padrão, ativada quando você criar uma tabela através da interface do usuário no Access. É desativado por padrão, porém, quando você cria uma tabela usando a instrução SQL de CREATE TABLE. A "With Compression" (ou "Com Comp") permite a configuração de compressão Unicode em campos de seu banco de dados. O que eu achei realmente interessante sobre essa bandeira, porém, é que ele só funciona quando você envia sua declaração SQL a partir de uma conexão ADO. Eu prefiro testar todos os meus SQL através da interface do usuário de acesso antes que eu puxe-o em código VBA, então isso realmente me jogou para um laço por um bom tempo.
Código necessário: O código abaixo vai em um módulo padrão. Não se esqueça de definir uma referência para o Microsoft ActiveX Data Objects Library. O código a seguir foi desenvolvido usando a versão 2.8.
NOTA: Não há manipulação de erro nessa rotina. Executá-lo mais de uma vez irá resultar em um erro sobre a base de dados já está sendo criado.
Private Sub CreateDatabase() 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: Create an Access database on the fly Dim dbConnectStr As String Dim Catalog As Object Dim cnt As ADODB.Connection Dim dbPath As String 'Set database name here dbPath = "C:\" & Application.UserName & ".mdb" dbConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";" 'Create new database Set Catalog = CreateObject("ADOX.Catalog") Catalog.Create dbConnectStr Set Catalog = Nothing 'Connect to database and insert a new table Set cnt = New ADODB.Connection With cnt .Open dbConnectStr .Execute "CREATE TABLE tblSample ([Name] text(50) WITH Compression, " & _ "[Address] text(150) WITH Compression, " & _ "[City] text(50) WITH Compression, " & _ "[ProvinceState] text(2) WITH Compression, " & _ "[Postal] text(6) WITH Compression, " & _ "[Account] decimal(6))" End With Set cnt = Nothing End Sub