 DAO
Revisitado - Perguntas e Respostas !
DAO
Revisitado - Perguntas e Respostas !1-) Como eu posso saber qual versão da DAO minha aplicação esta usando ?
Basta usar o código:
Dim strversao as string
strversao = DBEngine.Version ==> a variável strversao irá conter a versão da DAO utilizada
2-) Qual é a mais nova versão da DAO ?
A última versão atualizada para a DAO é a 3.6 - Microsoft DAO 3.6 Object Library.
3-) Por que a DAO 3.5 não funciona no Windows 95 ?
a-)Você deve copiar o arquivo OLEAUT32.DLL ( 2.20.4054 ou superior) para o diretórios SYSTEM e registrár este arquivo assim:
REGSVR32.EXE OLEAUT32.DLL
b-) Defina um valor para a variável de ambiente TEMP
c-) Você deve ter instalado a livraria EXPSRV.DLL requerida por VBAJET32.DLL.
4-) Quais drivers ISAM DAO estão disponíveis em meu computador ?
Execute o programa REGEDIT.EXE e procure pela seguintes entradas no registro:
MyComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\ISAM Formats => para versão 3.5X
MyComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\ISAM Formats => para versão 3.6
abaixo o resultado para a versão presente em minha máquina

5-) Onde conseguir informações sobre a DAO ?
O arquivo DAO35.HLP presente no diretório :
C:\Arquivos de programas\Arquivos comuns\Microsoft Shared\DAO ou
(C:\Program Files\Common Files\Microsoft Shared\DAO) contém um Help em português(parcial) sobre a ADO:

Abaixo alguns links onde você pode obter mais informações sobre a DAO:
microsoft.public.vb.database.dao at msnews.microsoft.com
ACC97: CommitTrans Help Topic Uses dbFlushOSCacheWrites Constant
HOWTO: Redistributing DAO with Your Visual C++ 5.0 Application
PRB: Error "The Jet VBA File... Failed to Initialize When Called"
http://premium.microsoft.com/msdn/library/backgrnd/html/msdn_jetlock.htm
6-) Como criar um novo arquivo de banco de dados Access com a DAO ?
Para criar um banco de dados Access usamos o método CreateDatabase
| Dim wrkDefault As Workspace Dim dbNovo As Database Dim prpLoop As Property Set wrkDefault = DBEngine.Workspaces(0) ' Verificar se já não existe o arquivo. If Dir("NovoDB.mdb") <> "" Then Kill "NovoDB.mdb" ' Cria um novo banco de dados Encriptado. Set dbNovo = wrkDefault.CreateDatabase("NovoDB.mdb", dbLangGeneral, dbEncrypt) With dbNovo Debug.Print "Propriedades de " & .Name ' Enumera as propriedades do novo Banco de dados criados. For Each prpLoop In .Properties If prpLoop <> "" Then Debug.Print " " & prpLoop.Name & " = " & prpLoop Next End With dbNovo.Close | 
notas:
dbLangGeneral é valido para : Inglês,Alemão,
Francês, Português, Italiano ,e Espanhol
Para o Russo a constante é  dbLangCyrillic  
, para o Arabé é dbLangArabic  , etc...
As constantes possíveis são:
| Constante | Descrição | 
| dbEncrypt | Encripta o banco de dados | 
| dbVersion10 | Cria um banco de dados no formato Microsoft Jet 1.0 | 
| dbVersion20 | Cria um banco de dados no formato Microsoft Jet 2.0 | 
| dbVersion30 | Cria um banco de dados no formato Microsoft Jet 3.0 | 
| dbVersion40 | Cria um banco de dados no formato Microsoft Jet 4.0 | 
7-) Como compactar um banco de dados Access usando a DAO
Para compactar um banco de dados Access usamos o método CompactDatabase
| Dim dbNovo As Database 'abre o banco de dados da versão 2.0 do Jet Set dbsNorthwind = OpenDatabase("Nwind20.mdb") ' verifica se já existe o arquivo com o nome que vamos usar If Dir("Nwind30.mdb") <> "" Then Kill "Nwind30.mdb" ' Compacta , encripta e altera a versão do Jet 2.0 para versão 3.o do Jet DBEngine.CompactDatabase "Nwind20.mdb", "Nwind30.mdb", , dbEncrypt + dbVersion30 Set dbNovo = OpenDatabase("Nwind30.mdb") | 
Obs: Para um arquivo protegido com senha use o seguinte código:
 DBEngine.CompactDatabase "Nwind20.mdb", "Nwind30.mdb", , dbEncrypt + dbVersion30
