Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Frage zur Programmlogik (https://www.delphipraxis.net/131329-frage-zur-programmlogik.html)

khh 23. Mär 2009 11:27

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

Frage zur Programmlogik
 
hallo zusammen,
ich überlege gerade wie ich folgendes umsetzen kann:

Ich muss aus einer Bestellung eine Auftrag erzeugen.
Nun ist es möglich, dass verschiedene Auftragsarten vorhanden sind.
Für die Bestellung soll die daraus resultierende Auftragsart in der DB hinterlegt werden.
Natürlich muss das auch zu ändern sein.
Also hab ich mir gedacht, ich schreibe in eine Ttabelle "einstellungen" den entsprechenden variablen wert und frage diesen über einen 2ten, fest definierten wert ab.
Aber irgendwie widerstrebt es mir diesen festen Wert aus der DB über eine Konstante im Programm abzufragen :-(

Seht ihr andere Lösungsmöglichkeiten?


danke Gruss Kh

Phoenix 23. Mär 2009 12:16

Re: Frage zur Programmlogik
 
Häh? Sorry, aber ich verstehe die Frage nicht.

Alle Auftragsarten pflegst Du in einer Auftragsarten-Tabelle, oder?

Wenn Du eine Bestellung hast (als Datensatz) und daraus einen Auftrag machst, dann kannst Du doch die Art des Auftrages bei der Gelegenheit gleich mit angeben? (Ganz normale Fremdschlüssel-Beziehung).

Alternativ kannst Du eine 'Default-Auftragsart' in einer Einstellungstabelle hinterlegen.
Dann wird diese gelesen und für neue Aufträge verwendet.

Die Auftragsart ist in jedem Fall hinterher immer änderbar.

khh 23. Mär 2009 12:20

Re: Frage zur Programmlogik
 
Zitat:

Zitat von Phoenix
Häh? Sorry, aber ich verstehe die Frage nicht.

Alle Auftragsarten pflegst Du in einer Auftragsarten-Tabelle, oder?

Wenn Du eine Bestellung hast (als Datensatz) und daraus einen Auftrag machst, dann kannst Du doch die Art des Auftrages bei der Gelegenheit gleich mit angeben? (Ganz normale Fremdschlüssel-Beziehung).

Alternativ kannst Du eine 'Default-Auftragsart' in einer Einstellungstabelle hinterlegen.
Dann wird diese gelesen und für neue Aufträge verwendet.

Die Auftragsart ist in jedem Fall hinterher immer änderbar.

die Auftragserzeugung soll automatisch ablaufen, also quasi im batch.
das mit der default-auftragsart hab ich mir ja gedacht, nur lese ich da praktisch einen veränderbaren wert mit ner konstante und das irritiert mich etwas.
Und ne extra tabelle für einen einzigen DS ?

Mh

Gruss Kh

mkinzler 23. Mär 2009 12:27

Re: Frage zur Programmlogik
 
Default-Werte kann man bei der Anlage einet Spalte mit Angeben

khh 23. Mär 2009 12:31

Re: Frage zur Programmlogik
 
Zitat:

Zitat von mkinzler
Default-Werte kann man bei der Anlage einet Spalte mit Angeben

ja das ist richtig
ich glaube ich muss mich besser ausdrücken

ich schreibe den default wert in eine Tabelle.

also zb id 1 , aart xy
id 2 sonstwas.

jetzt muss ich quasi über die angebe des key (1) den wert xy auslesen.
und dieser Key ist dann im Programm ne konstante.
Das kommt mir einfach irgendwie widerspüchlich vor, deshalb suche ich, wenn möglich, einen aderen Lösungsweg.


Gruss Kh

mkinzler 23. Mär 2009 12:34

Re: Frage zur Programmlogik
 
Ich meinte den Default-Wert in den Metadaten der Spalten. Aber vielleicht reden wir auch aneinander vorbei

khh 23. Mär 2009 12:35

Re: Frage zur Programmlogik
 
Zitat:

Zitat von mkinzler
Ich meinte den Default-Wert in den Metadaten der Spalten. Aber vielleicht reden wir auch aneinander vorbei

ja das war wohl aneinander vorbei.

siehe die erklärung in meinem letzten posting

mkinzler 23. Mär 2009 12:38

Re: Frage zur Programmlogik
 
Ich versteh dein Problem nicht ganz. Ich würde den Defaultwert nicht als Konstante im Programm sondern als Vorgabewert in der entsprechenden Spalte der Tabelel hinterlegen. Warum als Konstante im Programm?

khh 23. Mär 2009 12:41

Re: Frage zur Programmlogik
 
Zitat:

Zitat von mkinzler
Ich versteh dein Problem nicht ganz. Ich würde den Defaultwert nicht als Konstante im Programm sondern als Vorgabewert in der entsprechenden Spalte der Tabelel hinterlegen. Warum als Konstante im Programm?

ja das möchte ich so machen.

Aber wie hole ich den Defaultwert aus der Tabelle, wenn dies nicht der einzige Wert in dieser Tabelle ist?
Das ginge doch nur über ne Konstante die mit der id identisch ist, oder ?

mkinzler 23. Mär 2009 12:49

Re: Frage zur Programmlogik
 
Du kannst für jede Spalte einen Default-Wert angeben. Der wird genommen wenn die Spalte als NOT NULL deklariert ist und bei der Anlage eines neuen Datensatz nicht mit angegeben wird.

khh 23. Mär 2009 12:53

Re: Frage zur Programmlogik
 
Zitat:

Zitat von mkinzler
Du kannst für jede Spalte einen Default-Wert angeben. Der wird genommen wenn die Spalte als NOT NULL deklariert ist und bei der Anlage eines neuen Datensatz nicht mit angegeben wird.

wir reden wieder aneinander vorbei:-(



also ich hab ne tabelle:
id 1 wert xy
id 2 wert ab
id 3 wert xk

so jetzt möchte ich den wert xy aus der tabelle holen.
Also muss ich doch auf id 1 abfragen, oder?
und 1 ist somit quasi die konstante im Programm

mkinzler 23. Mär 2009 12:58

Re: Frage zur Programmlogik
 
Und diese 1 willst du doch als Wert einer anderen Spalte nehmen?

khh 23. Mär 2009 13:01

Re: Frage zur Programmlogik
 
Zitat:

Zitat von mkinzler
Und diese 1 willst du doch als Wert einer anderen Spalte nehmen?

nee ich möchte xy im Programm haben indem ich über 1 auf den DS zugreife
xy ist quaisi der variable wert den ich aus der tabelle holen möchte

guidok 23. Mär 2009 13:03

Re: Frage zur Programmlogik
 
Woher weist du denn (der Batchlauf) welche Auftragsart zu welcher Bestellung gehört?

Diese Beziehung musst du doch irgendwo festlegen und zwar nicht unbedingt als Konstante im Programm.

khh 23. Mär 2009 13:05

Re: Frage zur Programmlogik
 
Zitat:

Zitat von guidok
Woher weist du denn (der Batchlauf) welche Auftragsart zu welcher Bestellung gehört?

Diese Beziehung musst du doch irgendwo festlegen und zwar nicht unbedingt als Konstante im Programm.

eben drum möchte ich ihn aus der Db-tabelle auslesen.
irgendwie hab ich heut ein Problem das richtig darzustellen :-(

Phoenix 23. Mär 2009 13:36

Re: Frage zur Programmlogik
 
Zitat:

Zitat von khh
id 1 wert xy
id 2 wert ab
id 3 wert xk

so jetzt möchte ich den wert xy aus der tabelle holen.
Also muss ich doch auf id 1 abfragen, oder?
und 1 ist somit quasi die konstante im Programm

WIESO willst Du gerade 'xy' und nicht 'ab' oder 'xk' aus der Tabelle holen?
Vielleicht ist das ja der Knackpunkt...

Edit Nachtrag:
MOOOMENT! Wieso willst Du überhaupt 'xy' in den neu anzulegenden Datensatz schreiben, wenn Du diesen Wert eh schon zu einer ID in einer Tabelle hast? Das ist Redundant und sollte idealerweise vermieden werden.

Du solltest in den Datensatz dann gleich die 1 Eintragen, damit sich xy irgendwann mal ändern kann, ohne dass Du alle Datensätze dazu ändern musst.

guidok 23. Mär 2009 14:13

Re: Frage zur Programmlogik
 
Genau das ist die Frage: Wer legt fest zu welcher Bestellung welche Auftragsart gehört? Diese Information muss ja irgendwo vorhanden sein. In den Datensatz für die Bestellung selbst muss natürlich nur die ID der Auftragsart.

khh 23. Mär 2009 14:34

Re: Frage zur Programmlogik
 
Zitat:

Zitat von guidok
Genau das ist die Frage: Wer legt fest zu welcher Bestellung welche Auftragsart gehört? Diese Information muss ja irgendwo vorhanden sein. In den Datensatz für die Bestellung selbst muss natürlich nur die ID der Auftragsart.

genau das lege ich fest indem ich im Programm sage id 1 ist für diese Bestellung die richtige Auftragsart,
id 2 für jene.
über den das feld mit den einträgen xy oder ab kann ich ja dann die entsprechende Auftragsart wenn nötig ändern.
Und genau das ist meine Ausgangsfrage.die id brauch ich ja dann als konstante im Programm,und das wollte ich vermeiden.

mkinzler 23. Mär 2009 14:36

Re: Frage zur Programmlogik
 
Dann würde ich das über einer extra Tabelle regeln

Phoenix 23. Mär 2009 14:40

Re: Frage zur Programmlogik
 
Zitat:

Zitat von khh
Zitat:

Zitat von guidok
Genau das ist die Frage: Wer legt fest zu welcher Bestellung welche Auftragsart gehört? Diese Information muss ja irgendwo vorhanden sein. In den Datensatz für die Bestellung selbst muss natürlich nur die ID der Auftragsart.

genau das lege ich fest indem ich im Programm sage id 1 ist für diese Bestellung die richtige Auftragsart,
id 2 für jene.
über den das feld mit den einträgen xy oder ab kann ich ja dann die entsprechende Auftragsart wenn nötig ändern.
Und genau das ist meine Ausgangsfrage.die id brauch ich ja dann als konstante im Programm,und das wollte ich vermeiden.

Mache mal einen Schritt zurück.

Zitat:

Zitat von khh
indem ich im Programm sage id 1 ist für diese Bestellung die richtige Auftragsart,
id 2 für jene.

Das heisst, Du hast - trotz Batchlauf - für jede einzelne Bestellung eine MANUELLE Eingabe. Und diese hast Du zu dem Zweck, dass Du eine andere Information ('ab', 'xy') Redundant ablegst?

Oder kann die Auftragsart aus der Bestellung automatisch ermittelt werden? An welchem Wert ist das fest gemacht? Dieser Wert muss dann doch in der Tabelle zu den Auftragsarten hinterlegt werden. Dann kannst Du das auch automatisch ermitteln.

Und selbst dann: Warum schreibst Du dann nicht direkt die ID der Auftragsart in den Auftrag, wenn Du die Auftragsarten eh schon in einer eigenen Tabelle hast? Wenn Du eine Information wie 'ab' oder 'xy', die eh schon unter einer ID in der Datenbank liegt, jedes mal kopierst, dann untergräbt das das Grundprinzip der Datenbank. In so einem Fall legt man gleich die richtige ID im Zieldatensatz ab und nicht den Wert hinter der ID.

khh 23. Mär 2009 14:40

Re: Frage zur Programmlogik
 
Zitat:

Zitat von mkinzler
Dann würde ich das über einer extra Tabelle regeln

ich denke, du hast Recht, das wird der einfachste Weg sein.


Danke euch, gruss KH


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz