-
Da must du deinen SQL etwas erweitern:
where ...
and (KDName = : Name or : Name = ' ')
-
@Fuerchau
Das dachte ich auch, nur das er dann wenn in Feld Name ein *blank drin steht, mir keinen Kunden anzeigt.
Er soll mir aber sämtliche Kunden anzeigen, wenn er Mitarbeiter das Feld frei lässt.
Hatte versucht durch das ersetzten von '' zu '*' mir alle Kunden anzeigen zu lassen, aber auch das funktioniert nicht.
Update:
EXEC SQL Declare Mycursor Cursor For
select * from scw_data/CXLAGPF
where cxfirm =: DDRFIRM
and cxekvk = 'S'
and cxsart = 'S'
and cxmeng <> 0
and cxrest <> 0
and CXLAGO = : DCXLAGO
and CXLAGP = : DCXLAGP
and CXSTAT = : DCXSTAT
and CXNUMM between : DVCXARTN and : DBCXARTN
For Fetch Only;
Exec Sql Open Mycursor;
Dow Sqlcode = Ok;
Exec Sql Fetch Mycursor Into :Mydata;
If Sqlcode = Ok;
Exsr FuellePRTF;
Endif;
Enddo;
close IVKLSTP0;
open IVKLSTP0;
In dem Fall kann DCXLAGO, DCXLAGP, DCXSTAT aus der DSPF leer sein, dann soll es "ignoriert" werden, sprich, es sollen alle angezeigt werden. Egal was in CXLAGO, CXLAGP, CXSTAT steht.
Ich hatte es so versucht, mit dem Ausschnitt vor dem SQL:
if DCXLAGO = '';
DCXLAGO = '*';
endif;
if DCXLAGP = '';
DCXLAGP = '*';
endif;
if DCXSTAT = '';
DCXSTAT = '*';
endif;
das funktioniert nicht.
-
Ich sagte doch du musst den Select selber anpassen:
and (CXLAGO = : DCXLAGO or : DCXLAGO = ' ')
Dies ist für alle Felder entsprechend zu definieren.
Deine Sternchen kannst du vergessen, da du ja dann gezielt auf Stern prüfst.
-
Das ist Genial!
Vielen Dank Fuerchau.
-
Da hat sich zu dem Thema direkt noch eine Frage gebildet.
D MyData E Ds Extname(CXLAGPF)
EXEC SQL Declare Mycursor Cursor For
select * from CXLAGPF
// join artstamm
// on ASFIRM=cxfirm and ASNUMM=CXARTN
where cxfirm = DRFIRM
and cxekvk = 'S'
and cxsart = 'S'
and cxmeng <> 0
and cxrest <> 0
and (CXLAGO = CXLAGO or CXLAGO = ' ')
and (CXLAGP = CXLAGP or CXLAGP = ' ')
and CXNUMM between VCXARTN and BCXARTN
order by CXNUMM,CXLAGO,CXLAGP,CXGEBI
For Fetch Only;
Exec Sql Open Mycursor;
Dow Sqlcode = Ok;
Exec Sql Fetch Mycursor Into :Mydata;
If Sqlcode = Ok;
Exsr FuellePRTF;
Endif;
Enddo;
close IVKLSTP0;
open IVKLSTP0;
Wenn ich hier einen Join einbaue, gibt es keine Treffer mehr, obwohl der join 100% richtig ist. Ich vermute, dass das an MyData liegt, das wie CXLAGPF definiert ist und nicht mit einer zweiten Datei zurecht kommt. Kommentiere ich den join aus, bekomme ich die gewünschten Ergebnisse. In strsql bekomme ich sie auch, woran kann das liegen?
Danke vorweg schonmal!
-
Hallo!
Natürlich muss deine ResultDS (hier genannt "MyData") über die entsprechende Struktur verfügen.
(Durchs Join entspricht dein Result nicht mehr dem Aufbau der CXLAGPF.)
Du könntest Beispielsweise eine DS definieren die genauso aufgebaut ist wie das Result aus deinem SQL Statement & das ganze nochmal versuchen 
Vielleicht noch etwas generelles: Benötigst du wirklich ALLE Spalten aus diesen Dateien?
Laut diversen Spezialisten sollte man wenn nicht unbedingt notwendig kein Select * verwenden.
LG,
Sam
-
Hi,
wenn du trotz JOIN dennoch nur die Spalten aus der CXLAGPF benötigst, dann mach ein
Select CXLAGPF.* From ...
Ansonsten kannst du beim Fetch folgendes machen:
D MyData E Ds Extname(CXLAGPF)
D MyData2 E Ds Extname(artstamm)
Fetch Mycursor Into :Mydata, :mydata2;
lg Andreas
-
Genau nach so einer Möglichkeit habe ich gesucht.
Danke!
-
Ich denke nicht, dass du im Fetch 2 Strukturen angeben kannst.
Sobald mehr als 2 Ziele angegeben werden, wird dies als Einzelfelder interpretiert.
Dir bleibt halt nichts anderes übrig, als obigen Vorschlag aufzunehmen:
Definiere genau die Felder, die du im Select benötigst und führe diese ebenso einzeln im Fetch auf.
Nun zu deinem Laufzeitproblem:
Der Fetch kehrt mit einem negativen SQLCOD zurück und nicht mit 100 (No more Data), da die Feldliste des Fetch nicht mit der Feldliste des Ergebnisses übereinstimmt.
Es gibt also ein Ergebnis, dass du leider nur nicht verarbeiten kannst.
-
... genau dafür gibt es Views!!!
create view ddd as (select ...)
und dann select * from ddd. (Soviel nur zum Select *, gegen den absolut nichts spricht, der Design Fehler liegt darin, dass beim select was anderes als Views verwendet werden)
D*B
-
 Zitat von Fuerchau
Ich denke nicht, dass du im Fetch 2 Strukturen angeben kannst.
Doch das geht!!
Du kannst im Fetch mehrere DS und/oder einzelne Felder angeben.
Wichtig ist nur, dass die Felder in der DS den Spalten im Select entsprechen.
Und die Reihenfolge ist zu beachten!!
-
Wie Sam schon richtig erwähnte, ist die Möglichkeit mehrere DS und Felder gleichzeitig und gemischt zu verwenden nicht unbedingt der beste und schnellste weg.
 Zitat von S.Neinawaie
Vielleicht noch etwas generelles: Benötigst du wirklich ALLE Spalten aus diesen Dateien?
Laut diversen Spezialisten sollte man wenn nicht unbedingt notwendig kein Select * verwenden.
lg Andreas
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By juergenkemeter in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 15-11-04, 12:15
-
By Pia in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-04-02, 15:24
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