-
strqm: SQL-Anweisung mit Parameter
Hallo,
V5R4
Tabelle mvtel1p:
username(Char15)
pcstation(Char7)
username pcstation
RGE xx1
VCH xx2
SELECT
-- Spalten
USERNAME,pcstation
-- Tabellen
FROM trumpfh/mvtel1p
-- Zeilenauswahl
WHERE USERNAME = &VAR1
Wenn ich für &VAR1 den Wert RGE in Hochkomma übergeben, erhalte den Fehler:
call trumpfh/testmartin parm('RGE')
Spalte RGE nicht in angegebenen Tabellen.
Befehl RUN für Objekt QUERY mit SQLCODE -206 fehlgeschlagen.
Befehl RUN QUERY aufgrund eines Fehlers beendet.
Befehl STRQMQRY fehlgeschlagen.
Funktionsprüfung. QWM2701 nicht überwacht durch TESTMARTIN bei Anweisung
901, Instruktion X'0017'.
Was mache ich falsch?
Vielen Dank.
Gruss
Tobias
-
Zeichenketten benötigen ein Hochkomma das du mit übergeben musst, also
DCL &HPARM *CHAR 10
CHGVAR &HPARM ('''' *CAT &PARM *CAT '''')
STRQMQRY ...
SETVAR((RGE &HPARM))
-
Hallo,
die Spaltennamen heißen username und pcstation...
Der Parameter &VAR hat den Wert: 'RGE'
Beim Debugger bleibt dieser bei Fehler QWM2701 stehen (siehe Joblog oben) und behauptet die Spalte RGE wäre nicht in den angegebenen Tabellen - häh, wie bitte. RGE ist doch der Wert und Spalte ist username. Irgendwie bin ich total verwirrt???
Meine Tabelle mvtel1p sieht so aus:
USERNAME PCSTATION
RGE xx1
VCH xx2
...
select username, pcstation
from mvtel1p
where username = &VAR1
Habe ich vielleicht einen Denkfehler?
Danke.
Gruss
Tobias
-
Nur nochmal um sicher zugehen:
Ist der Wert der eingehenden Variablen &VAR in Hochkommata eingebettet oder nicht?
Wie Baldur schon sagt, bei alphanumerischen Parametern, müssen die Werte in Hochkommata eingebettet werden!
Ohne einschließende Hochkommata geht das SQL Statement schief!
Birgitta
-
Guten Morgen zusammen,
ja, wie oben beschrieben ist der Wert in Hochkomma eingebettet. Mich verwirrt die Fehlermeldung, daß der eigentliche Wert hier 'RGE' als Spalte angegeben wird, obwohl es die Spalte USERNAME ist.
Gruss
Tobias
-
Kann es sein, dass Du versuchst Dein QMQuery mit CALL auszuführen?
QMQueries müssen mit dem Befehl STRQMQRY ausgeführt werden.
Die Variablen werden in der Option SETVAR in der Form VariableName &Variable übergeben werden.
Der Inhalt der Variablen muss bei alphanumerischen Feldern oder Datumsvariablen mit Hochkommata umgeben werden.
Birgitta
-
Dein Denkfehler ist, dass du die Variable &VAR in deinem CLP in Hochkomma setzt.
Es muss jedoch der Inhalt der Variable an QMQRY in Hochkomma übergeben werden.
Dein SQL sieht nach der Ersetzung eben so aus, da die Hochkommata fehlen:
select username, pcstation
from mvtel1p
where username = RGB
SETVAR unterstützt auch Berechnungen:
SETVAR((VAR ('''' *CAT &MYCLVAR *CAT '''')))
-
...könnte der Select auch so aussehen?
select username, pcstation
from mvtel1p
where username = char('&VAR')
Birgitta:
In VS2010 über ADO stosse ich ein CL an:
Dim VAR1 AsString
VAR1 = "'" & txt_eingabe.Text & "'"
'************************************************* ************
'Daten holen
'************************************************* ************
Dim cnn As ADODB.Connection
Dim con_str AsString
Dim CallCmd AsNew ADODB.Command
Dim cmd AsString
cnn = New ADODB.Connection
cmd = "CALL TRUMPFH.TESTMARTIN(" & VAR1 & ")"
...
das CL sieht folgendermaßen aus:
PGM PARM(&VAR1)
DCL VAR(&VAR1) TYPE(*CHAR) LEN(15)
STRQMQRY QMQRY(TRUMPFH/MARTIN_4) OUTPUT(*PRINT) +
ALWQRYDFN(*YES) SETVAR((VAR1 &VAR1))
MONMSG MSGID(CPF0000)
ENDPGM: ENDPGM
Die Qry MARTIN_4 hat obigen Select
Gruss
Tobias
-
das CL muss so aussehen:
Code:
PGM PARM(&VAR1)
DCL VAR(&VAR1) TYPE(*CHAR) LEN(15)
DCL VAR(&VAR2) Type(*CHAR) LEN(17)
CHGVAR VAR(&VAR2) VALUE('''' *CAT &VAR1 *CAT '''');
STRQMQRY QMQRY(TRUMPFH/MARTIN_4) OUTPUT(*PRINT) +
ALWQRYDFN(*YES) SETVAR((VAR1 &VAR2))
MONMSG MSGID(CPF0000)
ENDPGM: ENDPGM
Birgitta
-
Die Hochkomma in VB sind ja erforderlich, damit die Syntax des CALL-CMD's korrekt ist.
Diese werden allerdings bei der Übergabe an dein CLP wieder entfernt!
Du kannst ja auch die Hochkommata bereits in dem VB mit angeben:
VAR1 = "'''" & txt_eingabe.Text & "'''"
Dann brauchst du dein CLP nicht zu ändern.
Ggf. musst du allerdings noch
Replace(txt_eingabe.Text, "'", "''")
einbauen, falls dein Text Hochkomma enthalten kann.
-
...bin jetzt leider im Haus unterwegs - ich werde das umgehend so umsetzen wie von Euch beschrieben und melde mich wieder.
Gruss
Tobias
-
Hallo allerseits,
QMQRYs werden bei uns viel benutzt - umso mehr finde ich die vielen Hochkomma lästig - so richtig lesen kann man das nicht und sich merken, wieviele man braucht, ist auch nicht so toll.
Bei Dezimalwerten ist es wieder anders.
Und die Variablen dürfen auch nur 55 Zeichen lang sein.
Wir haben daher das Thema in ein Unterprogramm verschoben, habe ich hier mal eingefügt, vielleicht könnt Ihr das ja gebrauchen.
Code:
------------- CL -------------
DCL VAR(&PROJ) TYPE(*CHAR) LEN(8)
DCL VAR(&DAT) TYPE(*DEC) LEN(8 0)
DCL VAR(&QMPROJ) TYPE(*CHAR) LEN(55)
DCL VAR(&QMDAT) TYPE(*CHAR) LEN(8)
DCL VAR(&IN) TYPE(*CHAR) LEN(2000)
DCL VAR(&OUT) TYPE(*CHAR) LEN(2000)
...
CHGVAR VAR(&IN) VALUE(&PROJ !< '%')
CALL PGM(TRMSTR1) PARM(&IN &OUT)
CHGVAR VAR(&QMPROJ) VALUE(&OUT)
CHGVAR VAR(&QMDAT) VALUE(&DAT)
STRQMQRY QMQRY(&QMQRY) OUTPUT(&OUTPUT) +
SETVAR((PROJ &QMPROJ) (DAT &QMDAT))
------------- QMQRY -------------
select ... from ... where
lpo33>&DAT and pjz06 like &PROJ
------------- TRMSTR1 -------------
*
D in S 1A DIM(2000)
D out S 1A DIM(2000)
*
*******************************************************************
*
C *entry plist
C parm $in 2000
C parm $out 2000
*
*
C movea $in in
C ' ' checkr $in inLen 5 0
C movea *blanks out
C move '''' out(1)
*
C z-add 2 j 5 0
C $in cabeq *blank leerString
*
C 1 do inLen i 5 0
*
C move in(i) out(j)
C in(i) ifeq ''''
C add 1 j
C move in(i) out(j)
C endif
C add 1 j
*
C enddo
*
C leerString tag
C move '''' out(j)
C movea out $out
*
*
C seton LR
C return
*
Gruß, Christian
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By Luisfree in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 19-01-05, 17:42
-
By Luisfree in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 12-10-04, 09:42
-
By Cassius in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-03-02, 19:28
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