Usuário com melhor resposta
Acessar um RecordSet (tipo Consulta)

Pergunta
-
Segue abaixo meu codigo, que está dando certo somente se o recordset form uma tabela, mas os dados que preciso vem de uma consulta, ai da o erro 91 indicando que a tabela não existe.
Abraços
Dim BancoDB As Database
Dim Tabela As Recordset
Dim Texto As Variant
Dim AsNull As String---------------------------------------------------------------
Private Sub Comando0_Click()
AsNull = SetarTabelas():
Tabela.MoveFirst
Do Until Tabela.EOF
Texto = Texto & "/" & Tabela!Contrato
Loop
Comando0.Caption = Texto
End Sub---------------------------------------------------------------
Private Function SetarTabelas()
On Error GoTo Err:
Dim AsTab As String
AsTab = "Tributos" (aqui quero indicar que o tributo e uma consulta e nao uma tabela )
Set BancoDB = DBEngine.Workspaces(0).Databases(0)
Set Tabela = BancoDB.OpenRecordset(AsTab)
Err:
If Err = 3021 Then
AsNull = MsgBox("Banco de dados para a tabela " & AsTab & " não localizado", vbOKOnly, "Aviso do Sistema")
Exit Function
End If
MsgBox Err & " - " & Err.Description
End Functionsegunda-feira, 18 de dezembro de 2006 13:04
Respostas
-
Tente utilizar a expressão: "Select * From Tributos". Se não estou enganado, somente tabelas podem ser acessadas diretamente sem uma instrução SQL.
segunda-feira, 18 de dezembro de 2006 15:35 -
Com base na dica do Mauricio Pontalti Neri pesquisei no help do proprio access. e resolvi da sequinte forma:
Seque abaixo o codigo caso alguem precise, esta toda a rotina na integra inclusive o comando sql inteiro da consulta
basicamente tudo se resume no metodo setartabelas
Option Compare Database
Option Explicit
Dim Texto As Variant
Dim AsNull As String
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Banco As ADODB.RecordsetPrivate Sub CabeçalhoDoGrupo2_Print(Cancel As Integer, PrintCount As Integer)
Dim i As Integer
i = 0
On Error GoTo Err:
AsNull = SetarTabelas():
rs.MoveFirst
Do Until rs.EOF
If i = 0 Then
Texto = rs!Contrato
Else
Texto = Texto & " - " & rs!Contrato
End If
i = i + 1
rs.MoveNext
Loop
txtContrato = Texto
cnn.Close
Exit Sub
Err:
MsgBox Err & " - " & Err.Description
End SubPrivate Function SetarTabelas()
On Error GoTo Err:
Dim Str As String
Str = Servidor()
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider = Microsoft.jet.OLEDB.4.0; Data Source = " & Str
cnn.Open
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
Str = "SELECT * FROM CLIENTE"
Str = Str & " HAVING [Registro de aquisiçao].[codigo regaq]= " + Me.[codigo]
rs.Open Str, cnn, adOpenDynamic
Exit Function
Err:
MsgBox Err & " - " & Err.Description
End Functionterça-feira, 19 de dezembro de 2006 10:47 -
Oi Ailton,
você não precisa converter para ADO se não quiser.
Com DAO, você deve ter dois cuidados:
1) (o mais importante) Coloque o prefixo:
Dim db As DAO.Database
Dim rst As DAO.Recordset
2) Coloque o tipo de objeto que quer abrir:
Set rst = db.OpenRecordset ("SELECT * FROM TuaTabela", dbOpenDynaset)
ou
Set rst = db.OpenRecordset ("TuaTabela", dbOpenTable)
quinta-feira, 21 de dezembro de 2006 22:34Moderador
Todas as Respostas
-
Tente utilizar a expressão: "Select * From Tributos". Se não estou enganado, somente tabelas podem ser acessadas diretamente sem uma instrução SQL.
segunda-feira, 18 de dezembro de 2006 15:35 -
Com base na dica do Mauricio Pontalti Neri pesquisei no help do proprio access. e resolvi da sequinte forma:
Seque abaixo o codigo caso alguem precise, esta toda a rotina na integra inclusive o comando sql inteiro da consulta
basicamente tudo se resume no metodo setartabelas
Option Compare Database
Option Explicit
Dim Texto As Variant
Dim AsNull As String
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Banco As ADODB.RecordsetPrivate Sub CabeçalhoDoGrupo2_Print(Cancel As Integer, PrintCount As Integer)
Dim i As Integer
i = 0
On Error GoTo Err:
AsNull = SetarTabelas():
rs.MoveFirst
Do Until rs.EOF
If i = 0 Then
Texto = rs!Contrato
Else
Texto = Texto & " - " & rs!Contrato
End If
i = i + 1
rs.MoveNext
Loop
txtContrato = Texto
cnn.Close
Exit Sub
Err:
MsgBox Err & " - " & Err.Description
End SubPrivate Function SetarTabelas()
On Error GoTo Err:
Dim Str As String
Str = Servidor()
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider = Microsoft.jet.OLEDB.4.0; Data Source = " & Str
cnn.Open
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
Str = "SELECT * FROM CLIENTE"
Str = Str & " HAVING [Registro de aquisiçao].[codigo regaq]= " + Me.[codigo]
rs.Open Str, cnn, adOpenDynamic
Exit Function
Err:
MsgBox Err & " - " & Err.Description
End Functionterça-feira, 19 de dezembro de 2006 10:47 -
Oi Ailton,
você não precisa converter para ADO se não quiser.
Com DAO, você deve ter dois cuidados:
1) (o mais importante) Coloque o prefixo:
Dim db As DAO.Database
Dim rst As DAO.Recordset
2) Coloque o tipo de objeto que quer abrir:
Set rst = db.OpenRecordset ("SELECT * FROM TuaTabela", dbOpenDynaset)
ou
Set rst = db.OpenRecordset ("TuaTabela", dbOpenTable)
quinta-feira, 21 de dezembro de 2006 22:34Moderador