Autor Beitrag
Zemke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83

WIN XP
Delphi 4 Professionell
BeitragVerfasst: Do 17.10.02 09:02 
Hallo,

ich habe folgendes Problem:

ich habe ein Verwaltungsprogramm für Schuldner geschrieben in dem alle Rechnungen enthalten sind, die noch bezahlt werden müssen. Je 6 Rechnungsfelder habe ich dafür vorgesehen. Sie sind so unterteilt:
Auftragsnummer (DBEdit1-DBEdit6), Rechnungssteller (DBEdit7-DBEdit13), Betrag (DBEdit14-DBEdit20), Belastungsfolge (DBEdit21-DBEdit22-DBEdit28).

Die Vorgänge können zu unterschiedlichen Zeiten geschrieben werden, d.h. wenn eine Rechnung noch fehlt und es sind schon drei andere vorhanden, kann eine Belastung mit der Rangfolge 1 erfolgen.

Es soll jetzt die Möglichkeit gegeben sein, daß alle noch offenen Rechnungen ausgewertet werden können. Dies soll in einer einzigen Liste
geschehen in nach Rechnungsstellern aufsteigender Reihenfolge.

Mir fehlt nun der SQL-Befehl für diese umfangreiche Abfrage. Es werden je 6 Felder angesprochen. Ich hab es schon mit Platzhaltern versucht, klappt aber alles nicht!

Beispiel:

select anr1,rech1name,bel1 from Datei.db where rech1name>'0' and bel1 is null

Funktioniert - ist ja auch eine einzelne Abfrage.

Wie gesagt, mir fehlt der Befehl daß diese Abfrage 6 mal durchläuft
anr1-anr6,rech1name-rech6name,bel1-bel6


Übrigens: Später sollen mit diesen gefilterten Daten auch noch Briefe an Firmen geschrieben werden können.

Wenn der Sachverhalt zu kompliziert ist, schickt mir eine e-mail:
rainer.zemke@gsg-oldenburg.de - Danke!!!
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Do 17.10.02 15:53 
Zur Frage:

Dein Ansatz
select anr1,rech1name,bel1 from Datei.db where rech1name>'0' and bel1 is null
ist ja schon richtig. Nur must du das eben jetzt auf 6 Felder bringen.

select * from Datei.db where (rech1name>'0' and bel1 is null) or (rech2name>'0' and bel2 is null) or (rech3name>'0' and bel3 is null) .....
Dein Select würde ich der Faulheit halber auf ein * ausdehnen... Ansonsten kannst du die Abfrage mit 2 Schritten optimieren.


Zum Aufbau:
So wie ich das verstanden habe, hast du pro Datensatz 6 Aufträge und Rechnungen in EINEM Datensatz.
Wenn dem so ist, vewende pro Datensatz einen Auftrag und eine Rechnung und frage dann halte eben so ab:

SELECT * From DB WHERE (...siehe oben ...) and Kundennummer = :DeineKundennummer

Die Einschränkung auf 6 macht dir die Megaarbeit, wenn es doch mal 7 oder 8 werden sollen.

_________________
Keine Signatur ...
Zemke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83

WIN XP
Delphi 4 Professionell
BeitragVerfasst: Fr 18.10.02 10:36 
Titel: Datensortierung
Erst einmal vielen Dank für Deine Antowrt.

Mir geht es aber auch darum, daß die Daten aufsteigend sortiert werden
(Rech1name - Rech6name) und daß nur die drei Spalten Whg.-Nr., Auftrag und Rechnungssteller in der Liste dargestellt werden. Wie ist es dann mit dem Platzhalter ' * ' ?

Mir geht es auch darum, daß j e d e r offene Auftrag gezeigt wird und nicht nur die Whg.-Nr. (Datensatz)!

Mich macht das "or" etwas stutzig. Heißt es dann nicht, daß der Befehl zu einer "entweder - oder" - Anweisung wird?

Das darf er auf keinen Fall, denn es sollen alle offenen Rechnung in der Liste stehen, die in den Feldern Rech1name - Rech6name enthalten sind.

Gruß
Rainer Zemke
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 18.10.02 11:16 
Hi
Zemke hat folgendes geschrieben:

Mir geht es aber auch darum, daß die Daten aufsteigend sortiert werden
(Rech1name - Rech6name) ...

Das dürfte bei der vorliegenden Struktur leider unmöglich sein. Du kannst zwar eine Sortierfolge angeben mit Order by aber du kannst keine Gesamtsortierfolge aus den 6 Feldern machen.

Zemke hat folgendes geschrieben:

...daß nur die drei Spalten Whg.-Nr., Auftrag und Rechnungssteller in der Liste dargestellt werden. Wie ist es dann mit dem Platzhalter ' * ' ?

Ersetze einfach Select * durch Select WhgNr, Auftrag, Rechnungssteller.

Zemke hat folgendes geschrieben:

Mich macht das "or" etwas stutzig. Heißt es dann nicht, daß der Befehl zu einer "entweder - oder" - Anweisung wird?

Das ist schon korrekt. Der Datensatz wird dann angezeigt, wenn in einem der 6 Felder ein Eintrag vorhanden ist.

Steffer hat folgendes geschrieben:

Die Einschränkung auf 6 macht dir die Megaarbeit, wenn es doch mal 7 oder 8 werden sollen.

Das ist noch Milde ausgedrückt. Das Problem fängt ja schon mit deiner Sortierfolge an. :autsch: An deiner Stelle würde ich das nochmal überdenken. Sich wiederholende Informationen gehören generell in eine eigene Tabelle.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Fr 18.10.02 12:39 
LCs hat dir das wesentliche ja schon gesagt:

>Das dürfte bei der vorliegenden Struktur leider unmöglich sein. Du
>kannst zwar eine Sortierfolge angeben mit Order by aber du kannst
>keine Gesamtsortierfolge aus den 6 Feldern machen.

Geht schon, aber nicht mit der Abfrage.
Dazu müstest du die Daten auslesen, sortieren und ausgeben. Das ganze ist aber ein Luftanker und nicht der Sinn der Sache...
Daher würde ich dir auch noch mal empfehlen die Strukturierung zu überdenken.

_________________
Keine Signatur ...