[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    163

    ODBC greift auf falsche Bibliothek zu

    Hallo zusammen,

    ich verzweifle fast: in Excel habe ich einen ODBC Zugriff, der auf eine Bibliothek zugreifen will, die es nicht gibt. Der Name der Bibliothek, auf die er zugreifen will, entspricht dem Namen des angemeldeten Benutzers.

    Code:
                strSelect = "SELECT * FROM DIVL00 WHERE " & _
                            "XPFIRM = '" & pFirma & "' " & _
                            "AND XPANWG = 'WAW' " & _
                            "AND XPSA = '060' " & _
                            "AND XPRKEY = 'ARDIPU'"
                With rsAS400
                    .CursorType = adOpenForwardOnly
                    .CursorLocation = adUseClient
                    .Open strSelect, conAS400
                End With
    Gebe ich die Datei qualifiziert mit Bibliotheksnamen an, ist alles in Ordnung.

    Kann mir jemand erklären, warum die Kiste immer mit dem SQL Fehler SQL0204 reagiert?

    Herzlichen Dank

    Hubert

  2. #2
    Registriert seit
    Jul 2005
    Beiträge
    1.053
    Zitat Zitat von Hubert Beitrag anzeigen
    Hallo zusammen,

    ich verzweifle fast: in Excel habe ich einen ODBC Zugriff, der auf eine Bibliothek zugreifen will, die es nicht gibt. Der Name der Bibliothek, auf die er zugreifen will, entspricht dem Namen des angemeldeten Benutzers.
    Weshalb änderst du nicht in Excel den beutzernamen in Bibliotheksnamen

    Das sollte doch das prob umschiffen - klar ist nicht so wirklich astrein., aber wenn es funktioniert.

    Gruß AS400.lehrling

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    163
    Dies war ja nur eine einzelne Abfrage; in dem Programm gibt es noch jede Menge. Und je nach Umgebung sind die Bibliotheksnamen unterschiedlich. Deshalb will ich ja auch über die LIBL zugreifen. Was ich nicht verstehe, dass da in einer Bibliothek gesucht wird, die

    1. nicht von mir angegeben wurde
    2. nicht in der LIBL steht
    3. auf der Maschine überhaupt nicht existiert.

    Die Verbindung wird hiermit geöffnet:

    Code:
    strConn = "DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=" & _
                strSystem & ";LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;" & _
                "DESC=Verbindung;TRANSLATE=1;SSL=;User Id=" & strUser & _
                "; Password=" & strPWD & ";"
        With conAS400
            .ConnectionString = strConn
            .CursorLocation = adUseClient
            .Mode = adModeReadWrite
            .Open strConn
        End With
    Das hab ich aus einer anderen Excel Tabelle übernommen, wo es nicht zu diesen Problemen kommt.

  4. #4
    Registriert seit
    Jul 2005
    Beiträge
    1.053
    Zitat Zitat von Hubert Beitrag anzeigen
    Dies war ja nur eine einzelne Abfrage; in dem Programm gibt es noch jede Menge. Und je nach Umgebung sind die Bibliotheksnamen unterschiedlich. Deshalb will ich ja auch über die LIBL zugreifen. Was ich nicht verstehe, dass da in einer Bibliothek gesucht wird, die

    1. nicht von mir angegeben wurde
    2. nicht in der LIBL steht
    3. auf der Maschine überhaupt nicht existiert.

    Die Verbindung wird hiermit geöffnet:

    Code:
    strConn = "DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=" & _
                strSystem & ";LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;" & _
    Wo kommt den PKG=QGPL/DEFAULT her ?
    Das ist doch die definition der sitzung bzw des zugriffs auf die i5.

    Schau dir doch mal auf der i5 an was da unter QGPL/DEFAULT in DEFAULT steht.

    Müste ja eine Lib sein, also teildateien enthalten in denen sich die definition(en) befinden.

    Gruß AS400.lehrling

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Der Default für den Zugriff per ODBC ist bei unqualifizierten Tabellen immer der Username der Anmeldung als Lib !
    Man kann die Defaultlib in der Verbindung angeben, so dass diese geändert wird.
    Allerdings sucht ODBC alle Tabellen ohne Lib ausschließlich in dieser Lib.

    Man kann auch noch das sog. Naming in System ändern und eine Libl angeben, dann wird auch über LIBL gesucht, der Tabellenname ist dann aber wieder "Lib/Name" statt "Lib.Name".

    Das halte ich aber für wenig sinnvoll, da sowieso eine LIBL angegeben werden muss, der Default ist nämlich auch hier der Systemwert QUSRLIBL und daher nicht benutzerspezifisch.

    Am besten erstellst du für jeden User eine DSN (ODBC-Datenquelle) und trägst dort die Lib als Default ein.
    In der Verbindung gibst du dann nur noch
    "DSN=MyDsn"
    an, der Benutzer bekommt ggf. auch noch ein Anmeldebild ob er das denn auch darf.
    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
    Mar 2002
    Beiträge
    5.287
    ... das liegt am naming(*SQL), das ist eine Property in den Treiber Einstellungen, bei naming(*SYS) gehts nach libl

    D*B

    Zitat Zitat von Hubert Beitrag anzeigen
    Hallo zusammen,

    ich verzweifle fast: in Excel habe ich einen ODBC Zugriff, der auf eine Bibliothek zugreifen will, die es nicht gibt. Der Name der Bibliothek, auf die er zugreifen will, entspricht dem Namen des angemeldeten Benutzers.

    Code:
                strSelect = "SELECT * FROM DIVL00 WHERE " & _
                            "XPFIRM = '" & pFirma & "' " & _
                            "AND XPANWG = 'WAW' " & _
                            "AND XPSA = '060' " & _
                            "AND XPRKEY = 'ARDIPU'"
                With rsAS400
                    .CursorType = adOpenForwardOnly
                    .CursorLocation = adUseClient
                    .Open strSelect, conAS400
                End With
    Gebe ich die Datei qualifiziert mit Bibliotheksnamen an, ist alles in Ordnung.

    Kann mir jemand erklären, warum die Kiste immer mit dem SQL Fehler SQL0204 reagiert?

    Herzlichen Dank

    Hubert
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    @Hubert
    PKG ist ein SQLPKG in dem die AS/400 die SQL's zwecks Optimierung ablegt.
    Per PRTSQLINF kann man sich anschauen,welche SQL's da so gemacht wurden.
    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

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenn du die lib im connection-objekt angeben möchtest, kannst du das mit:
    Code:
    DBQ=MYLIB;
    und viele weitere optionen findest du hier: Connection string keywords

    lg andreas

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    163
    Ich muss mehrere Dateien lesen, die teilweise in verschiedenen Bibliotheken stehen. Ich habe nach den Hinweisen, die ich bekommen habe, den Connection String angepasst:

    Code:
    strconn = "DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=" & _
                strSystem & ";LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;" & _
                "DBQ=" & strLibl & ";" & _
                "DESC=Verbindung;TRANSLATE=1;SSL=;User Id=" & strUser & _
                "; Password=" & strPWD
    In strLibl sind alle Bibliotheken, die in Frage kommen. Ich hab es mit Blank als Separator versucht und mit Komma: Es wird immer auf die erste Bibliothek in der LIBL zugegriffen, auch wenn die Datei in einer anderen LIB steht.

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... dein naming steht immer noch auf SQL, da fehlt noch NAM=1 und ein Blick in das Handbuch wäre auch nicht schlecht!!!

    D*B

    Zitat Zitat von Hubert Beitrag anzeigen
    Ich muss mehrere Dateien lesen, die teilweise in verschiedenen Bibliotheken stehen. Ich habe nach den Hinweisen, die ich bekommen habe, den Connection String angepasst:

    Code:
    strconn = "DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=" & _
                strSystem & ";LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;" & _
                "DBQ=" & strLibl & ";" & _
                "DESC=Verbindung;TRANSLATE=1;SSL=;User Id=" & strUser & _
                "; Password=" & strPWD
    In strLibl sind alle Bibliotheken, die in Frage kommen. Ich hab es mit Blank als Separator versucht und mit Komma: Es wird immer auf die erste Bibliothek in der LIBL zugegriffen, auch wenn die Datei in einer anderen LIB steht.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Um über LIBL zuzugreifen musst du in der Verbindung noch

    ...;Naming=1;...

    konfigurieren.
    In DBQ werden die Libs mit Blank getrennt, die 1. ist immer die Default-Lib.

    Aber Achtung:
    Wenn du gezielt auf ein bestimmtes Objekt (Datei/Procedure/Function) in einer Lib zugreifen willst ist die Syntax dann "MyLib/MyObj"!


    PS:
    Es ist immer besser, die Lib gezielt zu benennen, da du sonst durch Aktivitäten auf der AS/400 (Verschieben/Kopieren von Objekten) ggf. die falsche Datei bekommst.
    Da du die Libs doch kennst (du musst sie doch schließlich angeben), warum kannst du in deinen SQL's die Tabellen nicht qualifiziert angeben ?
    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

  12. #12
    Registriert seit
    Aug 2003
    Beiträge
    163
    Eine Kleinigkeit fehlte noch im DBQ:

    Note: The first library listed in this property will also be the default library, which is used to resolve unqualified names in SQL statements. To specify no default library, a comma should be entered before any libraries.
    Nachdem ich das NAM=1; und das Komma an der ersten Stelle des QBQ klappte es tadellos.

    Vielen Dank für die Hilfe

    Hubert

Similar Threads

  1. Druck von PC auf AS400-Drucker
    By cassi in forum NEWSboard Drucker
    Antworten: 5
    Letzter Beitrag: 11-02-09, 14:10
  2. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13
  3. Problem ODBC und VB.NET
    By Marsman in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 11-07-06, 10:50
  4. Antworten: 2
    Letzter Beitrag: 08-08-02, 11:29
  5. Zugriff MS Access auf AS/400 via ODBC
    By SL in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-07-02, 11:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •