PDA

View Full Version : Total Free und SQL --> Eine schlechte Lösung?



Seiten : 1 [2] 3

dschroeder
12-07-16, 14:58
... was hast Du gegen
create view AufttragSumme (oder whatever) as
select sum(xx-brutto) as brutto, sum(...) as netto, sum(...) as mwst
from...

dann wird deine SummeDS zur e ds und du füllst die dann mit select * from AuftragSumme into ...

die dahinter stehende Ideen sind Entkoppelung (verwende niemals < never - ever> eine Table im Programm) und Zentralisierung (select sum(..) ist Datenbanklogik!!!) man gewinnt dadurch die Möglichkeit weitgehende strukturelle Änderungen in der Datenbank vorzunehmen, ohne dass dei Anwendung tangiert ist und QS wird einfacher, da die Prgramme im Datenbankzugriff realtiv stumpf sind.

D*B

OK, gebe mich geschlagen. Ich kann deine Argumentation nachvollziehen.

dschroeder
12-07-16, 15:04
Bei uns (7.2) funktioniert das ganze ohne Probleme.

exec sql select sum(xx_brutto) into :summeDS.brutto from tabellexx;
Ich bilde mir auch ein schon vor früher 6.1 und 7.1 solche Konstrukte schon mal verwendet zu haben.
Ich meine DS oder Teile bzw. Felder einer DS im SQL zu verwenden.
"Leider" kann ich das aber nicht mehr testen da bei uns alles schon auf 7.2 hochgezogen ist.

Wenn das wirklich klappt, wäre das natürlich schön. Ich muss dass nochmal ausprobieren. Da wir Profound verwenden, können wir in Bildschirmdateien lange Feldnamen verwenden. Die werden intern in einer Datenstruktur im RPG-Programm verarbeitet. Wenn unser Recordformat im Bildschirm f1 heißt, greifen wir z.B. über "f1.bruttobetrag" auf das Bildschirmfeld zu. Das Feld in der Datenstruktur konnten wir (zumindest vor einiger Zeit) nicht direkt mit embedded SQL füllen. Vielleicht geht das ja jetzt. (Oder wir hatten damals ein anderes Problem).

Dieter

dholtmann
13-07-16, 12:47
Bei uns mit 7.1 funktioniert das.
Meine DS schaut so aus:
dcl-ds ds_auftrag qualified inz;
zon_fld1 zoned(9);
zon_fld2 zoned(9);
zon_fld3 zoned(2);
zon_fld4 zoned(2);
zon_fld5 zoned(1);
zon_fld6 zoned(9);
end-ds;

Der SQL dazu:
exec sql declare mein_cursor cursor for
select * from meineview;
exec sql open mein_cursor;
exec sql fetch mein_cursor into :ds_auftrag;
exec sql close mein_cursor;

Ein Beispiel mit direktem select into habe ich leider gerade nicht,
aber das sollte ja kein Problem darstellen.

dschroeder
13-07-16, 14:03
Das ist ja klar. Du füllst die ganze Struktur. Das geht natürlich. Die Frage ist, ob du auch ein einzelnes Unterfeld der Struktur füllen kannst.

Also: exec sql fetch mein_cursor into :zon_fld2;

andreaspr@aon.at
13-07-16, 14:24
bzw. in diesem Fall:
exec sql fetch mein_cursor into :ds_auftrag.zon_fld2;

dholtmann
13-07-16, 14:39
achso :D
habs ausprobiert, das funktioniert auch:

dcl-ds ds_auftrag;
firma zoned(2);
sparte zoned(1);
verkaufshaus zoned(2);
auftrag zoned(4);
end-ds;

exec sql declare mein_cursor cursor for
select firma from firmadatei where firma = 1;
exec sql open mein_cursor;
exec sql fetch mein_cursor into :ds_auftrag.firma;
if sqlcode = 0;
ds_auftrag = ds_auftrag;
endif;
exec sql close mein_cursor;

Firma wird gefüllt, der Rest natürlich nicht.
Funktioniert auch bei Verkaufshaus, liegt also nicht am ersten Feld.

andreaspr@aon.at
13-07-16, 14:43
Und das funktionierte auch schon mit IBM i 5.4 so.

Pikachu
13-07-16, 14:58
Laut IBM gibts dcl-ds in RPG aber erst ab 7.1 per PTFs ...


Und das funktionierte auch schon mit IBM i 5.4 so.

Fuerchau
13-07-16, 15:01
Also "dcl-ds" gabs doch erst mit V7? Gibt's da noch ein PTF für V5R4?

andreaspr@aon.at
13-07-16, 15:27
Nein, kein PTF. War ein Missverständnis meinerseits.