-
DQY Problem
Hallo zusammen,
habe ein kleines Problem bzw. 2 Probleme:
1.) Habe ein DQY erstellt wollte mit variablen arbeiten aber dies funktioniert leider nicht bekomme immer wieder einen Fehlermeldung: "SQL0104 - Token 15 ungültig. Gültige Token FOR CCSID." Kann hiermit leider wenig anfangen.
Code von *.QDY
XLODBC
1
DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=XXXX;CMT=0;DBQ=qsys2;NAM=1;DFT=0;DSP= 0;TFT=0;TSP=0;DEC=1;XDYNAMIC=1;RECBLOCK=2;BLOCKSIZ E=512;SCROLLABLE=0;TRANSLATE=0;LAZYCLOSE=1;LIBVIEW =1;REMARKS=0;MGDSN=0;
SELECT * FROM XXXX WHERE NEXT like ('%'|| cast(? AS CHAR 15)||'%')
TEST VAR
1
BREAKLVL OVERFLOW ARTNR LMNGE01 POSWT01
2.) Wenn ich den ODBC Treiber in Excel-VBA laden will ohne die Datei einzubinden sondern den Inhalt von QDY direkt ins VBA laden will, eventuell kann mir jemand auch helfen?
Danke euch!
-
Da fehlt ne Klammer:
cast(? AS CHAR (15))
Excel-MSQuery unterstützt aber in der Form keine Parameter.
-
Danke SQL hat jetzt keine Fehlergemeldet.
Aber wie du schon gesagt hast funktioniert es nicht!
Nachtrag:
Was für eine möglichkeite hätte ich dann noch?
-
Hallo,
mit diesen DQY-Dateien arbeite ich mittlerweile überhaupt nicht mehr, da es immer diverse Probleme mit der SQL-Syntax gab.
Um SQL-Abfragen direkt in Excel einzubauen, verwende ich inzwischen nur noch QueryTable-Objekte. Dem QueryTable kannst Du die komplette ODBC-Verbindung mitgeben und die zugehörige SQL-Anweisung als String. Diese SQL-Anweisung kannst Du vorher natürlich dynamisch zusammenbauen. Sie funktioniert genauso wie wenn Du sie im interaktiven SQL (STRSQL) aufrufst.
Hab inzwischen schon viele Excel-Tabellen so erstellt und somit Routine-Abfragen mit diversen Eingabefeldern den Benutzern zur Verfügung gestellt. Das funktioniert ohne Probleme. Google einfach mal nach QueryTable. Da gibt's genug Beispiele.
Gruß,
KM
-
Danke für den TIP KM.
Kannst du mir vielleicht ein Muster zukommen lassen?
Oder eine gute Internetseite dies bezüglich?
Danke
Nachtrag: Wie machst du das mit USER und PW? trägst du dies im VBA ein? Wenn die ODBC-Verbindung nicht eingetragen ist am PC, wie machst du dies?
-
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
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