vbams-access

MS Access VBA code


I am new to MS Access and would like to type EmployeeID in the text box 1 (text_in) and after the button is pressed the result query (one unique value e.g. employee first name taken from the table) is printed out in the text box2 (text_out).

So far have the following code:

Private Sub btn_get_data_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset
'declaration of database on recordset objects
Dim strSQL As String

Dim a As String
a = text_in.Value

Set db = CurrentDb
Set rs = db.OpenRecordset("Employee")

strSQL = "SELECT Employee.FirstName FROM Employee WHERE Employee.EmployeeId=" & a

Set db = Nothing
Set rs = Nothing

End Sub

I have tried searching for a solution in many places but I cannot understand the structure that is used in MS access VBA to implement query from regular SQL language.

Guys, thank you very much! It took me one more hour to sucessfully implement both solutions into my database file. As I wrote I am completely new to Ms-access I am learning using some tutorials but my level is still low. Thank you very much once again.


Solution

  •  Private Sub btn_get_data_Click()
    
     on error goto errorCatch
    
     Dim db As DAO.Database
     Dim rs As DAO.Recordset
     Dim strSQL As String
    
     Set db = CurrentDb
    
     strSQL = "SELECT Employee.FirstName FROM Employee WHERE Employee.EmployeeId=" & Me.text_in.Value & ";"
    
     Set rs = db.OpenRecordset(strSql, DbOpenDynaset)
    
     If rs.RecordCount > 0 Then
          debug.print; rs!FirstName
          Me.text_out.Value = rs!FirstName
     End if 
    
     Cleanup:
     Set db = Nothing
     Set rs = Nothing
     Exit Sub
    
     errorCatch:
     debug.print; err.Number
     debug.print; Err.Description
    
     GoTo Cleanup
    
     End Sub
    

    I cant tell what youre after is this. You need to be better at utilizing recordsets and how to use a string value as your sql statement.

    You also didnt need to create a variable to store the textbox value in- you can use it directly in your sql statement.

    Also it is very important to have good error handling as hanging recordset objects can be quite a pain in the ass.

    EDIT - Ill expand on other ways to use string sql statements within VBA

     DoCmd.RunSQl strSql
    

    Or

     DoCmd.Execute strSql
    

    Both of these are great for UPDATE's or INSERT's.

    Then, like Gustav pointed out, you have various D functions that are basically compact queries with some limitations. However, they often save you the trouble of having to do all the typing that is involved with opening,utlizing and closing records sets. Even though the D functions seem limited, I have often nested a few to get join results out of. Just a matter of imagination.

    Look at this nifty site for function details -

    https://www.techonthenet.com/access/functions/index.php