-
Dazu ist natürlich ein VBA nötig.
Mit MS-Query geht es allerdings auch (so arbeite ich).
Für komplexere Abfragen (Joins u.ä.) erstelle ich mir ein View auf der AS/400, so dass ich in MS-Query nur noch die View auswählen muss und die grafische Darstellung des MS-Query verwenden kann.
Parameter werden entweder mit "=?" oder mit "=[ParameterName]" in die Kriterien eingetragen.
Im Excel kann ich dann diese Parameter einzelnen Zellen zuordnen.
VBA ist dafür überhaupt nicht nötig.
Speziell zu dem Like-Problem.
Da MS-Query nur einfache Abfragen kennt muss man halte dem Bediener sagen, dass das %-Zeichen am Anfang und Ende halt mit einzugeben ist.
-
Ich arbeite zur zeit fast nur mit QDY Dateien.
Aber für aktuelle Probleme kann ich den user dies nicht erklären bzw. die machen es trozdem falsch.
Mit VBA kann ich auch noch die Eingabe mit User wegschreiben, die frage ist eben ob ich den CODE den User & PW eintragen muss oder es eine andere möglichkeit gibt.
Aber auch Danke
-
Die Frage ist dein Design.
Soll sich der User selber anmelden, dann kommt ein Anmeldebild.
Verwendest du einen internen User musst du den im Code hinterlegen.
Die Anmeldung steurst du über die Prompt-Eigenschaft im Connection-Objekt:
MyConnection.Properties("Prompt") = Zahl
Zahl =
1 (adPromptAlways)
2 (adPromptComplete) <= Default
3 (adPromptCompleteRequired)
4 (adPromptNever) <= keine Anmeldung
How To Invoke a Login Prompt When Opening an ADO Connection
-
Danke habe jetzt aber ein anderes Problem mein String ist zu groß!
-
Die Fehlermeldung musst du da schon genauer angeben.
Welcher String ist zu groß ?
Ein SQL-Befehl kan bis zu 32740 Zeichen lang werden, ich glaube nicht dass du das erreicht hast.
-
Moin,
war etwas im stress gestern.
Fehlermeldung: Laufzeitfehler: 1004 (Allgemeiner ODBC-Fehler).
Mein Code:
Sub TEST()
Dim qt As QueryTable
Dim Eingabe As String
Dim Fehler As String
Fehler = "Leer nicht erlaubt"
Eingabe = InputBox("Eingeben:")
If Eingabe = "" Then GoTo ERRORHANDLER
ConnectionTimeout = 6000
AsyncRetryInterval = 6000
sqlstring = "SELECT * FROM bbb, aaa left outer join ccc on SIT=SIT and DEP=DEP and NENP =NENP, dddd WHERE E1NENT = NENT and SIT = SIT and DEP = DEP and BCHE = BCHE and SIT=SIT and DEP=DEP and NENP = NENP and SIT= 'FF' and DEP ='LEICA'and E3NEXT like ('%'||" + Eingabe + "||'%')"
connstring = _
"ODBC;DSN=xxx;UID=USERID;PWD=Pass;Database=96Sales"
With ActiveSheet.QueryTables.Add(Connection:=connstring , _
Destination:=Range("E1"), Sql:=sqlstring)
.Refresh
End With
Exit Sub
ERRORHANDLER:
MsgBox Fehler
End Sub
SQL funktioniert in der SQL umgebung ohne Problem, wenn ich diese VBA laufen lasse und mir den sqlstring überwache sehe ich leider nicht alles in dem string!
-
Hallo,
also hier wäre ein Beispiel von mir, das funktioniert (das ist hier nur eine fiktive SQL-Anweisung). Die Variable "firma" wird aus einer Excel-Zelle gefüllt.
Der Benutzername und das Kennwort kann hier direkt mitgegeben werden. Ich arbeite viel lieber mit diesen kleinen VBAs als mit DQY-Dateien, da ich damit wesentlich flexibler bin. Ich kann hier z.B. über weitere Module das Tabellenblatt entsprechend vorbereiten bzw. die Ausgabe nachträglich formatieren.
Gruß,
KM
Code:
Sub Artikelzusatztexte()
' Variablen definieren
Dim firma As Variant
Dim sql As String
Dim qt As QueryTable
firma = Range("B1").Text
' SQL-Abfrage auf der AS/400 vorbereiten
sql = "select blabla "
sql = sql & "from artstamm "
sql = sql & "where finr = " & firma & " "
sql = sql & "order by artn"
' Tabellenblatt für Ergebnisliste vorbereiten
Ergebnisliste_vorbereiten
' Abfrage auf der AS/400 ausführen und Ergebnisliste füllen
Set qt = ActiveSheet.QueryTables.Add(Connection:=Array( _
"ODBC;DRIVER={iSeries Access ODBC Driver};CONNTYPE=2;TRANSLATE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DFTPKGLIB=QGPL;DBQ=LIB;SYSTEM=ISERIES;UID=Benutzername;PWD=Kennwort;BLOCKFETCH=1;BLOCKSIZE=512"), Destination:=Range("A2"))
qt.CommandText = sql
qt.Name = "Artikelzusatztexte"
qt.FieldNames = False
qt.RowNumbers = False
qt.FillAdjacentFormulas = True
qt.PreserveFormatting = True
qt.RefreshOnFileOpen = False
qt.BackgroundQuery = False
qt.RefreshStyle = xlInsertDeleteCells
qt.SavePassword = True
qt.SaveData = True
qt.AdjustColumnWidth = False
qt.RefreshPeriod = 0
qt.PreserveColumnInfo = True
qt.Refresh
End Sub
-
Hallo,
das scheint nur an der Syntax Deines SQL zu liegen.
Versuche doch mal statt
E3NEXT like ('%'||" + Eingabe + "||'%')
folgendes
E3NEXT like ('%" & Eingabe & "%')
Gruß,
KM
-
Da du als Eingabe eine Zeichenkette abgibst, gehe ich hier von einem Syntaxfehler aus:
like ('%'||" + Eingabe + "||'%')
In diesem Fall musst du die Variable Eingabe wieder in Hochkomma einbetten und ggf. vorhandenen Hochkomma verdoppeln, ausserdem kannst du "||" vergessen da du den String ja zusammenbaust.
" ... like '%" & replace(Eingabe, "'", "''") & "%' ..."
-
Habe eure Anmerkung versucht um zusetzen hat leider nicht funktioniert.
Wegen dem LIKe Problem habe ich auch mal mit „=“ gearbeitet und funktioniert leider nicht. Ich vermute das dieser String nicht richtig übergeben wird eventuelle ein BUG?
Diese (Like ('%'||" + Eingabe + "||'%')) funktioniert bei einer Datei aber leider nicht bei meinem großem SQL.
Aber noch mal Danke
-
Mach doch mal einen MsgBox auf Deinen SQL-String. Dann siehst Du doch wo das Problem liegt bzw. wie der SQL im Endeffekt aussieht. Du füllst die Variable aus einer Inputbox. Kannst sie testweise ja mal aus einem Zellinhalt füllen.
Gruß,
KM
-
Funktionier immer noch nicht! so ein schei...
Habe mir eine msgbox gebaut SQL sieht gut aus.
Habe den Wert über Eingabe via Zelleninhalt gefüllt aber immer noch das gleiche Problem.
wenn ich aber das SQL per SQL auf der AS400 laufen lasse und nur "+ Eingabe +" ersetze funktioniert es ohne Problem.
Kann es sein das ein Left outer join oder mehrere Dateien per SQL via Query nicht funktioniert?
Weil wenn ich es über QDY laufen lasse mit like ? funktioniert diese SQL auch, jetzt habe ich die Vermutung, dass es über QueryTables nicht funktioniert.
Hast du schon mal mehrere Dateien über QueryTables eingebunden?
Gruss
Miles
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 26-10-06, 10:07
-
By ChrisX in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 11-10-06, 15:31
-
By Flappes in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 06-10-06, 08:39
-
By KL_RPG in forum NEWSboard Drucker
Antworten: 5
Letzter Beitrag: 12-05-06, 15:07
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks