Usuário com melhor resposta
Criar Banco Dados Access com VB.NET

Pergunta
-
Boa tarde!
Preciso criar um Banco de Dados Access em tempo de execução. Fiz algumas pesquisas e encontrei o artigo do Macoratti.
http://www.macoratti.net/vbn_adox.htm
O problema é quando vai executar o comando Catalogo.Create da o erro "Classe não registrada".
Dim Catalogo As New ADOX.Catalog Try Catalogo.Create("Provider=Microsot.Jet.OLEDB.4.0; Data Source=" & BancoDados_Pasta & BancoDados_Nome & ".mdb;") Catch ex As Exception End Try
O que tenho que fazer?
Obrigado!
Respostas
-
Assim funciona:
Imports ADOX
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim catalogo As Catalog = New Catalog()
Try
catalogo.Create("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb;Jet OLEDB:Engine Type=5")
MessageBox.Show("Banco de dados - Macoratti.mdb - criado com sucesso .")
Catch
MessageBox.Show("Erro ao tentar criar o Banco de dados - Macoratti.mdb.")
Finally
catalogo = Nothing
End Try
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim jro As JRO.JetEngine
jro = New JRO.JetEngine()
Try
jro.CompactDatabase("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb", "Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Novo_Macoratti.mdb;Jet OLEDB:Engine Type=5")
MessageBox.Show(" Banco de dados foi compactado com sucesso.")
Catch
MessageBox.Show(" Erro ao compactar o Banco de dados.")
End Try
End Sub
End Class
- Sugerido como Resposta Mr. GMSOFT quinta-feira, 30 de outubro de 2014 19:03
- Editado Mr. GMSOFT quinta-feira, 30 de outubro de 2014 19:05
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 31 de outubro de 2014 16:46
Todas as Respostas
-
-
Fiz somente a 2ª referencia como explica o artigo do Macoratti. A aplicacao estava compilando Any CPU, mas como estou usando plataforma 64, configurei para compilar em X86, mas mesmo assim nao deu certo.
Fiz a referencia que voce solicitou, mas nada feito, continua com o mesmo erro.
Obrigado!
-
-
-
-
Acabei de seguir passo a passo no link do Macoratti e funcionou sem problemas, as referências são essas para serem adicionadas:
Microsoft Jet and Replication objects 2.x Library
Microsoft ADO Ext. 2.7 for DDL and Security
- Editado Mr. GMSOFT quinta-feira, 30 de outubro de 2014 16:49
-
-
Cara acho que você deve ter esquecido algum detalhe, minha maquina é x64 e tenho outra x86 e todas as duas funcionaram sem problemas, sugiro que reveja e compare o que você fez com o do Tutorial do Macoratti, segue trecho do meu código:
CompactaBaseAccess:
Module Module1
Sub Main()
Dim jro As JRO.JetEngine
jro = New JRO.JetEngine()
Try
jro.CompactDatabase("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb", "Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Novo_Macoratti.mdb;Jet OLEDB:Engine Type=5")
Console.WriteLine(" Banco de dados foi compactado com sucesso.")
Catch e As Exception
Console.WriteLine(" Erro ao compactar o Banco de dados.")
Console.WriteLine(e.Message)
End Try
End Sub
End Module
CriaBaseAccess
Imports ADOX
Module Module1
Sub Main()
Dim catalogo As Catalog = New Catalog()
Try
catalogo.Create("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb;Jet OLEDB:Engine Type=5")
Console.WriteLine("Banco de dados - Macoratti.mdb - criado com sucesso .")
Catch e As Exception
Console.WriteLine("Erro ao tentar criar o Banco de dados - Macoratti.mdb.")
Console.WriteLine(e.Message)
Finally
catalogo = Nothing
End Try
End Sub
End Module -
-
Assim funciona:
Imports ADOX
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim catalogo As Catalog = New Catalog()
Try
catalogo.Create("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb;Jet OLEDB:Engine Type=5")
MessageBox.Show("Banco de dados - Macoratti.mdb - criado com sucesso .")
Catch
MessageBox.Show("Erro ao tentar criar o Banco de dados - Macoratti.mdb.")
Finally
catalogo = Nothing
End Try
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim jro As JRO.JetEngine
jro = New JRO.JetEngine()
Try
jro.CompactDatabase("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb", "Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Novo_Macoratti.mdb;Jet OLEDB:Engine Type=5")
MessageBox.Show(" Banco de dados foi compactado com sucesso.")
Catch
MessageBox.Show(" Erro ao compactar o Banco de dados.")
End Try
End Sub
End Class
- Sugerido como Resposta Mr. GMSOFT quinta-feira, 30 de outubro de 2014 19:03
- Editado Mr. GMSOFT quinta-feira, 30 de outubro de 2014 19:05
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 31 de outubro de 2014 16:46
-
Mas esta idêntico, vc não mudou absolutamente nada. Tive o cuidado de checar letra a letra. E tem outra questão que temos que analisar. O erro é "Classe nao Registrada", portanto não esta acusando erro na sintaxe.
Mas de qualquer forma, agradeço!
-
rsrs não esta idêntico não, o erro que acusa é a declaração Catch ex As Exception veja se tem isso no meu código ou melhor copia meu código e coloca na sua aplicação
- Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 31 de outubro de 2014 16:46
-
Eu me referi ao comando propriamente:
catalogo.Create("Provider=Microsot.Jet.OLEDB.4.0;Data Source=C:\Macoratti.mdb;Jet OLEDB:Engine Type=5")
é nessa linha que ocorre o erro e vai pro Catch, agora se no Catch eu crio uma variável para receber a exception ou não, isso não vai corrigir o erro. Mas pra desencargo de consciência eu testei, o erro ocorre mas não tenho uma variável para receber o erro.
Obrigado!
-
Bom dia Davi,
Estou enfrentando o mesmo problema ao tentar compactar um banco Access, usando VS 2010 com VB.NET.
System.Runtime.InteropServices.COMException (0x80040154): Class not registered at JRO.IJetEngine.CompactDatabase
Nas máquinas que tem Visual Studio funciona, mas naquelas sem VS ocorre este erro. tanto em Win32 quanto 64 bits.
Você conseguiu resolver este problema?
Obrigado!
-
Instala o office Tools runtime 2010
O código postado por mim funciona, eu mesmo testei e rodou sem problemas ,mais o dono da Thread não mais retornou, faz o teste e veja se funciona para você
-
Não funcionou novamente. Minha aplicação é Windows Forms e TARGET CPU é X86.
Instalei o Office Tools Runtime, MDAC 2010 e MDAC 2007. Uso VS 2010 com .NET Framework 4.0. Adicionei referência COM para o JRO e ADO 2.8.
O código é:
Dim JRO As JRO.JetEngine
JRO = New JRO.JetEngine
Try
Dim source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + arq + ";Jet OLEDB:Database Password=123;"
Dim compact = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + arqC + ";Jet OLEDB:Database Password=123;Jet OLEDB:Engine Type=5"
JRO.CompactDatabase(source, compact)
Catch
MessageBox.Show(" Erro ao compactar o Banco de dados.")
End Try
O erro que retorna está listado abaixo.
************** Exception Text **************
System.Runtime.InteropServices.COMException (0x80040154): Class not registered
at JRO.IJetEngine.CompactDatabase(String SourceConnection, String Destconnection)
at Compactador.frmPrincipal.btCompactar_Click_1(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Compactador
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/WIN7/AppData/Local/Apps/2.0/5D5YO74E.RNG/VG4MZ6LA.P09/comp..tion_076b1fdd1315bb3a_0001.0000_129f1944a926565b/Compactador.exe
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 10.0.0.0
Win32 Version: 10.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
-
-
-
Esses arquivos utilizam outro tipo de provider ao invés de JET usa o ACE, veja aqui nessa Thread
- Editado Mr. GMSOFT segunda-feira, 26 de janeiro de 2015 17:30
-
-
Só vi agora, ,mais provavelmente esta faltando nas maquina isso aqui veja se vai instalar a versão 64bits ou 32bits, caso não funcione posta a tela do erro
- Editado Mr. GMSOFT segunda-feira, 26 de janeiro de 2015 17:52
-
Tentei por 2 caminhos:<o:p></o:p>
- Dim JRO As Object :
JRO = CreateObject("JRO.JetEngine")- Dim dbEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
dbEngine.CompactDatabase(arq, arqC)Nos usuários instalei o MDAC 2010 e o MDAC 2007. Consegue compactar arquivos MDB, mas dá erro para ACCDB. Nas máquinas com VS 2010 compacta os 2 formatos.<o:p></o:p>
O erro que retorna é:<o:p></o:p>
************** Exception Text **************
System.Runtime.InteropServices.COMException (0x80004005): Cannot open database ''. It may not be a database that your application recognizes, or the file may be corrupt.
at Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack, Boolean IgnoreReturn)
at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn)
at Compactador.frmPrincipal.btCompactar_Click_1(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)<o:p></o:p>
-
-
-
Consegui fazer funcionar, mas foi necessário no PC com Windows 7 64 bits e Office 2013 64 bits, instalar o MDAC 2010 versão 32 bits. Para isto basta rodar via linha de comando com o parâmetro /passive.
Só que isto gera outros problemas, pois as aplicações 64 bits que precisam do MDAC 64 deixam de funcionar.
-
Ai nesse caso vai ter que obter a versão do sistema operacional e instalar conforme x64 ou x86
- Sugerido como Resposta Claudio Siviero terça-feira, 30 de agosto de 2016 01:23
- Não Sugerido como Resposta Claudio Siviero terça-feira, 30 de agosto de 2016 01:23
- Sugerido como Resposta Claudio Siviero terça-feira, 30 de agosto de 2016 01:23
- Não Sugerido como Resposta Claudio Siviero terça-feira, 30 de agosto de 2016 01:23
-
Solucionei o problema de classe não registrada ao criar o banco de dados no windows 64 bits da seguinte maneira:
Alterei a Opção nas propriedades do projeto
Em: "ADVANCE COMPILE OPTION" e coloquei em "TARGET CPU" = x86
Outro problema relacionado que tive foi que ao criar o Banco de dados ele ficava bloqueado para renomear,
deletar etc liberando somente quando fechava o aplicativo que o criou,
como solução fiz um modulo console externo com o DSN como parametro para criar o banco de dados
sendo chamado pelo aplicativo principal, podendo assim ser excluido se necessário antes de fechar o aplicativo que o criou.