Notifications
Clear all

Como chamar Consulta Parametrizada

8 Posts
2 Usuários
0 Reactions
1,660 Visualizações
(@pfarias)
Posts: 0
New Member
Topic starter
 

Pessoal, mais uma ajuda.

Puxo diversos itens do Access, porém estou tentando uma novidade. Como consigo chamar uma consulta parametrizada do Access?

Procurei sobre o assunto e achei só quando refere-se a ADO. Mas não tem como fazer isso com DAO?

O código que utilizo normalmente para chamar as tabelas é esse aqui em baixo:

Private Sub RefreshDB()
   
    Dim daoDB       As DAO.Database
    Dim daoRS       As DAO.Recordset
    Dim lngField    As Long
    Dim TabelaMDB   As String
    TabelaMDB = "WF_Consulta_Processos"
    
    Application.MaxChange = 0.001

    Sheets(TabelaMDB).Cells.ClearContents
    Set daoDB = DBEngine.OpenDatabase(DirDB, False, False, Connect:="MS Access;PWD=" & PwdDB)
    Set daoRS = daoDB.OpenRecordset.OpenRecordset(TabelaMDB, dbOpenDynaset) 'Aqui que a banda não toca!
    
    With daoRS
        For lngField = 0 To .Fields.Count - 1
            Sheets(TabelaMDB).Cells(1, lngField + 1).Value = .Fields(lngField).Name
        Next lngField
    End With

    Sheets(TabelaMDB).Range("A2").CopyFromRecordset daoRS


    daoRS.Close
    daoDB.Close
    
    Set daoRS = Nothing
    Set daoDB = Nothing

End Sub
 
Postado : 01/04/2015 3:11 pm
(@setti)
Posts: 0
New Member
 

você colocou .openrecordset duas vezes seguidas!!!

tente agora!!

Obrigado,

Rafael

 
Postado : 01/04/2015 3:17 pm
(@pfarias)
Posts: 0
New Member
Topic starter
 

você colocou .openrecordset duas vezes seguidas!!!

tente agora!!

Obrigado,

Rafael

Opa, o erro foi meu na hora de copiar para aqui. Estava fazendo uns testes. Mas estou usando correto mesmo

Set daoRS = daoDB.OpenRecordset(TabelaMDB, dbOpenDynaset) 'Aqui que a banda não toca!

lembrando que a Consulta criada la no Access é Parametrizada.

E para complementar, o erro que aparece é esse.

 
Postado : 01/04/2015 3:36 pm
(@pfarias)
Posts: 0
New Member
Topic starter
 

Conseguir desenvolver. Cheguei ao código abaixo.

Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset


Set dbs = DBEngine.OpenDatabase(DirDB, False, False, Connect:="MS Access;PWD=" & PwdDB)


Set qfd = dbs.QueryDefs("WF_Consulta_Processos")

qdf.Parameters("Status") = "SOLICITAÇÃO DE AUTORIZAÇÃO" 'MAS AGORA O ERRO É AQUI


Set rst = qdf.OpenRecordset("WF_Consulta_Processos", dbOpenDynaset)

Porem agora o erro é no qdf.Parameters

:oops: :oops: :oops: :oops: :oops:

 
Postado : 01/04/2015 4:39 pm
(@setti)
Posts: 0
New Member
 

Ative as referências microsoft dao e microsoft access tb...

Obrigado,

Rafael

Private Sub RefreshDB()
   
    Dim daoDB       As DAO.Database
    Dim daoRS       As DAO.Recordset
    Dim lngField    As Long
    Dim TabelaMDB   As String
    TabelaMDB = "WF_Consulta_Processos"
    
    Application.MaxChange = 0.001
    dirdb = "C:UsersCARLOS SETTIDesktopbd.mdb"
    Sheets(TabelaMDB).Cells.ClearContents
    Set daoDB = DBEngine.OpenDatabase(dirdb, False, False, Connect:="MS Access;PWD=" & PwdDB)
    Set daoRS = daoDB.OpenRecordset(TabelaMDB, dbOpenDynaset) 'Aqui que a banda não toca!
    
    With daoRS
        For lngField = 0 To .Fields.Count - 1
            Sheets(TabelaMDB).Cells(1, lngField + 1).Value = .Fields(lngField).Name
        Next lngField
    End With

    Sheets(TabelaMDB).Range("A2").CopyFromRecordset daoRS


    daoRS.Close
    daoDB.Close
    
    Set daoRS = Nothing
    Set daoDB = Nothing

