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

Thema: DQY Problem

Hybrid View

  1. #1
    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

  2. #2
    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

  3. #3
    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

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

  5. #5
    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

  6. #6
    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!

  7. #7
    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

  8. #8
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Hallo,

    das scheint nur an der Syntax Deines SQL zu liegen.

    Versuche doch mal statt

    E3NEXT like ('%'||" + Eingabe + "||'%')

    folgendes

    E3NEXT like ('%" & Eingabe & "%')

    Gruß,
    KM

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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, "'", "''") & "%' ..."
    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

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

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

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

  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
  •