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...