Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
664to668
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
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!

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
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!
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
Anzeige
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
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
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!
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
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!
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!

80 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige