Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sql Abfrage einer Listbox zuweisen

Forumthread: Sql Abfrage einer Listbox zuweisen

Sql Abfrage einer Listbox zuweisen
peter
Hallo
Ich lese mit folgendem Code Daten von einem SQL Server
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Set Cn = New ADODB.Connection
Cn.Provider = "SQLOLEDB.1"
Cn.Properties("Data Source") = "XXXX\XX"
Cn.Properties("Initial Catalog") = "YYYYY"
Cn.Properties("Integrated Security") = "SSPI"
Cn.Open
SQLCode = "SELECT * FROM Table"
Set Rs = New ADODB.Recordset
With Rs
.ActiveConnection = Cn
.CursorLocation = adUseClient
.Source = SQLCode
.Open
End With
jetzt will ich die das mehrspaltige/mehrzeilige SQL Ergebnis einer Excel Listbox DIREKT zuweisen. Also ohne Zwischentabelle, Additem usw.
Geht das? Ich habs nicht geschafft.
Vielen Dank Peter
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Sql Abfrage einer Listbox zuweisen
20.09.2011 16:16:39
Gerd
Hallo Peter,
es geht, anbei eine Demoprozedur aus meiner Codekiste....

Sub fülle_ComboboxSQL(DB As DB, Combobox As Combobox, SQL As String, DropdownSpalte As String)
'Füllt eine Combobox mit den Werten eines SQL Statements Datenbanken auf dem Server
'die zu zeigende Spalte muss benannt werden
Dim tmpWert As String
Dim myConnectStr As String
Dim myADO As New ADODB.Connection
Dim myRS As New ADODB.Recordset
tmpWert = Combobox.Value
Combobox.Clear
myConnectStr = "Provider=SQLOLEDB;Server=" & DB.Server & ";Database=" & DB.DB & DB.Security
If teste_ExistenzDatenbank(DB) Then
'Falls der Server erreichbar ist
On Error GoTo error 'Ein Fehler kann auftreten, falls das SQL nicht läuft (z.B. Tabelle  _
noch nicht da)
myADO.ConnectionTimeout = 1
myADO.Open (myConnectStr)
myRS.Open SQL, myADO, adOpenKeyset, adLockOptimistic
While Not myRS.EOF
Combobox.AddItem myRS.Fields([DropdownSpalte])
myRS.MoveNext
Wend
Combobox.AddItem ""
End If
On Error Resume Next
myRS.Close
myADO.Close
Combobox.Value = tmpWert
Exit Sub
error:
MsgBox "Es existieren (noch ?) keine Daten für diese Auswahl"
End Sub

Anzeige
AW: Sql Abfrage einer Listbox zuweisen
20.09.2011 17:03:37
peter
Hallo Gerd
Vielen Dank, so oder so ähnlich hab ich es schon umgesetzt. Ich wollte aber Additem umgehen. Ich dachte es könnte etwas gben die SQL Daten "auf einmal" der Listbox zuzuweisen.
Falls es das nicht gibt muss ich auf Additem zurückgreifen.
Vielen Dank Peter
;
Anzeige
Anzeige

Infobox / Tutorial

SQL Abfrage einer Listbox zuweisen


Schritt-für-Schritt-Anleitung

Um eine SQL Abfrage direkt einer Listbox in Excel zuzuweisen, kannst du den folgenden VBA-Code verwenden. Dieser Code zeigt dir, wie du Daten aus einer SQL-Datenbank abrufen und sie direkt einer Listbox zuweisen kannst, ohne die Verwendung von AddItem.

  1. VBA-Editor öffnen: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Modul erstellen: Klicke im Projektfenster mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.
  3. Code kopieren: Füge den folgenden Code in das Modul ein.
Sub FülleListboxMitSQL(Listbox As MSForms.ListBox, SQL As String, DBConnection As String)
    Dim myADO As New ADODB.Connection
    Dim myRS As New ADODB.Recordset

    myADO.Open (DBConnection)
    myRS.Open SQL, myADO

    ' Listbox leeren
    Listbox.Clear

    ' Daten der Listbox zuweisen
    Listbox.List = myRS.GetRows

    ' Datenbank- und Recordset schließen
    myRS.Close
    myADO.Close
End Sub
  1. Verbindung zur Datenbank herstellen: Stelle sicher, dass die DBConnection-Variable die richtige Verbindungszeichenfolge enthält.
  2. SQL-Abfrage definieren: Ersetze SQL durch deine spezifische SQL-Abfrage, z.B. SELECT * FROM DeineTabelle.

Jetzt kannst du diese Prozedur aufrufen, um die Listbox mit den Ergebnissen deiner SQL Abfrage zu füllen.


Häufige Fehler und Lösungen

  • Fehler: "Es existieren (noch ?) keine Daten für diese Auswahl"

    • Lösung: Überprüfe die Verbindung zur Datenbank und die SQL-Abfrage. Stelle sicher, dass die Tabelle existiert und Daten enthält.
  • Fehler: "Verbindung fehlgeschlagen"

    • Lösung: Vergewissere dich, dass der SQL Server läuft und die Verbindungszeichenfolge korrekt ist.

Alternative Methoden

Wenn du die Verwendung von AddItem vermeiden möchtest, kannst du die GetRows-Methode verwenden, um alle Datensätze auf einmal zu laden und sie direkt in die Listbox zu übergeben, wie im obigen Code gezeigt. Damit wird der Prozess deutlich effizienter.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du die Listbox mit einer SQL Abfrage füllen kannst:

Sub Beispiel()
    Dim Listbox As MSForms.ListBox
    Dim SQL As String
    Dim DBConnection As String

    ' Beispiel SQL Abfrage und Datenbankverbindung
    SQL = "SELECT Name FROM Kunden"
    DBConnection = "Provider=SQLOLEDB;Server=XXXX;Database=YYYY;Integrated Security=SSPI;"

    ' Listbox füllen
    FülleListboxMitSQL Listbox, SQL, DBConnection
End Sub

Dieses Beispiel zeigt, wie du die Namen von Kunden aus der Tabelle "Kunden" in die Listbox laden kannst.


Tipps für Profis

  • Verwende Parameter in deiner SQL Abfrage: Um Sicherheitsprobleme wie SQL-Injection zu vermeiden, solltest du Parameter für deine SQL-Abfragen verwenden.

  • Optimiere die Performance: Lade nur die benötigten Daten, um die Performance zu verbessern. Verwende spezifische Abfragen anstelle von SELECT *.

  • Nutze Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung, um unerwartete Probleme während der Ausführung zu vermeiden.


FAQ: Häufige Fragen

1. Kann ich eine SQL Abfrage an eine Listbox in Excel ohne VBA zuweisen? Nein, um eine SQL Abfrage direkt in eine Listbox zu laden, musst du VBA verwenden.

2. Was ist der Unterschied zwischen AddItem und GetRows? AddItem fügt Elemente einzeln zur Listbox hinzu, während GetRows alle Datensätze auf einmal in ein Array lädt, das dann der Listbox zugewiesen wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige