[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte

Thema: DQY Problem

  1. #1
    Registriert seit
    Oct 2003
    Beiträge
    172

    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!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Da fehlt ne Klammer:

    cast(? AS CHAR (15))

    Excel-MSQuery unterstützt aber in der Form keine Parameter.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    172
    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?

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    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

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    172
    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?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Oct 2003
    Beiträge
    172
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Oct 2003
    Beiträge
    172
    Danke habe jetzt aber ein anderes Problem mein String ist zu groß!

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Oct 2003
    Beiträge
    172
    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!

  12. #12
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    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

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Problem mit Steuerzeichen in Datenbank?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-10-06, 10:07
  3. Authorization Problem nach ändern der Primary Group
    By ChrisX in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-10-06, 15:31
  4. Merkwürdiges Problem in VRPG
    By Flappes in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 06-10-06, 08:39
  5. IPDS Drucker Problem
    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
  •