ich möchte die Initialisierung einer
Combobox durchführen.
Dazu sollen die Daten einer Abfrage
verwendet werden, die mit SQL
durchgeführt wird.
Wie ist dies möglich ?
Danke im voraus.
Gruß Karl
ich möchte die Initialisierung einer
Combobox durchführen.
Dazu sollen die Daten einer Abfrage
verwendet werden, die mit SQL
durchgeführt wird.
Wie ist dies möglich ?
Danke im voraus.
Gruß Karl
Public Sub test()
GetData "select * from stamm", "MYODBC", "MyDatabase"
End Sub
Public Sub GetData(SqlString As String, _
Optional strODBCName As String = "SQLHausDB", _
Optional strDatbaseName As String = "HausDb", _
Optional StartZeilePos As Integer = 1, _
Optional StartSpaltePos As Integer = 1, _
Optional VorAktuTabDelAll As Integer = 1, _
Optional KopfZeileHolen As Integer = 1)
'VorAktuTabDelAll ... 1 gesamte Tabelle löschen
' 2 Ab Startzeile löschen
' 3 Aktuelle Zeile Rechts von Startpos löschen
Dim db As Database
Dim qu As QueryDef
Dim rs As Recordset
Dim maxRows, r, c As Long
Dim FeldVerz As Fields
Dim AktuFeld As Field
Dim strConnect As String
Dim rangHlp As Range
If KopfZeileHolen > 1 Then
MsgBox "Parameterfehler KopfZeileHolen darf nur 0 oder 1 sein"
End If
strConnect = "ODBC;DSN=" & strODBCName & ";DATABASE=" & strDatbaseName
maxRows = 65000
On Error Resume Next
Set db = CreateDatabase("c:\temp\Temp.mdb", dbLangGeneral)
On Error GoTo 0
Set db = OpenDatabase("c:\temp\Temp.mdb")
Set qu = db.CreateQueryDef("")
'Debug.Print strConnect
qu.Connect = strConnect
qu.ODBCTimeout = 300
qu.ReturnsRecords = True
Application.StatusBar = Left(SqlString, 80) + "...." + IIf(Len(SqlString) > 60, Right(SqlString, 20), "")
Debug.Print SqlString
qu.Sql = SqlString
'Datensätze holen
Set rs = qu.OpenRecordset()
Set FeldVerz = rs.Fields
'Arbeitsblatt löschen
If VorAktuTabDelAll = 1 Then 'Gesamte Tabelle Löschen
Cells.Clear
Else
If VorAktuTabDelAll = 2 Then 'Ab aktueller Zeile bis Tabellenende löschen
Cells.Range(Cells(StartZeilePos, 1), _
Cells(Cells.Rows.Count, Cells.Columns.Count) _
).ClearContents
Else
If VorAktuTabDelAll = 3 Then 'Aktuelle Position bis Zeilenende löschen
Cells.Range(Cells(StartZeilePos, StartSpaltePos), _
Cells(StartZeilePos + KopfZeileHolen, Cells.Columns.Count) _
).ClearContents
End If
End If
End If
'Datensätze in Arbeitsblatt Schreiben
If KopfZeileHolen = 1 Then
c = StartSpaltePos
For Each AktuFeld In FeldVerz ' Feldname in 1.Zeile Schreiben
ActiveSheet.Cells(StartZeilePos, c).Value = AktuFeld.Name
c = c + 1
Next AktuFeld
End If
r = StartZeilePos + KopfZeileHolen ' Mit Daten in 2. Zeile beginnen
Do While Not rs.EOF And i < maxRows
c = StartSpaltePos
For Each AktuFeld In FeldVerz
On Error Resume Next
ActiveSheet.Cells(r, c).Value = AktuFeld.Value
On Error GoTo 0
c = c + 1
Next AktuFeld
r = r + 1
rs.MoveNext
Loop
db.Close
Set db = Nothing
Application.StatusBar = False
End Sub