Exemplos de conversão de código DAO


O Microsoft Access inclui a versão 4.0 do mecanismo de banco de dados Microsoft Jet e a biblioteca de objetos DAO 3.6. Todas as versões anteriores do DAO não têm mais suporte no Microsoft Access 2000. Os exemplos a seguir demonstram como converter construções de código em bancos de dados do Microsoft Access criados com versões anteriores do mecanismo de banco de dados Jet e bibliotecas de objetos DAO.

Observação  Essa informação é fornecida somente como referência. As versões do código DAO anteriores à 3.6 não têm mais suporte no Access 2000. Sugerimos que você use os métodos ADO de acesso aos dados no seu banco de dados atual para todos os novos aplicativos e para compatibilidade da futura versão.

Estabelecendo uma referência ao banco de dados atual

Versão Exemplo
1.x
Dim dbs As Database
Set dbs = CurrentDb
2.x
Dim dbs As Database
Set dbs = DBEngine.Workspaces(0).Databases(0)
ou
Dim dbs As Database
Set dbs = DBEngine(0)(0)
7.0 ou posterior
Dim dbs As DAO.Database
Set dbs = CurrentDb
9.0

(Recomendado)

Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection

Observação   No Microsoft Access, o banco de dados atual é o banco de dados padrão na coleção Databases; portanto, você ainda pode utilizar a sintaxe DBEngine(0)(0) para retornar uma variável de objeto Database que aponte para o banco de dados atual. Entretanto, quando usar o DAO, o método CurrentDb será o meio preferido para retornar essa variável de objeto, porque permitirá que você crie mais de uma variável de objeto Database que aponte para o banco de dados atual.

Abrindo um banco de dados e definindo uma referência

Versão Exemplo
1.x
Set dbs = OpenDatabase("Contatos.mdb")
2.x e posterior
Set dbs = DBEngine.Workspaces(0).OpenDatabase("Contacts.mdb")
ou
Set dbs = Workspaces(0).OpenDatabase("Contacts.mdb")
ou
Set dbs = OpenDatabase("Contacts.mdb")
9.x (Recomendado)
cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Contact.mdb”

Abrindo um recordset do tipo Table
Versão Exemplo
1.x
Dim tbl As Table
Set tbl = dbs.OpenTable("Pedidos")
2.x
Dim rst As Recordset
Set rst = dbs.OpenRecordset("Pedidos", DB_OPEN_TABLE)
ou
Dim rst As Recordset
Set rst = dbs!Pedidos.OpenRecordset
7.0 ou posterior
Dim rst As DAO.Recordset
Set rst = dbs.OpenRecordset("Pedidos", dbOpenTable)
ou
Dim rst As DAO.Recordset
Set rst = dbs!Pedidos.OpenRecordset
9.0 (Recomendado)
Dim rst As New ADODB.Recordset
rst.Open “Orders”,cnn,adOpenKeyset,adLockOptimistic,adCmdTableDirect

Abrindo com exclusividade um recordset do tipo Table
Versão Exemplo
1.x
Dim tbl As Table
Set tbl = dbs.OpenTable("Pedidos", DB_DENY_READ)
2.x
Dim rst As Recordset
Set rst = dbs.OpenRecordset("Pedidos", DB_OPEN_TABLE, DB_DENY_READ)
ou
Dim rst As Recordset
Set rst = dbs!Pedidos.OpenRecordset(DB_OPEN_TABLE, DB_DENY_READ)
7.0 ou posterior
Dim rst As DAO.Recordset
Set rst = dbs.OpenRecordset("Pedidos", dbOpenTable, dbDenyRead)
ou
Dim rst As DAO.Recordset
Set rst = dbs!Pedidos.OpenRecordset(dbOpenTable, dbDenyRead)
9.0 (Recomendado)
S/A (Não disponível via ADO)

Abrindo um recordset do tipo Dynaset
Versão Exemplo
1.x
Dim dyn As Dynaset
Set dyn = dbs.CreateDynaset("Pedidos")
2.x
Dim rst As Recordset
Set rst = dbs.OpenRecordset("Pedidos", DB_OPEN_DYNASET)
ou
Set rst = dbs!Pedidos.OpenRecordset(dbOpenDynaset)
7.0 ou posterior
Dim rst As Recordset
Set rst = dbs.OpenRecordset("Pedidos", dbOpenDynaset)
ou
Set rst = dbs!Pedidos.OpenRecordset(dbOpenDynaset)
9.0 (Recomendado)
Dim rst As New ADODB.Recordset
rst.Open “Orders”, cnn, adOpenKeyset, adLockOptimistic

