UtterAccess.com
X   Site Message
(Message will auto close in 2 seconds)

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Combo box control name being passed to a module    
 
   
jeinsel
post Jan 28 2005, 07:40 PM
Post #1

UtterAccess Member
Posts: 37
From: Milwaukee, WI



Hi again.

I'm putting together a application (if you can call it that) that is an Access frontend that accesses a SQL 2000 database. So far I'm using ADO to code all the forms. It seemed as though I had a combo box that would be populated by a stored procedure and this combo box existed on several forms so I wanted to save some repetitive code and just create a global sub in a module that would do this and just call that sub on the forms open event. I ran into problems. No matter what I do, the code craps out when it hits the name of the combo box. When I step through the code and mouse over the combo box name it says cboEmployee=Null

Here is what I have in the module:
CODE
Public Sub FillEmpCboBox(frm As Form, cbo As ComboBox)

    Dim cnn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rs As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set cmd = New ADODB.Command

    cnn.Open EngCnn

    Set cmd.ActiveConnection = cnn
    cmd.CommandText = "proc_Get_Employees"
    cmd.CommandType = adCmdStoredProc

    Set rs = cmd.Execute()

    rs.MoveFirst

    While Not rs.EOF
        frm.cbo.AddItem rs!EmpID & ";" & rs!EmpName
        rs.MoveNext
    Wend

    Set cmd = Nothing
    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
    
End Sub


I'm calling this sub in the forms open event with this:
CODE
Call FillEmpCboBox(Form_frmReqForm_Engineering, cboEmployee)


frmReqForm_Engineering being the name of the form that has the combo box in it and cboEmployee being the name of the control.

Again, it's my limited knowledge that is really the culprit here.
Thanks so much for any help.
Go to the top of the page
 
+
JeffK
post Jan 31 2005, 12:50 PM
Post #2

UtterAccess VIP
Posts: 1,536
From: Lansing, MI



I recommend the following changes to your code:

Remove the form argument from the function
If you are passing in a reference to the control, there is no need to pass in a reference to its parent form.

This:
Public Sub FillEmpCboBox(frm As Form, cbo As ComboBox)

Should be:
Public Sub FillEmpCboBox(cbo As ComboBox)

Remove the frm from the fill line
Even if you passed in a form reference, the frm.cbo is not correct because the form does not have a cbo property.

This:
frm.cbo.AddItem rs!EmpID & ";" & rs!EmpName

Should be:
cbo.AddItem rs!EmpID & ";" & rs!EmpName

For future reference, pass in form references as Me, not the form's module name
When you pass a form reference, use the object variable that already applies to it. When you pass in the class name "Form_..." Access creates a new copy of the form that does not refer to the one you already have open.

This:
Call FillEmpCboBox(Form_frmReqForm_Engineering, cboEmployee)

Is more appropriately written as:
Call FillEmpCboBox(Me, cboEmployee)

But since you are removing the form argument from the function, should be:
Call FillEmpCboBox(Me.cboEmployee)

HTH
Jeff
Go to the top of the page
 
+
jeinsel
post Jan 31 2005, 02:05 PM
Post #3

UtterAccess Member
Posts: 37
From: Milwaukee, WI



You probably already know this but... it worked like a charm.

Thanks so much!
Go to the top of the page
 
+
JeffK
post Jan 31 2005, 04:13 PM
Post #4

UtterAccess VIP
Posts: 1,536
From: Lansing, MI



I'm glad it worked out for you!
Happy to Help!
Go to the top of the page
 
+

Thank you for your support! Reply to this topicStart new topic

Jump To Forum:
 



RSS Go to Top  ·  Lo-Fi Version Time is now: 19th May 2013 - 11:27 AM