,";pwd=Senha"
Leia também o artigo : Compactando um banco de dados - DAO e ADO
8-) Quais as limitações de um banco de dados da versão MS Access 97 - Versão 3.5X ?
- Tamanho máximo do arquivo mdb => 1GB
- Número máximo de objeto em um banco de dados => 32768
- Comprimento máximo para o nome de um objeto => 64
- Comprimento da Senha => 14
- Comprimento máximo para nomes de usuários e grupos => 20
- Número máximo de usuários conectados ao banco de dadaos => 255
- Comprimento máximo do registro => 2048
- Número máximo de campos na tabela => 255
- Número máximo de transações aninhadas => 7
9-) Como visualizar as tabelas existentes em um banco dados Access usando DAO ?
| Dim db AS DAO.Database Dim Tabela AS DAO.TableDef 
 Set db = DBEngine.OpenDatabase("c:\teste\biblio.mdb") 
 For Each tabela in db.TableDefs List1.additem Tabela.Name Next | 
| Lista todas as tabelas e as consultas ( incluse tabelas do sistema) exibindo-as em uma caixa de listagem | 
10-) Como criar um tabela usando ADO ?
| Dim db AS DAO.Database Dim Tabela AS DAO.TableDef 
 Set db = DBEngine.OpenDatabase("c:\teste\biblio.mdb") 
 'Vamos criar um novo objeto tabela : a tabela Clientes Set Tabela = db.CreateTableDef("Clientes") 
 With Tabela 'vamos criar os campos no objeto TableDef e depois adicionar o objeto Tabela coleção de tabelas 'A sintaxe é : CreateField(nome_do_campo, tipo_de_dados, tamanho_campo) .Fields.Append .CreateField("Nome", dbText, 50) .Fields.Append .CreateField("Endereco", dbText , 50) .Fields.Append .CreateField("Telefone", dbText, 50) End With 
 'agora inclua a nova tabela no banco de dados db.TableDefs.Append Tabela db.Close | 
| Cria a tabela Clientes no banco de dados Biblio.mdb com três campos: Nome, Endereco e Telefone | 
11-) Como criar um índice usando DAO ?
| Dim db AS DAO.Database Dim Tabela AS DAO.TableDef Dim Indice AS DAO.Index 
 Set db = DBEngine.OpenDatabase("c:\teste\biblio.mdb") Set Tabela = db.TableDefs("Clientes") 
 'cria o objeto Index e inclui o objeto Field Nele: O nome do índice será NomeIdx Set Indice=Tabela.CreateIndex("NomeIdx") Indice.FieldsAppend Indice.CreateField("Nome") 
 'Inclui o objeto na coleção de índices Tabela.Indexes.Append Indice db.Close | 
| Cria o índice NomeIdx para o campo Nome na tabela Clientes do banco de dados Biblio.mdb | 
12-) Como criar um consulta usando DAO ?
| Dim db AS DAO.Database Dim Consulta AS DAO.QueryDef 
 Set db = DBEngine.OpenDatabase("c:\teste\biblio.mdb") 
 'cria a consulta TodosNomes Set Consulta = db.CreateQueryDef("TodosNomes","Select * From Clientes") db.Close | 
