Hallo zusammen,
ein schönes neues Jahr zuerst einmal!
Ich stehe derzeit wie der "Ochs vorm Berg vor einem Problem" und komme nicht dahinter:
Ich habe eine Abfrage RE1, in der aus einer Verknüpfung von rechnung.df, kunden.df und fakt.df eine Teilmenge ausgewählt wird (zu jeder Rechnung gibt es dadurch mehrere Zeilen).
Im weiteren Verlauf benötige ich eine Abfrage, in der ich nur die dazugehörigen einzelnen Rechnungen habe.
Hatte mir einfach vorgestellt, mich auf RE1 zu beziehen:
FROM rechnung WHERE rech_nr IN SELECT rech_nr FROM RE1
Das funktioniert aber nicht bei mir (vielleicht geht es auch nicht). Muss man dem Compiler vielleicht irgendwie mitteilen, dass es sich bei RE1 nicht um eine Datenbank, sondern um eine Abfrage handelt?
Dann habe ich die komplette Abfrage von RE1 in das IN SELECT gesetzt, funktioniert aber auch nicht richtig (Ende der RAM-Disk und andere unerklärliche Fehler, Fehlermeldung VI2REOP Zeile 164: Dateiende RAMD:&4 - wobei auf dem Laufwerk, auf dem ich RAMD liegen habe, noch beliebig Platz ist und die &4 nur 120kb groß ist. Die Fehlermeldung kommt, wenn ich das Programm ein paar mal hintereinander laufen lasse. Availmem liegt die ganze Zeit bei 11000 und reduziert sich nicht weiter).
Ich könnte natürlich RE1 in eine temporäre Datenbank zwischenspeichern und dann diese in das IN SELECT nehmen, halte ich aber für nicht geschickt.
Hat jemand auf die Schnelle eine andere Idee?
Gruß
Hans Jürgen (hjlint#)
P.S.: Hier die Abfragen im Original:
PHP-Code:
LOCAL VIEW RE1=FROM FAKT,KUNDEN,RECHNUNG
SELECT kdnr,name1,vname,vertragsnr,fällig_von,fällig_bis,
betrag,offen,rech_nr,datum,einzug
WHERE KDNR=KUNDEN.KDNR
AND RECH_NR=RECHNUNG.RECH_NR AND RECH_NR>990000
AND (KDNR=reopkdnr OR GVNR=reopgvnr OR NAME IN (reopn1:reopn2))
AND kdnr<>reopkdnra
AND GVNR<>reopngvnr
AND NOT name IN (reopna1:reopna2)
AND vu_code IN (reopvuc1:reopvuc2)
AND NOT vu_code IN (reopvun1:reopvun2)
AND (rechnung.einzug=reoplevb1 OR rechnung.einzug=reoplevb2)
AND OFFEN<>0
ORDER NAME,KDNR,VERTRAGSNR,FÄLLIG_VON
Das war die erste Idee:
PHP-Code:
LOCAL VIEW RE2=FROM rechnung WHERE einzug=TRUE AND rech_nr IN SELECT rech_nr FROM RE1 ORDER name,konto (funktioniert bei mir nicht, wäre natürlich die einfachste Lösung)
Andere Idee (ist aber teilweise leer oder führt zu Abstürzen):
PHP-Code:
LOCAL VIEW RE2=FROM rechnung WHERE einzug=TRUE AND rech_nr IN SELECT rech_nr
FROM FAKT,KUNDEN,RECHNUNG
WHERE KDNR=KUNDEN.KDNR
AND RECH_NR=RECHNUNG.RECH_NR AND RECH_NR>990000
AND (KDNR=reopkdnr OR GVNR=reopgvnr OR NAME IN (reopn1:reopn2))
AND kdnr<>reopkdnra
AND GVNR<>reopngvnr
AND NOT name IN (reopna1:reopna2)
AND vu_code IN (reopvuc1:reopvuc2)
AND NOT vu_code IN (reopvun1:reopvun2)
AND (rechnung.einzug=reoplevb1 OR rechnung.einzug=reoplevb2)
AND OFFEN<>0
ORDER NAME,KONTO