Abrindo um recordset do tipo Snapshot
Versão Exemplo
1.x
Dim snp As Snapshot
Set snp = dbs.CreateSnapshot("Pedidos")
2.x
Dim rst As Recordset
Set rst = dbs.OpenRecordset("Pedidos", DB_OPEN_SNAPSHOT)
ou
Set rst = dbs!Pedidos.OpenRecordset(DB_OPEN_SNAPSHOT)
7.0 ou posterior
Dim rst As Recordset
Set rst = dbs.OpenRecordset("Pedidos", dbOpenSnapshot)
ou
Set rst = dbs!Pedidos.OpenRecordset(dbOpenSnapshot)
9.0 (Recomendado)
Dim rst As New ADODB.Recordset
rst.Open “Orders”, cnn, adOpenStatic, adLockReadOnly

Listando campos
Versão Exemplo
1.x
' Dado um objeto TableDef tdf aberto.
Dim snp As Snapshot
Set snp = tbl.ListFields()
While Not snp.EOF
   Debug.Print snp!Name, snp!Type
   snp.MoveNext
Wend
snp.Close
2.x
' Dado um objeto TableDef tdf aberto.
Dim intI As Integer, fld As Field
For intI = 0 To tdf.Fields.Count - 1
Set fld = tdf.Fields(intI)
   Debug.Print fld.Name, fld.Type
Next intI
7.0 ou posterior
' Dado um objeto TableDef tdf aberto
Dim fld As Field
For Each fld In tdf.Fields
   Debug.Print fld.Name, fld.Type
Next fld
9.0 (Recomendado)
' Dado um objeto Table tbl aberto
Dim col as ADOX.column
For Each col in tbl.Columns
   Debug.Print col.Name, col.Type
Next col

Listando tabelas em um banco de dados
Versão Exemplo
1.x
' Dado um objeto Database dbs aberto.
Dim snp As Snapshot
Set snp = dbs.ListTables()
While Not snp.EOF
   Debug.Print snp!Name
   snp.MoveNext
Wend snp.Close
2.x
' Dado um objeto Database dbs aberto.
Dim intJ As Integer, tdf As TableDef
For intJ = 0 To dbs.TableDefs.Count - 1
   Set tdf = dbs.TableDefs(intJ)
   Debug.Print tdf.Name
Next intJ
7.0 ou posterior
' Dado um objeto Database dbs aberto.
Dim tdf As TableDef
For Each tdf In dbs.TableDefs
   Debug.Print tdf.Name
Next tdf
9.0 (Recomendado)
‘ Dado um objeto Catalog cat aberto
Dim tbl As ADOX.Table
For Each tbl in cat.Tables
   Debug.Print tbl.Name
Next tbl

Listando os índices de uma tabela
Versão Exemplo
1.x
' Dado um objeto Table tbl aberto.
Dim snp As Snapshot
Set snp = tbl.ListIndexes()
While Not snp.EOF
   Debug.Print snp!Name
   snp.MoveNext
Wend
snp.Close
2.x
' Dado um objeto TableDef tdf aberto.
Dim intI As Integer, idx As Index
For intI = 0 To tdf.Indexes.Count - 1
   Set idx = tdf.Indexes(intI)
   Debug.Print idx.Name
Next intI
7.0 ou posterior
' Dado um objeto TableDef tdf aberto.
Dim idx As DAO.Index
For Each idx in tdf.Indexes
   Debug.Print idx.Name
Next idx
9.0

(Recomendado)

' Dado um objeto Table tbl aberto.
Dim idx As ADOX.Index
For Each idx In tbl.Indexes
   Debug.Print idx.Name
Next idx

Listando os parâmetros de uma consulta
Versão Exemplo
1.x
' Dado um objeto QueryDef qdf aberto.
Dim snp As Snapshot
Set snp = qdf.ListParameters()
While Not snp.EOF
   Debug.Print snp!Name
   snp.MoveNext