| Cria a consulta de nome TodosNomes no banco de dados Biblio.mdb que retorna todos os registros da tabela Clientes | 
13-) Fechando todos os objetos de banco de dados abertos .
Para fechar todos os objetos DAO (recordsets, databases, Workspaces) antes de sair da sua aplicação ponha o código abaixo no evento Unload do formulário de saida:
| Private Sub Form_Unload(Cancel As Integer)
    On Error Resume Next
    '
    Dim ws As Workspace
    Dim db As Database
    Dim rs As Recordset
    '
    For Each ws In Workspaces
        For Each db In ws.Databases
            For Each rs In db.Recordsets
                rs.Close
                Set rs = Nothing
            Next
            db.Close
            Set db = Nothing
        Next
        ws.Close
        Set ws = Nothing
    Next
    '
End Sub | 
14-) Criando uma chave primária em um banco de dados Access via Código.
O codigo abaixo abre o arquivo Biblio.mdb e cria a chave primária para o campo Codigo da tabela Clientes dando a ela o nome de CodigoID.
| Private Sub CriaChavePrimaria()                                                       
  
Dim dbDatabase As Database
Dim dbOpened  As Database
Dim DatabasePath  as string
Dim PrimaryKey As New Index
      ' abre o banco de dados
   DatabasePath = "c:\diretorio\arquivo.mdb"    ' aqui voce informa o caminho e o nome do seu banco de dados
   Set dbOpened = OpenDatabase(DatabasePath, False, False )
  
   Set dbDatabase = dbOpened
   Set dbOpened = Nothing
                                                    
   ' Inclui a chave primária
                                                    
   BeginTrans
 
   PrimaryKey.Name = "CodigoID" 
   PrimaryKey.Fields = "Codigo"
  
   PrimaryKey.Unique = True
   PrimaryKey.Primary = True
   dbDatabase.TableDefs("Clientes").Indexes.Append PrimaryKey
   
   DoEvents
   CommitTrans
    
   dbDatabase.close                                                          
   Set dbDatabase = Nothing
End Sub | 
15-) Como criar um banco de dados e depois tabelas e campos ?
Abaixo o código que recebe o caminho e nome do banco de dados a criar e logo apos criar o arquivo MDB cria uma tabela chamada Exemplo com dois campos : Nome e Endereco.
| Private Sub CriaDB(sDBCaminho As String)
    Dim tdExemplo As TableDef
    Dim fldNome As Field
    Dim fldEndereco As Field
    Dim dbDatabase As Database
    ' Define o novo banco de dados ( nome e caminho)
    ' Cria um arquivo .MDB vazio
    Set dbDatabase = CreateDatabase(sDBCaminho, dbLangGeneral, dbEncrypt)
    ' Cria uma nova tabela chamada Exemplo
    Set tdExemplo = dbDatabase.CreateTableDef("Exemplo")
    ' Inclui campos na tabela.
    Set fldNome = tdExemplo.CreateField("Nome", dbText, 20)
    Set fldEndereco = tdExemplo.CreateField("Endereco", dbText, 20)
    ' Inclui os campos no objeto TableDef
    tdExemplo.Fields.Append Nome
    tdExemplo.Fields.Append Endereco
    ' Salva as definições na colecao  TableDefs 
    dbDatabase.TableDefs.Append tdExemplo
    MsgBox "Arquivo MDB criado com sucesso !  "
End Sub | 
16-) Como criar um campo autonumeração em um tabela de um banco de dados Access ?
Para criar um campo Autonumeração , devemos criar um campo do tipo Long e , usando a propriedade Attributes definir a propriedade dbAutoinc...
17-) Como conseguir informações sobre a DAO ?
A Knowledge Base da Microsoft traz uma relação de artigos sobre correções , problemas, exemplos, etc... Vale a pena consultar. Abaixo damos uma relação de links da Knowledge Base relacionados com a DAO:
Até o próximo artigo.
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique 
	e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? | 
 Gostou ?   Compartilhe no Facebook
Compartilhe no Facebook 
  
 Compartilhe no Twitter
 
 
Compartilhe no Twitter
 
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação 
Orientada a Objetos com VB .NET

Programando o sistema de segurança do Access - Macoratti ...