End Sub
 
Postado : 01/04/2015 4:48 pm
(@pfarias)
Posts: 0
New Member
Topic starter
 

Ative as referências microsoft dao e microsoft access tb...

Obrigado,

Rafael

Private Sub RefreshDB()
   
    Dim daoDB       As DAO.Database
    Dim daoRS       As DAO.Recordset
    Dim lngField    As Long
    Dim TabelaMDB   As String
    TabelaMDB = "WF_Consulta_Processos"
    
    Application.MaxChange = 0.001
    dirdb = "C:UsersCARLOS SETTIDesktopbd.mdb"
    Sheets(TabelaMDB).Cells.ClearContents
    Set daoDB = DBEngine.OpenDatabase(dirdb, False, False, Connect:="MS Access;PWD=" & PwdDB)
    Set daoRS = daoDB.OpenRecordset(TabelaMDB, dbOpenDynaset) 'Aqui que a banda não toca!
    
    With daoRS
        For lngField = 0 To .Fields.Count - 1
            Sheets(TabelaMDB).Cells(1, lngField + 1).Value = .Fields(lngField).Name
        Next lngField
    End With

    Sheets(TabelaMDB).Range("A2").CopyFromRecordset daoRS


    daoRS.Close
    daoDB.Close
    
    Set daoRS = Nothing
    Set daoDB = Nothing

End Sub

Ok, estou em outro PC. Amanha pela manhã verifico e vejo se funciona.

Valeu.

 
Postado : 01/04/2015 7:55 pm
(@pfarias)
Posts: 0
New Member
Topic starter
 

NADA. O mesmo continua.
Mas Setti, lembrando que a consulta está parametrizada. eu consegui até agora ter alguma evolução mudando o código para o de baixo.

Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset

Set dbs = DBEngine.OpenDatabase(DirDB, False, False, Connect:="MS Access;PWD=" & PwdDB)

Set qfd = dbs.QueryDefs("WF_Consulta_Processos")

qdf.Parameters("[Status]") = "SOLICITAÇÃO DE AUTORIZAÇÃO" 'MAS AGORA O ERRO É AQUI

Set rst = qdf.OpenRecordset("WF_Consulta_Processos", dbOpenDynaset)
 
Postado : 02/04/2015 6:56 am
(@pfarias)
Posts: 0
New Member
Topic starter
 

Winner!!!! hahahaha.. :D

Rodei mas conseguir sair dessa.
Olha como ficou meu código:

Sub AtualizarBancooo()
   
    Dim Wrk         As dao.Workspace
    Dim daoDB       As dao.Database
    Dim daoRS       As dao.Recordset
    Dim lngField    As Long
    Dim TabelaMDB   As String
    Dim MyPar        As QueryDef
    
    TabelaMDB = "WF_Consulta_Processos"
    Application.MaxChange = 0.001
    Sheets(TabelaMDB).Cells.ClearContents
    
    Set Wrk = CreateWorkspace("", "Admin", "", dbUseJet)
    Set daoDB = DBEngine.OpenDatabase(DirDB, False, False, Connect:="MS Access;PWD=" & PwdDB)
    Set MyPar = daoDB.QueryDefs(TabelaMDB)
    MyPar.Parameters("[Digite o Status:]") = "AUTORIZADO"
    Set daoRS = MyPar.OpenRecordset()
    
    With daoRS
        For lngField = 0 To .Fields.Count - 1
            Sheets(TabelaMDB).Cells(1, lngField + 1).Value = .Fields(lngField).Name
        Next lngField
    End With

    Sheets(TabelaMDB).Range("A2").CopyFromRecordset daoRS

    daoRS.Close
    daoDB.Close
    
    Set daoRS = Nothing
    Set daoDB = Nothing

End Sub
 
Postado : 02/04/2015 7:17 am