PDA

View Full Version : Update AS400 Datenbank per OLEDB/ADO



hpheim
23-05-03, 12:41
Hallo,

ich versuche Daten aus einer Access-Datenbank per OLEDB/ADO in eine leere
AS400-Datenbank zurückzuschreiben.
Der umgekehrte Weg, die Daten von einer AS400-Datenbank per OLEDB/ADO in eine
leere Access-Datenbank zu schreiben funktioniert übrigens klaglos.
Ich verwende dafür folgenden Code

Set cn400 = CreateObject("ADODB.Connection")
cn400.Provider = "IBMDA400"
cn400.Properties("data source") = "MyAs400"
cn400.Open

Set rs400 = CreateObject("ADODB.Recordset")
Set cmd = CreateObject("ADODB.Command")

Set cmd.ActiveConnection = cn400
cmd.Properties("Updatability") = 1 + 2 + 4
cmd.CommandText = "/QSYS.LIB/MyLib.LIB/MyFile.FILE(*FIRST, *NONE)"
cmd.Parameters.Append cmd.CreateParameter("P1", adChar, adParamInput, 1)

'Laut CA Toolkit soll nun die AS400 DB geöffnet werden
Set rs400 = cmd.Execute(Rcds, Parms, adCmdTable)

Nun erhalte ich folgenden auch im Systemprotokoll aufgelisteten Fehler


23.05.2003 12:44:40.54 Client Access Communication
Typ=Fehler
[CWBCO1003]
Winsock-Fehler, Funktion connect() hat 10061 zurückgegeben


Dieser Fehler wird mir auch im VBA angezeigt. Im CA-Systemprotokoll folgen danach noch
folgende Zeilen


23.05.2003 12:44:41.50 Client Access Communication
Typ=Informationen
Verbindung angefordert für Server-Anwendung: Ferner Befehl (as-rmtcmd)

23.05.2003 12:44:41.54 Client Access Communication
Typ=Informationen
[CWBCO1044]
Ferne Adresse xxx.xxx.xxx.xxx wird verwendet

23.05.2003 12:44:41.59 Client Access Communication
Typ=Informationen
[CWBCO1040]
Verwendeter Modus bei der Suche nach fernem Port: Immer ferne Server-Zuordnungsfunktion verwenden

23.05.2003 12:44:41.67 Client Access Communication
Typ=Informationen
[CWBCO1022]
Ferner Port 8475 wird verwendet

23.05.2003 12:44:42.22
Typ=Informationen
CPF9898 - REDIRECTOR NOT AVAILABLE ON THIS RELEASE.

Kann irgendjemand damit etwas anfangen und mir auf die Sprünge helfe?. Dass es kein genereller
Verbindungsfehler sein kann, wie die Winsock-Meldung m.E. nahelegt, geht für mich daraus hervor,
dass ich ohne Probleme Daten von der AS400 übertragen kann. Weisst der CPF9898 Fehler darauf hin
dass mir für die Durchführung dieser Funktion irgendetwas fehlt?

Schon mal im voraus

Vielen Dank

Heinz-Peter

Fuerchau
23-05-03, 14:24
Um Daten in die AS/400 zu schreiben verwendest du am besten einen SQL-Befehl:

insert into mylib.myfile
(F1, F2, F3, ...)
values (?, ?, ?, ...)

und dann per
cmdobj.execute , array(Val1, Val2, Val3, ...) , adExecuteNoRecords

die Daten übertragen.

IBMDA400 unterstützt das Hinzufügen bzw. Ändern nicht bei einer Tabelle.
Also auch einen Update per SQL durchführen:

update mylib.mytable
set F1=?, F2=?, F3=?, ...
where K1=?, K2=?, ...

und dann per
dim mRecords as long
cmdobj.execute mRecords, array(Val1, Val2, Val3, ..., Key1, Key2, ...) , adExecuteNoRecords

Fuerchau
23-05-03, 14:39
Einfacher gehts auch über Access, wenn du die Tabelle verknüpfst (Tabelle->Verknüpfen->ODBC).
Dann brauchst du dich nicht mit ADO rumzuschlagen sondern kannst (fast) alles von Access nutzen (Abfragen, Anfügeabfragen, Beziehungsabfragen ....)

[Dieser Beitrag wurde von Fuerchau am 23. Mai 2003 editiert.]

chrisi
23-05-03, 15:04
Hallo Peter,

bist Du jetzt unter die VB-Entwickler gegangen?
Die Fehlermeldungen sehen mir dachach aus,
daß die erforderlichen TCP Server nicht gestartet sind (*REXEC). Probier's mal
mit STRTCPSVR SERVER(*REXEC).

Viele Grüße, Dein Ex-Kollege (BLV)

Christian

hpheim
26-05-03, 12:15
Vielen Dank für eure schnellen Antworten

Insbesondere der Tipp mit dem nicht gestarteten TCP-Server war sehr hilfreich,
wenn es auch nicht der *REXEC, sondern der *DDM-Server war, der gefehlt hat.
(vielen Dank Christian)
Jetzt komme ich immerhin so weit, dass ich versuchen kann der Datenbank einen neuen
Satz hinzufügen.
Bei diesem Versuch bekomme ich nun aber die Meldung

CPF5035 Datenabbildungsfehler in Teildatei XXXXXXXXX

In der technischen Referenz finde ich dazu

CPF5035: Datenumsetzungsfehler in Teildatei &1.

Leider gibt es keinerlei Hinweis was es damit auf sich hat

Alle Felder in der AS400-Tabelle sind als Alpha-Felder definiert. Was soll mir
der genannte Fehler also sagen?

PS. Hallo Christian, wenn Du Lust hast, melde dich doch mal. Die Telefon-Nr ist
immer noch die alte

TARASIK
26-05-03, 12:58
Hallo Heinz-Peter,
es wäre hier noch interessant welches
Release auf der AS/400 und ob das
Datenbankgruppenptf installiert ist ?

Gruss TARASIK

hpheim
26-05-03, 13:53
Das Problem hat sich inzwischen erledigt. Es lag an mit ISNull initialisierten Feldern in der ACCESS-Datenbank. Nachdem diese Felder in der Schnittstelle mit einem *Blank gefüllt wurden, klappte es endlich.

Vielen Dank für eure Bemühungen

Heinz-Peter