Har en bra funktion men inte helt global. Hej. Jag får väl komma med min funktion. Skrev den ur minnet och har inte möjlighet att testa den.<br>Global funktion "Fill_List(ctrListControl As Control, sql As Stri
Jag fyller en combo box med ex. Orter i Sverige och vill använda samma funktion för att fylla andra combo boxar med värde jag skickar in. Ja ni fattar nog av koden.
Så här ser koden ut nu:
Public Function Fill_List(ctrListControl As Control, sql As String) As Boolean
If TypeOf ctrListControl Is ListBox Or TypeOf _
ctrListControl Is ComboBox Then
ctrListControl.Clear
Dim tRs As Recordset
Set tRs = New Recordset
With tRs
.CursorLocation = adUseClient
.CursorType = adOpenForwardOnly
.ActiveConnection = dbConn
.Source = sql
.Open
End With
If Not tRs.EOF Then
With tRs
.MoveFirst
Do Until .EOF
ctrListControl.AddItem tRs!ort
ctrListControl.ItemData(ctrListControl.NewIndex) = tRs!idnr
.MoveNext
Loop
End With
End If
End If
Set tRs = Nothing 'Städa
End Function
Så här vill jag att den skall funka på något vis om det går?
Public Function Fill_List(ctrListControl As Control, sql As String, sNameField As String, sIdField As String ) As Boolean
Do Until .EOF
ctrListControl.AddItem sNameField
ctrListControl.ItemData(ctrListControl.NewIndex) = sIdField
.MoveNext
Den gillar inte String tror jag, vet inte riktigt om det går att lösa?
Tacksam för hjälp.Sv: Global funktion "Fill_List(ctrListControl As Control, sql As
Jag har en här som jag skrev för längesen...
Den går att göra bättre
<code>
Public Sub FillData(ByRef ctrl As Control, ByRef rst As ADODB.RecordSet, ByRef strDataField As String, Optional ByRef strIDField As String, Optional DoClear As Boolean = True)
With ctrl
If DoClear Then
.Clear
End If
If strIDField <> "" Then
While Not rst.EOF
.AddItem rst(strDataField)
.ItemData(.NewIndex) = rst(strIDField)
rst.MoveNext
Wend
Else
While Not rst.EOF
.AddItem rst(strDataField)
rst.MoveNext
Wend
End If
End With
End Sub
</code>Sv: Global funktion "Fill_List(ctrListControl As Control, sql As
<br>
* Jag har istället två funktioner. En för listbox och en för Combobox kontrollen. För att anropa medlemmarna av kontrollen med Earlybindings.<br>
<br>
* Istället för att bifoga fältnamnen skickar jag referenser till recordsetets fält. Slipper då hämta fältobjektet för varje post. Kan sätta en intern fältvariabel i funktionen. Men det är ju mer jobb. Enklare så här.<br>
<br>
* Gör det oxå möjligt att ange ett default värde för listan. Eller aktuellt värde.<br>
<br>
<code>
Public Sub FillCombo(Combo As Combo, RecordSet As ADODB.RecordSet, TextField As ADODB.Field, Optional DataField As ADODB.Field, Optional Value as Variant)
If DataField Is Nothing Then
If Not IsMissing(Value) Then
Do Until RecordSet.EOF
Combo.AddItem "" & TextField.Value
If TextField.Value = Value Then
Combo.ListIndex = Combo.NewIndex
Exit Do
End If
RecordSet.MoveNext
Loop
End If
Do Until RecordSet.EOF
Combo.AddItem "" & TextField.Value
RecordSet.MoveNext
Loop
Else
If Not IsMissing(Value) Then
Do Until RecordSet.EOF
Combo.AddItem "" & TextField.Value
Combo.ItemData(Combo.NewIndex) = DataField.Value
If DataField.Value = Value Then
Combo.ListIndex = Combo.NewIndex
Exit Do
End If
RecordSet.MoveNext
Loop
End If
Do Until RecordSet.EOF
Combo.AddItem "" & TextField.Value
Combo.ItemData(Combo.NewIndex) = DataField
RecordSet.MoveNext
Loop
End If
End Sub
</code>
<br>
<br>
Funktionen anropas såhär:
<code>
Dim rsTemp As ADDB.Recordset
Set rsTemp = New ADDB.Recordset
rsTemp.Open "SELECT * FROM Orter ORDER BY OrtNamn", conn
FillCombo Combo1, rsTemp, rsTemp("OrtNamn"), rsTemp("OrtId")
</code>
<br>
<br>
Om comboboxen har ett värde:
<code>
Dim rsTemp As ADDB.Recordset
Set rsTemp = New ADDB.Recordset
rsTemp.Open "SELECT * FROM Orter ORDER BY OrtNamn", conn
FillCombo Combo1, rsTemp, rsTemp("OrtNamn"), rsTemp("OrtId"), mOrtID
</code>