ich habe eine Userform, in der ich Werte aus einer Access-Datenbank zeige.
In ListBox1 werden alle Auftragsnummern gezeigt.
Wird ein Auftrag aus ListBox1 ausgewählt, wird die Modellnummer in Label1 angezeigt, und in UserForm2 werden alle Artikelnummern aus der zu dem Modell gehörenden Stückliste angezeigt.
(und dann passiert noch eine Menge mehr, aber für die Frage habe ich den Code auf das wesentliche gekürtzt)
Bisher löse ich das so, und es funktioniert auch:
Sub Laden_SQL(mySQLcmd As String)
Dim cmd As ADODB.Command
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
con.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\herber\myAccDb.accdb" & _
"Mode=Share Exclusive"
Set cmd = New ADODB.Command
cmd.ActiveConnection = con
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open mySQLcmd, _
ActiveConnection:=con, _
CursorType:=adOpenStatic, _
LockType:=adLockPessimistic, _
Options:=adCmdTableDirect
With Tabelle1
.UsedRange.ClearContents
.Range("A1").CopyFromRecordset Data:=rs
End With
Set cmd = Nothing
con.Close
Set con = Nothing
End Sub
Private Sub UserForm_Initialize()
Dim i As Long
Call Laden_SQL("SELECT AuftragsNr FROM AuftragAlle AS mytab WHERE [mytab.DatumStart] = " & Date) _
With Tabelle1
For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
UserForm1.ListBox1.AddItem .Cells(i, 1).Value
Next i
End With
End Sub
Private Sub ListBox1_Change()
Dim i As Long
Call Laden_SQL("SELECT Modell FROM AuftragAlle AS mytab WHERE [mytab.AuftragsNr] = " & _
UserForm1.ListBox1.Value)
UserForm1.Label1.Caption = Tabelle1.Range("A1").Value
Call Laden_SQL("SELECT Artikelnr FROM Stueckliste AS mytab WHERE [mytab.Modell] = " & UserForm1. _
Label1.Caption)
With Tabelle1
For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
UserForm1.ListBox2.AddItem .Cells(i, 1).Value
Next i
End With
End Sub
Wenn es bei drei Objekten bleiben würde wäre es ja auch ok. Es geht mir aber tierisch auf den Keks, mit jedem SQL Kommando umständlich den Weg über eine Exceltabelle zu gehen.Hat jemand eine Idee, ob ich die "Laden_SQL" Sub in eine Function umschreiben kann, um dann den/die Wert/e aus der Access DB direkt zu übergeben, ohne ihn erst in eine Tabelle zu schreiben? In Pseudocode könnte das dann so aussehen:
Function Laden_SQL(mySQLcmd As String)
[... AccDb initilaisieren ...]
Laden_SQL = mySQLcmd
End Function
Private Sub ListBox1_Change()
UserForm1.Label1.Caption = Laden_SQL("SELECT Modell FROM AuftragAlle AS mytab WHERE [mytab. _
AuftragsNr] = " & UserForm1.ListBox1.Value)
End Sub
Kann das für einen Wert, um ein Label zu beschriften, funktionieren? Kann das auch für viele Werte, um eine Listbox zu füllen, funktionieren?
LG,
Klaus M.