Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SQL Abfrage Ergebnis in Userform?

SQL Abfrage Ergebnis in Userform?
12.09.2005 16:05:10
MartinM
Hallo Zusammen
ist es möglich eine SQL Abfrage direkt in eine Userform oder Messagebox zu schreiben?
Also ohne vorerst die Daten in eine Excel Tabelle zu schreiben.
Mein SQL ist das folgende:
--Beginn--
Select F4101.IMITM, F4101.IMDSC1, F4101.IMSTKT, F4101.IMMPST, F4101.IMPRP0
FROM PRODDTA.F4101
WHERE F4101.IMITM = ARTIKELNUMMER
--Ende--
Artikelnummer ist eine Variable und der Wert dazu steht in Zelle U13
VBA-Gruss Martin
Der Weg ist das Ziel!
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 16:47:32
Manfred
Hallo Martin,
Das geht prinzipiell schon. Macht aber nur Sinn wenn die Abfrage nur einen Wert liefert.
Ich gehe von einer Access-DB aus.
Die Sql-Abfrage muß noch mit einem Recordset aufgerufen werden :
Sqlstring="Select F4101.IMITM, F4101.IMDSC1, F4101.IMSTKT, F4101.IMMPST, F4101.IMPRP0
FROM PRODDTA.F4101 WHERE F4101.IMITM = ARTIKELNUMMER"
rs.open Sqlstring,cn,.....
dann geht :
Msgbox rs.fields(Feldname).value
Gruß Manfred
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 16:49:59
EtoPHG
Hallo Martin,
Hier mal ein Ansatz (Aufpassen: Connect-String richtig anpassen):

Sub executeSQL()
Dim sMsg As String
Dim dbWS As Workspace
Dim conDB As Connection
Dim rsTABLE As Recordset
Dim sConnect As String
Dim sSQLSelect As String
Set dbWS = CreateWorkspace("TempWorkspace", "Excel", "", dbUseODBC)
sConnect = "ODBC;DSN=" & "Your Data Source Name"
sConnect = sConnect + ";UID=Your User ID for DB"
sConnect = sConnect + ";PWD=Your Password"
sConnect = sConnect + ";DBQ=Your DB connect string"
sConnect = sConnect + ";ASY=OFF;"
Set conDB = dbWS.OpenConnection("get", dbDriverNoPrompt, , sConnect)
sSQLSelect = "Select F4101.IMITM, F4101.IMDSC1, F4101.IMSTKT, " & _
"F4101.IMMPST, F4101.IMPRP0 " & _
"FROM PRODDTA.F4101 " & _
"WHERE F4101.IMITM = " & Cells(13, 21).Value
Set rsTABLE = conDB.OpenRecordset( _
sSQLSelect, dbOpenDynamic)
With rsTABLE
If .RecordCount > 0 Then
sMsg = sMsg & .Fields(0) & vbCrLf
sMsg = sMsg & .Fields(1) & vbCrLf
sMsg = sMsg & .Fields(2) & vbCrLf
sMsg = sMsg & .Fields(3) & vbCrLf
sMsg = sMsg & .Fields(4)
MsgBox sMsg, vbOKOnly + vbInformation, "Artikelnummer:" & sArtNr
End If
.Close
End With
conDB.Close
End Sub

Gruss Hansueli
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 16:56:39
MartinM
Hallo Zusammen
Danke vielmals, werde mich sicherlich auch einmal erkentlich zeigen mit meiner Kernkompetenz.
Werde den Ansatz von Hansueli weiterverfolgen und bei Erfog ein Posting machen.
Gruss aus der Schweiz
Martin
Der Weg ist das Ziel!
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 17:06:32
MartinM
Hallo Hansueli
Welchen Verweis muss ich noch aktivieren, damit alle Variabel Definitionen wie z.B.
As Workspace
As Connection
As Recordset
Einwandfrei funktionieren?
Kriege die Fehlermeldung: "Benutzerdefinierter Typ nicht definiert!"
VBA-Gruss Martin
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 17:08:57
EtoP
Hallo Martin,
Sorry, I forgot:
Microsoft DAO 3.6 Object Library
Gruss aus der Schweiz, Hansueli
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 17:23:40
MartinM
Hallo Hansueli
Vorest vielen Dank für den Script, scheit auch das richtige zu sein, jedoch Gibt es immer noch einen Fehler im Ablauf und zwar an dieser Position:
Set rsTABLE = conDB.OpenRecordset( _
sSQLSelect, dbOpenDynamic)
Fehler = ODBC Aufruf fehlgeschlagen.
Hier mein angepasster Script mit meinen Persönlichen Login Daten

Sub executeSQL()
Dim sMsg As String
Dim dbWS As Workspace
Dim conDB As Connection
Dim rsTABLE As Recordset
Dim sConnect As String
Dim sSQLSelect As String
Dim sArtNr As Integer
Set dbWS = CreateWorkspace("TempWorkspace", "Excel", "", dbUseODBC)
sConnect = "ODBC;DSN=" & "JDE_PROD" 'DB DSN ist richtig
sConnect = sConnect + ";UID=DMLOGIN" 'UID ist richtig aber für die Veröffentlichung geändert
sConnect = sConnect + ";PWD=geheim" 'Passwort ist ebenfalls geändert
sConnect = sConnect + ";DBQ=JDE_PROD" 'DBQ stimmt
sConnect = sConnect + ";ASY=OFF;" ' das klappt auch
Set conDB = dbWS.OpenConnection("get", dbDriverNoPrompt, , sConnect)
sSQLSelect = "Select F4101.IMITM, F4101.IMDSC1, F4101.IMSTKT, " & _
"F4101.IMMPST, F4101.IMPRP0 " & _
"FROM PRODDTA.F4101 " & _
"WHERE F4101.IMITM = " & Cells(13, 21).Value
Set rsTABLE = conDB.OpenRecordset( _
sSQLSelect, dbOpenDynamic) 'hier Error
With rsTABLE
If .RecordCount > 0 Then
sMsg = sMsg & .Fields(0) & vbCrLf
sMsg = sMsg & .Fields(1) & vbCrLf
sMsg = sMsg & .Fields(2) & vbCrLf
sMsg = sMsg & .Fields(3) & vbCrLf
sMsg = sMsg & .Fields(4)
MsgBox sMsg, vbOKOnly + vbInformation, "Artikelnummer:" & sArtNr
End If
.Close
End With
conDB.Close
End Sub

