-
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
-
Zitat von Hubert
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
-
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.
-
Zitat von Hubert
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
-
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.
-
... das liegt am naming(*SQL), das ist eine Property in den Treiber Einstellungen, bei naming(*SYS) gehts nach libl
D*B
Zitat von Hubert
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
-
@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.
-
Wenn du die lib im connection-objekt angeben möchtest, kannst du das mit:
und viele weitere optionen findest du hier: Connection string keywords
lg andreas
-
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.
-
... 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 von Hubert
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.
-
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 ?
-
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
-
By cassi in forum NEWSboard Drucker
Antworten: 5
Letzter Beitrag: 11-02-09, 14:10
-
By olafu in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-10-06, 08:13
-
By Marsman in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 11-07-06, 10:50
-
By Biene in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 08-08-02, 11:29
-
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
-
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