View Full Version : IBMDA400 OLEDB
@Sven
Wie heißts so schön: wer lesen kann ist klar im Vorteil !
Wahrscheinlich sollte man die Fehler in 10-facher Schriftgröße mit dick Rot markeiren. Also mehr als auf die doppelte {-Klammer hinzuweisen geht wirklich nicht.
In der Eile habe ich übersehen, dass es mehrere Seiten zu diesem Thema gibt
und dadurch auch den Beitrag von Sven nicht gelesen.
Ich probiere es sofort aus.
rst
Danke Sven für den Tipp.
Dein Antworttext.
Zwei geschweifte Klammern rufen immer den Remote-Command Server, weile der CommandText dann von IBMDA400 als Command interpretiert wird und nicht als SQL-String !!!.
Ich habe es mit einer geschweiften Klammer probiert.
Es ist richtig das dann der Database Server Job QZDASOINIT angesprochen wird,
aber wie Du schon schreibst "von IBMDA400 als Command interpretiert wird und nicht als SQL-String !!!." er wird als SQL interpretiert und bringt mir somit einen SQL Fehler.
Der Zweite Tipp war Super...
Mit dem ODBC Treiber kann mann das Problem Lösen.
folgender Link gibt noch nützliche Hinweise (Listing3):
http://www-106.ibm.com/developerworks/db2/library/techarticle/dm-0402chong2/index.html#listing2 (http://www-106.ibm.com/developerworks/db2/library/techarticle/dm-0402chong2/index.html#listing2)
Beispiel Programm:
ODBC-Treiber in Verbindung mit den ADO-Objektklassen.
Sub Artikel_anlegen()
Dim Sachn$, strSQL1$
Dim Merk1 As Boolean
Sachn = "'1234-0235'"
Const IP = "192.1.1.xxx"
'Const cnnstr400 = "DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=" & IP & ";DBQ=LIB1,LIB2,LIB3,LIB4"
Dim cnn400 As ADODB.Connection
Dim cmd400 As ADODB.Command
Dim rst400 As ADODB.Recordset
Merk1 = True
On Error Resume Next
'Open Connection
Set cnn400 = New ADODB.Connection
cnn400.ConnectionString = "DRIVER={Client Access ODBC Driver (32-bit)};SYSTEM=" & IP & ";DBQ=Lib1,LIB2,LIB3,LIB4"
cnn400.Provider = "MSDASQL"
cnn400.CursorLocation = adUseClient
cnn400.Open , "user", "pwd"
strSQL1 = _
"SELECT TSACHN " & _
"FROM LIB1.Artikelstamm " & _
"WHERE (Artikel =" & Sachn & ") "
'Set the command text
Set cmd400 = New ADODB.Command
Set cmd400.ActiveConnection = cnn400
With cmd400
strSQL1 = _
"SELECT Artikel " & _
"FROM LIB1.Artikelstamm " & _
"WHERE (Artikel =" & Sachn & ") "
.CommandTimeout = 100
.CommandText = strSQL1
.CommandType = adCmdText
.Execute
End With
'Open the recordset
Set rst400 = New ADODB.Recordset
Set rst400.ActiveConnection = cnn400
rst400.Open cmd400
'Prüfen ob Artikelnummer im Teilestamm vorhanden ist.
While Not rst400.EOF
MsgBox "Sachnummer ist im Artikelstamm vorhanden."
Merk1 = False
rst400.MoveNext
Wend
If Merk1 = True Then
strSQL1 = _
"INSERT INTO LIB1.Artikelstamm (Artikel) VALUES(" & Sachn & ")"
With cmd400
.CommandText = strSQL1
.CommandType = adCmdText
.Execute
End With
End If
'close the connection
cnn400.Close
Set cmd400 = Nothing
Set rst400 = Nothing
Set cnn400 = Nothing
End Sub
Dieses Programm läuft unter VB6.
Der Database Server Job QZDASOINIT hat somit die gewünschten Bibliotheken
im Zugriff..
Bibliotheksliste anzeigen
System: MeineAS400
Job: QZDASOINIT Benutzer: QUSER Nummer: 165496
Auswahl eingeben und Eingabetaste drücken.
5=Objekte in Bibliothek anzeigen
Aus-
wahl Bibliothek Art Text
QSYS SYS Systembibliothek
QSYS2 SYS Systembibliothek für einh. Anwendungsunterstützung
QHLPSYS SYS
QUSRSYS SYS
QIWS PRD
LIB1 USR
LIB2 USR
LIB3 USR
LIB4 USR
Der IBMDA400 hat noch ein paar weitere Nachteile:
Journalisierung wird NICHT unterstützt (warum auch immer) und, was ich in der Verbindungsfolge IMMER einstelle (inzwischen Default): COMPRESSION=1 um die Datenkomprimierung einzuschalten (von IBMDA400 nicht unterstützt).
Bei LAN's gibt es nämlich keine Einstellmöglichkeit (wäre schön) sondern nur bei WAN's. Das Abrufen der Daten erfolgt tatsächlich schneller.