VBA-Gruss MartinM
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 17:33:25
EtoPHG
Hallo Martin,
Schwierig zu beurteilen.
Du scheinst mit JD Edwards zu arbeiten.
Bist Du sicher dass der SQL Select so stimmt, bzw. kannst Du diesen direkt (nicht via Excel) über ein DB Tool oder ein ODBC Test-Tool so absetzen und erhältst ein Resultat ?
M.E. müsste der FROM string " FROM PRODDTA F4101" heissen (ohne Punkt)
Der Code funktioniert für eine oracle Datenbank. Allerdings ältere Version.
Neuere Versionen haben einen wesentlich erweiterten ASY.... Parameter.
Gruss Hansueli
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 18:46:36
MartinM
Hallo Hansueli
Es ist richtig, wir arbeiten mit JD Edwards. Aber die DB2 ist von IBM.
Sitze zur Zeit Zuhause am PC, werde natürlich Morgen in der Früh den Select neu aufsetzen und versuchen ob es ohne die Punkte geht.
Normalerweise lasse ich die SQL mit QMF laufen und da benötige ich die Proddta vorgabe nicht.
Danke
Martin
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 21:10:15
EtoPHG
Hallo Martin,
Im Zug (SBB) ist mir noch etwas in den Sinn gekommen.
Wie ist der Artikelschlüssel der DB ? Numerisch oder alphanumerisch ?
Falls er alphanuemerisch ist müsste es heissen:
... = "'" & Cells(13, 21) & "'"
d.h. ein Hochkomma vor und nach dem Wert.
Ev. kannst Du auch den SQL-Fehler abfangen und per Msgbox ausgeben.
Gruss Hansueli
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
12.09.2005 22:24:48
MartinM
Hallo Hansueli
Einfach genial, die Schweizer.
Keine ruhige Minute (gäll), auch ich kann einfach nie abschalten bis eine Lösung da ist.
Danke für den Tip
werde natürlich umgehend am Morgen den Vorschlag in die Tat umsetzen und versuchen ob der Script funktioniert.
Bis bald
Martin
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 10:26:47
MartinM
Hallo Hansueli
Dein Ansatz war richtig, es war die Art wie ich das Feld deklariert hatte im Select es genügt wenn ich IMITM schreibe.
Aber das Ergebnis ist noch nicht richtig!
IMITM: 600100
(es werden nur Fragezeichen angezeigt anstelle der Werte)
IMDSC1: ? ? ?
IMSTKT: ?
IMMPST: ?
IMPRP0: ?
Es müsste so erscheinen
IMITM: 600100
IMDSC1: Rösti QUA3x500grher
IMSTKT: S
IMMPST: 2
IMPRP0: K
Was könnte da noch falsch sein?
VBA-Gruss MartinM
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 10:45:02
EtoPHG
Hallo Martin,
Ich kenne leider das Verhalten von DB2 zu wenig.
Aber versuch mal folgenden Ansätze:
Ansatz 1:
Bei den ? könnte es sich um Zeilenbeschriftungen handeln.
Es könnte sein, dass Du 2 Zeilen zurückbekommst.
VOR dem "If .RecordCount then" mal einbauen Msgbox "Recordcount=" & .RecordCount
wenn Resultat = 2, dann VOR dem "If .RecordCount then" einbauen ".MoveNext"
Ansatz 2:
Ev. müsste eine format_wandlung im SELECT stattfinden.
oracle syntax: SELECT TO_CHAR(column_name), TO_CHAR(column... FROM ...
ich weiss aber nicht ob die TO_CHAR Funktion in DB2 existiert.
Versuch mal zuerst den Ansatz 1
Gruss Hansueli
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 11:13:39
MartinM
Hallo Hansueli
Also der Ansatz 1 ergab Recordcount=1 das sollte ja eigentlich richtig sein.
Im Überwachungsfenster, habe ich danach die Befüllung überwacht und festgestellt, dass nur rsTable.Fields(0) abgefüllt wird mit dem IMITM Wert alle anderen .Fields(1) - .Fields(5) werden nicht abgefüllt.
Ist vielecht möglich dass die To_Char nötig ist, funktioniert auch bei DB2 (Habe im IE nachgeschaut http://publib.boulder.ibm.com/infocenter/db2help) aber habe nicht die nötige Ahnung wie das Deklariert werden muss.
VBA-Gruss MartinM
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 11:27:53
MartinM
Hallo Hansueli
Hier der Script welcher die Daten in eine Excel Tabelle schreibt, da funktioniert der Werteeintrag richtig. Vieleicht hilft Dir das weiter damit das mit der rsTable auch klappen könnte.


      
Sub Makro1()
    
With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=JDE_PROD;UID=MeinLogin;PWD=MeinPassword;MODE=SHARE;DBALIAS=JDE_PROD;", _
        Destination:=Range("G1"))
        .CommandText = Array( _
        "SELECT F4101.IMITM, F4101.IMDSC1, F4101.IMPRP0, F4101.IMSTKT, F4101.IMMPST" _
        & Chr(13) & "" & Chr(10) & "FROM PRODDTA.F4101 F4101" _
        & Chr(13) & "" & Chr(10) & "WHERE F4101.IMITM =" & Cells(13, 21).Value)
        .Name = "Abfrage von jde_prod"
        .FieldNames = 
True
        .RowNumbers = 
False
        .FillAdjacentFormulas = 
False
        .PreserveFormatting = 
True
        .RefreshOnFileOpen = 
False
        .BackgroundQuery = 
True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = 
True
        .SaveData = 
True
        .AdjustColumnWidth = 
True
        .RefreshPeriod = 0
        .PreserveColumnInfo = 
True
        .Refresh BackgroundQuery:=
False
    
End With
End Sub 


VBA-Gruss MartinM
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 12:18:24
EtoPHG
Hallo Martin,
Schau Dir mal diese Beispieldatei an:
https://www.herber.de/bbs/user/26517.xls
Mach folgendes:
Die gelben Felder anpassen
Das rote Feld auf JA setzen (Achtung Grossschreibung)
Den Wert der Artikelnummer verändern
Ändern sich auch die Daten ?
Vielleicht hilft Dir dieser (ganz andere Ansatz) mehr.
Gruss Hansueli
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 12:55:51
MartinM
Hallo Hansueli
Danke für die Musterdatei, es ist ein Workaround welcher sicher auch ein Weg so ähnlich wie der den ich schon hatte.
Das mit der MSGBOX würde das Aufstarten eines neuen Tabellenblatt verhindern und das schreiben in die Masterdatei ist nicht Möglich da diverse Schutzmechanismen die Datei vor Veränderung schützt (ist auch so gewollt).
Für den Moment ist es auch gut so, werde weiterversuchen den Extrakt in eine MSGBOX zu schreiben.
Bei Erfolg werde ich das Ergebnis Posten.
VBA-Gruss Martin
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 16:08:56
MartinM
Hallo Hansueli
Es läuft, dank Variantenvorschlag 2: Umwandel in Char da Feldtyp Grafic.


      
Sub executeSQL1()
    
    
Dim sMsg As String
    
    
Dim dbWS As Workspace
    
Dim conDB As Connection
    
Dim rsTABLE As Recordset
    
Dim sConnect As String
    
Dim sSQLSelect As String
    
Dim sArtNr As Integer
     
   
        
Set dbWS = CreateWorkspace("TempWorkspace", "Excel", "", dbUseODBC)
        sConnect = "ODBC;DSN=" & "JDE_PROD"
        sConnect = sConnect + ";UID=MeinLogin"
        sConnect = sConnect + ";PWD=MeinPasswort"
        sConnect = sConnect + ";DBAlias=JDE_PROD"
         
        
Set conDB = dbWS.OpenConnection("get", dbDriverNoPrompt, dbReadOnly, sConnect)
                       
        sSQLSelect = "Select IMITM, CHAR(IMDSC1) AS DSC1, CHAR(IMSTKT) AS STKT," _
        & "CHAR(IMMPST) AS MPST, CHAR(IMPRP0) AS PRP0 FROM PRODDTA.F4101 WHERE IMITM =" & Cells(13, 21).Value
        
        
Set rsTABLE = conDB.OpenRecordset( _
                     sSQLSelect, dbOpenDynamic)
        
With rsTABLE
            
If .RecordCount > 0 Then
               sMsg = sMsg & "IMITM: " & .Fields(0).Value & vbCrLf
               sMsg = sMsg & "DSC1: " & .Fields(1).Value & vbCrLf
               sMsg = sMsg & "STKT: " & .Fields(2).Value & vbCrLf
               sMsg = sMsg & "MPST: " & .Fields(3).Value & vbCrLf
               sMsg = sMsg & "PRP0: " & .Fields(4).Value
               MsgBox sMsg, vbOKOnly + vbInformation, "Artikelnummer:" & sArtNr
            
End If
            .Close
        
End With
        conDB.Close
End Sub 


Danke für die grosszügige Mithilfe
VBA-Gruss MartinM
Der Weg ist das Ziel!
Anzeige
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 18:01:14
EtoPHG
Hallo Martin,
Freut mich das es doch noch geklappt hat.
P.S. alle Referenzen mit "sArtNr" kannst Du noch aus dem Code streichen.
Schönen Abend
Gruss Hansueli
AW: SQL Abfrage Ergebnis in Userform?
13.09.2005 20:44:21
MartinM
Hallo Hansueli
Habe ich bereits entfernt und mit .Fields(0) ersetzt.
Aber Danke trotzdem nocheinmal, wir haben einen riesigen Schritt in punkto Arbeitsefizienz erreicht, da diese Funktion neu für alle Kurzabfragen eingesetzt werden kann.
Gruss ein Landsmann
Martin
Der Weg ist das Ziel!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SQL Abfrage Ergebnis in Userform


Schritt-für-Schritt-Anleitung

  1. Verweis aktivieren: Stelle sicher, dass du die Microsoft DAO 3.6 Object Library aktiviert hast. Gehe dazu in den VBA-Editor zu Extras > Verweise und aktiviere die entsprechende Bibliothek.

  2. VBA-Skript anlegen: Erstelle ein neues Makro in deinem Excel-Dokument, um die SQL Abfrage auszuführen. Das Grundgerüst könnte so aussehen:

    Sub executeSQL()
       Dim sMsg As String
       Dim dbWS As Workspace
       Dim conDB As Connection
       Dim rsTABLE As Recordset
       Dim sConnect As String
       Dim sSQLSelect As String
    
       Set dbWS = CreateWorkspace("TempWorkspace", "Excel", "", dbUseODBC)
       sConnect = "ODBC;DSN=YourDataSourceName;UID=YourUserID;PWD=YourPassword"
       Set conDB = dbWS.OpenConnection("get", dbDriverNoPrompt, , sConnect)
    
       sSQLSelect = "Select F4101.IMITM, F4101.IMDSC1 FROM PRODDTA.F4101 WHERE F4101.IMITM = " & Cells(13, 21).Value
       Set rsTABLE = conDB.OpenRecordset(sSQLSelect, dbOpenDynamic)
    
       If rsTABLE.RecordCount > 0 Then
           sMsg = "Artikelnummer: " & rsTABLE.Fields(0).Value
           MsgBox sMsg
       End If
    
       rsTABLE.Close
       conDB.Close
    End Sub
  3. Abfrage ausführen: Stelle sicher, dass du die Artikelnummer in Zelle U13 hast, um die Abfrage auszuführen.


Häufige Fehler und Lösungen

  • Fehlermeldung: "Benutzerdefinierter Typ nicht definiert": Dies tritt auf, wenn der erforderliche Verweis auf die DAO-Bibliothek nicht aktiviert ist. Aktiviere diesen wie oben beschrieben.

  • ODBC-Aufruf fehlgeschlagen: Überprüfe, ob der ODBC-Datenquellenname (DSN) und die Zugangsdaten korrekt sind. Teste die Verbindung in einem ODBC-Testtool.

  • Fragezeichen in den Ergebnissen: Wenn die SQL-Abfrage Ergebnisse mit Fragezeichen zurückgibt, könnte dies an einem Formatierungsproblem liegen. Stelle sicher, dass die Datenbankfelder die richtigen Datentypen haben.


Alternative Methoden

  • Abfrage über Excel: Anstatt die Daten in eine Userform auszugeben, könntest du die SQL Abfrage auch direkt in eine Excel-Tabelle schreiben, indem du ein QueryTable nutzt. Hier ein Beispiel:

    Sub Makro1()
       With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=YourDSN;UID=YourUserID;PWD=YourPassword;", Destination:=Range("A1"))
           .CommandText = "SELECT F4101.IMITM, F4101.IMDSC1 FROM PRODDTA.F4101 WHERE F4101.IMITM = " & Cells(13, 21).Value
           .Refresh
       End With
    End Sub
  • Verwendung von SQL-Formularen: Du kannst auch ein SQL-Formular erstellen, das die Abfrageergebnisse anzeigt, anstatt eine MessageBox zu verwenden.


Praktische Beispiele

Hier ist ein Beispiel für eine vollständige SQL-VBA-Abfrage, die Ergebnisse in einer Userform anzeigt:

Sub executeSQL()
    Dim sMsg As String
    Dim dbWS As Workspace
    Dim conDB As Connection
    Dim rsTABLE As Recordset
    Dim sConnect As String
    Dim sSQLSelect As String

    Set dbWS = CreateWorkspace("TempWorkspace", "Excel", "", dbUseODBC)
    sConnect = "ODBC;DSN=YourDSN;UID=YourUserID;PWD=YourPassword"
    Set conDB = dbWS.OpenConnection("get", dbDriverNoPrompt, , sConnect)

    sSQLSelect = "SELECT F4101.IMITM, CHAR(F4101.IMDSC1) AS IMDSC1 FROM PRODDTA.F4101 WHERE F4101.IMITM = '" & Cells(13, 21).Value & "'"
    Set rsTABLE = conDB.OpenRecordset(sSQLSelect, dbOpenDynamic)

    If rsTABLE.RecordCount > 0 Then
        sMsg = "Artikelnummer: " & rsTABLE.Fields(0).Value & vbCrLf
        sMsg = sMsg & "Beschreibung: " & rsTABLE.Fields(1).Value
        MsgBox sMsg
    End If

    rsTABLE.Close
    conDB.Close
End Sub

Tipps für Profis

  • Verwendung von dbOpenDynamic: Dies ermöglicht dir, Änderungen in der Datenbank während der Abfrage zu sehen. Dies ist besonders nützlich, wenn du in einer dynamischen Umgebung arbeitest.

  • SQL-Fehler abfangen: Implementiere eine Fehlerbehandlung, um mögliche SQL-Fehler abzufangen und informiere den Benutzer über die Probleme.

  • Verwende Parameter: Für bessere Sicherheit und Performance kannst du Parameter in deiner SQL-Abfrage verwenden, anstatt Werte direkt in die Abfrage einzufügen.


FAQ: Häufige Fragen

1. Kann ich die SQL-Abfrage auch auf eine Excel-Tabelle schreiben?
Ja, du kannst die SQL-Abfrage so anpassen, dass die Ergebnisse in eine Excel-Tabelle geschrieben werden, indem du ein QueryTable verwendest.

2. Was mache ich, wenn die Datenbank nicht erreichbar ist?
Überprüfe die Verbindungseinstellungen, den DSN und stelle sicher, dass die Datenbank läuft. Teste die Verbindung mit einem ODBC-Testtool.

3. Wie kann ich die SQL-Abfrage in eine Userform integrieren?
Du kannst die Ergebnisse der SQL-Abfrage in einer Userform anzeigen, indem du die entsprechenden Steuerelemente (z. B. TextBoxen) mit den Werten aus dem Recordset befüllst.

4. Gibt es eine Möglichkeit, die SQL-Abfrage zu debuggen?
Ja, du kannst MsgBox verwenden, um die SQL-Abfrage vor der Ausführung anzuzeigen, oder den Debug.Print Befehl verwenden, um die Abfrage im Direktfenster anzuzeigen.

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