Wend
snp.Close
2.x
' Dado um objeto QueryDef qdf aberto.
Dim intI As Integer, prm As Parameter
For intI = 0 to qdf.Parameters.Count - 1
   Set prm = qdf.Parameters(i)
   Debug.Print prm.Name
Next intI
7.0 ou posterior
' Dado um objeto QueryDef qdf aberto.
Dim prm As Parameter
For Each prm In qdf.Parameters
   Debug.Print prm.Name
Next prm
9.0 (Recomendado)
' Dado um objeto Procedure prc aberto.
Dim prm As ADODB.Parameter
For Each prm in prc.Parameters
   Debug.Print prm.Name
Next prm

Definindo Parâmetros de Consulta Dinamicamente
Versão Exemplo
1.x
' Dado um banco de dados dbs aberto.
Dim qdf As QueryDef, dyn As Dynaset
Set qdf = dbs.OpenQueryDef("ConsultaPedidos")
qdf.ParameterName = "[Data de Início]"
Set dyn = qdf.CreateDynaset()
2.x
' Dado um objeto QueryDef qdf aberto.
Dim intI As Integer, prm As Parameter, rst As Recordset
For intI = 0 To qdf.Parameters.Count - 1
   Set prm = qdf.Parameters(intI)
   prm.Value = InputBox("Valor para " & prm.Name)
Next intI
Set rst = qdf.OpenRecordset
7.0 ou posterior
' Dado um objeto QueryDef qdf aberto.
Dim prm As Parameter, rst As Recordset
For Each prm In qdf.Parameters
   prm.Value = InputBox("Valor para " & prm.Name)
Next prm
Set rst = qdf.OpenRecordset
9.0 (Recomendado)
' Dado um objeto Procedure prc aberto.
Dim prm As ADODB.Parameter, rst As ADODB.Recordset
For Each prm in prc.Command.Parameters
   prm.Value = InputBox("Value for " & prm.Name)
Next prm
rst.Open prc.Command,,adOpenKeyset, adLockOptimistic

Executando uma Consulta Passagem
Versão Exemplo
1.x
' Dado um objeto Database dbs aberto.
Dim lngLinhas As Long
' Executa procedimento armazenado no servidor
lngLinhas = dbs.ExecuteSQL("EXECUTE SP_StoredProc")
ou
Dim snp As Snapshot
Set snp = dbs.CreateSnapshot("EXECUTE SP_StoredProc", DB_SQLPassThrough)
2.x e posterior
' Dado um objeto Database dbs aberto.
Dim qdf As QueryDef, rst As Recordset
Set qdf = dbs.CreateQueryDef("ConsultaODBC")
qdf.Connect = "ODBC;" & "NFD=MeuServ;" _
   & "UID=sa;" & "PWD=bateaqui;" & "DATABASE=pubs"
qdf.SQL = "EXECUTE SP_StoredProc"
qdf.ReturnsRecords = True
.
.
.
Set rst = qdf.OpenRecordset
9.0 e posterior
' Dado um objeto Catalog cat com Activeconnection set aberto.
Dim rst As Recordset, cmdPassthru As New ADODB.Command
Set cmdPassthru.ActiveConnection = Currentproject.connection
cmdPassthru("Jet OLEDB:Passthru Query conection string")= _
   "ODBC;DSN=MyServer;UID=sa;PWD=hithere;DATABASE=pubs"
cmdPassthru.CommandText = "EXECUTE SP_StoredProc"
cat.Procedures.Append "ODBCQuery", cmdPassthru 

Set rst = cmd.Execute

Criando uma Consulta Temporária
Versão Exemplo
1.x
' Dado um objeto Database dbs aberto.
Dim qdf As QueryDef, strTemp As String
strTemp = "TMP:" & User() & Time()
qdf = dbs.CreateQueryDef(strTemp)
qdf.SQL = "UPDATE Tabela1 SET Tabela1.Campo1 = Campo1 * 1.1;"
.
.
.
qdf.Execute
qdf.Close
.
.
dbs.DeleteQueryDef(strTemp)
2.x e posterior
qdf = dbs.CreateQueryDef("")
qdf.Execute
qdf.Close
9.0 e posterior
cmd.CommandText = "UPDATE Table1 SET Table1.Field1 = Field1 * 1.1;" cmd.Execute
set cmd = Nothing

 Fonte : Help Microsoft (O destaque é nosso).  Ler o Help também é cultura ;-). Bom proveito...