-
MS ACCESS+ADO: CALL funktioniert nicht
Hallo,
MS ACESS, ADO, WIN XP, V5R4
Call auf der AS400 funktioniert einwandfrei, aber
ich möchte in VBA ein Call mit Parameter übergeben, bekomme aber folgenden Fehler:
SQL0103: Numerische Konstante 1456459C ungültig
Code AS400 (funktioniert) - Parameter werden hexadezimal übergeben:
PGM PARM(&VAR1 &VAR2)
DCL VAR(&VAR1) TYPE(*DEC) LEN(7 0)
DCL VAR(&VAR2) TYPE(*DEC) LEN(4 0)
DCL VAR(&VAR1A) TYPE(*CHAR) LEN(7)
DCL VAR(&VAR2A) TYPE(*CHAR) LEN(4)
/* */
CHGVAR VAR(&VAR1A) VALUE(&VAR1)
CHGVAR VAR(&VAR2A) VALUE(&VAR2)
/* */
CLRPFM FILE(DTALIB/MVREKP)
/* MONMSG MSGID(CPF0000) */
ADDLIBLE LIB(DTALIB)
MONMSG MSGID(CPF0000)
CALL PGM(OBJLIB/MVREKLA1) PARM(&VAR1A &VAR2A)
MONMSG MSGID(CPF0000)
/*** */
ENDPGM: ENDPGM
VBA Code:
Dim VAR1, VAR11, VAR2, VAR22, CallCmd As String
VAR1 = "1456459"
VAR11 = "X'" & VAR1 & "C'"
VAR2 = "0101"
VAR22 = "X'0" & VAR2 & "C'"
'CallCmd = "CALL OBJLIB/TTREKLA1(" & VAR11 & ", " & VAR22 & ")"
CallCmd = "CALL PGM(OBJLIB/TTREKLA1) PARM(" & VAR11 & ", " & VAR22 & ")"
Dim cnn As New ADODB.Connection
Dim cmd As ADODB.Command
'Dim CallCmd As String
cnn = New ADODB.Connection
cnn.Open ("Provider=IBMDA400;" & _
"Data Source=ICHAS;" & _
"User ID=USERE;" & _
"Password=PW;")
'CallCmd = "CALL OBJLIB/TTREKLA1 PARM(VAR1 VAR2)"
'cnn.Execute ("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
cnn.Execute ("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
cnn.Close
Fehler tritt bei cnn.execute auf.
Danke.
Gruss
Tobias
-
Wie immer ein Problem der Hochkomma:
Prompte dir den CALL auf der AS/400 also auch mit X'1234567F'.
Genauso baust du dir das CMD in VBA auf und anschließend verdoppelst du alle Hochkomma:
... Replace(CallCmd, "'", "''") ...
Ansonsten noch ein kleiner Fehler:
Positives Vorzeichen für gepackt ist F, negatives ist D.
Alles andere führt zu MCH-Fehler.
-
... das mit dem Verdoppeln verstehe ich nicht so ganz bzw wie ich das in den Befehl einbauen muss:
Alt:
cnn.Execute ("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
Wo und welche muss ich verdoppeln?
Stehe auf dem Schlauch? Alle verdoppeln und bei welchem CallCmd baue ich das Replace ein?
-
Schau dir den Inhalt von "CallCmd" an.
Diese enthält ja selber Hochkommata, nämlich die X'...'.
Nun kommen wir zur SQL-Syntax:
Zeichenketten zwischen Hochkommas, enthaltene Hochkommas verdoppeln (sieht man auch schon mal im CLP).
'Baldur''s Hinweis' => Baldur's Hinweis
Dein CallCmd sieht dann wohl so aus:
CALL MYLIB/MYPGM PARM(X'123F' X'1234567F')
Da du das wiederum als Text an QCMDEXC übergeben musst erfolgt daraus:
"CALL QSYS.QCMDEXC '" & replace(CallCmd, "'", "''") & "' , " & format(...
Man beachte:
Dein CallCmd wird zwischen einfachen Hochkomma eingebettet, die enthaltenen werden verdoppelt.
Beim Aufruf von QCMDEXC werden die doppelten wieder auf einfach zurückgesetzt, daher ist die Länge wie gehabt ohne Verdoppelung zu berechnen.
-
Hallo,
ich bekomme jetzt den Fehler:
CPF0006: Falss bei einem Teil des Befehls eine falsche Länge weitergegeben wurde, werden andere Nachrichten ausgegeben, weil der falsche Teil des Befehls analysiert wird.
Habe den Befehl so geändert:
CallCmd = "CALL PGM(OBJLIB/TTREKLA1) PARM(" & VAR11 & ", " & VAR22 & ")"
cnn.Execute ("CALL QSYS.QCMDEXC ('" & Replace(CallCmd, "'", "''") & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
Was ist denn jetzt falsch? Gibts doch gar nicht...
-
Schau dir die Syntax des AS/400-Calls an, hier werden die Parameter nicht mit Komma getrennt wie bei SQL.
-
Hallo Herr Fuerchau,
einwandfrei, so funktioniert es jetzt.
CallCmd = "CALL PGM(OBJLIB/TTREKLA1) PARM(" & VAR11 & " " & VAR22 & ")"
cnn.Execute ("CALL QSYS.QCMDEXC ('" & Replace(CallCmd, "'", "''") & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
Ich bedanke mich 5-6000 mal. Danke Herr Fuerchau und eine schöne Woche noch.
Gruss
Tobias
-
Ich weß, dass es funktioniert...
Similar Threads
-
By Asti in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 26-10-06, 09:39
-
By olafu in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-10-06, 08:13
-
By andreas.lundschien in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-09-06, 14:55
-
By reraru in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 18-01-05, 13:06
-
By Salvi in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 21-05-04, 07:44
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