Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feldwert in IB Automatisch berechnen duch sp. (https://www.delphipraxis.net/71857-feldwert-ib-automatisch-berechnen-duch-sp.html)

mojo777 21. Jun 2006 22:21

Datenbank: ib • Version: 6 • Zugriff über: sql

Feldwert in IB Automatisch berechnen duch sp.
 
hallo,
kennst jemand vll eine möglichkeit einen feldwert automatisch durch eine sp zu berechnen?
ich will z.b. eine spalte haben, in der steht wieviel ein kunde bereits gekauft hat.
ist sicherlich auch anders möglich, aber ich würde das gerne mal so elegant lösen. :-)


mfg

mkinzler 21. Jun 2006 22:25

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Du kannst einen Trigger schreiben, der dann die SP verwendet.
Sind die Kaufvorgänge auch in der DB gespeichert?

mojo777 21. Jun 2006 22:27

Re: Feldwert in IB Automatisch berechnen duch sp.
 
ja, aber ich will die daten nicht statisch drin haben. (also in der spalte.. die verkäufe sind natürlich gespeichert in einer table... geht dann mit sum bzw count etc..)
der trigger ist ja schon zu krass für sowas..
wäre echt am besten als eine art "computed by" feld.

mkinzler 21. Jun 2006 22:32

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

Zitat von mojo777
ja, aber ich will die daten nicht statisch drin haben. (also in der spalte.. die verkäufe sind natürlich gespeichert in einer table

es lebe die Redundanz ;-)
Zitat:

... geht dann mit sum bzw count etc..)
Ja
Zitat:

der trigger ist ja schon zu krass für sowas..
Warum, im "before Insert" der Verkaufstabelle.
Zitat:

wäre echt am besten als eine art "computed by" feld.
Dann würde es jedesmal berechnet werden, wenn ein select auf die Daten erfolgen würde.

mojo777 21. Jun 2006 22:37

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

Dann würde es jedesmal berechnet werden, wenn ein select auf die Daten erfolgen würde.
ja. das will ich :-)


redundanz will ich nich... :-P

mkinzler 21. Jun 2006 22:40

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

Zitat von mojo777
Zitat:

Dann würde es jedesmal berechnet werden, wenn ein select auf die Daten erfolgen würde.
ja. das will ich :-)

Ist dir der Datenbankzugriff zu schnell (zu gute Performance, die zunichte gemacht werden muß)?


redundanz will ich nich... :-P[/quote]Wenn du die Verkäufe auf der einen seite und die Anzahl in der "Artikel"-Tabelle nochmal speicherst, dann ist das Redundanz.

mojo777 21. Jun 2006 22:49

Re: Feldwert in IB Automatisch berechnen duch sp.
 
...... :-D
nun ja.
die anwendung ist in der tat nicht zeitkritisch.
und diese eine query wird nicht allzuoft ausgeführt... also auf userbefehl halt. die 10-20 ms sind ok.

gruß

mkinzler 21. Jun 2006 23:01

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Wie gesagt:
Beste Variante: SP die manuell aufgerufen wird und Anzahl der Verkaufsdatensätze pro Artikel zurückliefert.
2. Variante: Anzahl ist normales Feld in Tabelle, welches in einem Trigger der Verkaufstabelle nach Insert ( durch Aufruf der SP) gesetzt wird.
3. Lösung durch View, in dem das Anzahl Feld durch Aufruf der SP bei jedem Zugriff auf das Feld "berechnet" wird.

Nachteil von 3: Je nach Anzahl der Artikel und deren Verkauftransaktionen sehr langsam, da bei jdem Zugriff berechnet werden muß. D.H wenn man
SQL-Code:
select * from Artikel;
ausführt, muß für jede Zeile ein Aufruf und damit eine Summenbildung erfolgen.

mojo777 21. Jun 2006 23:08

Re: Feldwert in IB Automatisch berechnen duch sp.
 
hmm.. ich dachte view geht nur nach statischen inhalten... also kann nur mit parametern arbeiten, die auch fest irgendwo gespeichert sind.... :?

ok. es scheint so zu sein, dass man keine lustige funktion in computed by schreiben kann in ib wie in delphi...

dank dir!

mkinzler 21. Jun 2006 23:23

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Natürlich kannst du auch in Delphi eine computed Feld anlegen, das du dann durch eine SP berechnen lassen kannst. Oder du kannst die Anzahl der Verkäufe einfach in der Query hinzu-Joinen. in beiden Fällen gibt es dann keine Redundanz, da die Felder ja nicht wirklich existieren.
Für was brauchst du das eigentlich?

mojo777 21. Jun 2006 23:28

Re: Feldwert in IB Automatisch berechnen duch sp.
 
:-) naja. eigentlich ist das nur so eine prinzipielle frage gewesen. so zum spielen.
wollte halt einfach die computed by felder in ib besser kennen lernen.

es ist manchmal super bequem aktionen auf interbase zu verladen.

ok. gut nacht.
:-)

danke dir!

mkinzler 21. Jun 2006 23:31

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

hmm.. ich dachte view geht nur nach statischen inhalten... also kann nur mit parametern arbeiten, die auch fest irgendwo gespeichert sind.... Confused
Wie meinst du das? Du kannst für einen View einen SQL-Query nehmen. Und dieser würde in diesem fall halt ein Join zwischen der Artikeldatenbank und der Summe der Verkäufe sein.

mojo777 21. Jun 2006 23:43

Re: Feldwert in IB Automatisch berechnen duch sp.
 
also wenn ich eine abfrage über eine ganze tabelle mache und die zeilen unterscheiden sich z.b. nach kunden, dann muss ja die view immer den aktuellen (zeiger) kunden beachten. kann sie das denn?
ich wüsste keine möglichkeit. :-(

Hansa 22. Jun 2006 04:15

Re: Feldwert in IB Automatisch berechnen duch sp.
 
So was ist doch nur ein SQL 3-Zeiler und in Delphi mit einem TDataset schnell auszulesen :

SQL-Code:
SELECT A.NR, SUM (V.UMSATZ) AS VKU FROM VERKAUF V JOIN ART A ON (A.ID = V.ID_ART) WHERE ... group by A.NR
Ohne Gewähr (nicht getestet) ! Ob das jetzt mit einem Dataset gemacht wird ("SELECT * FROM DS"), oder es gibt eine SP und ein Dataset ("SELECT * FROM SP") spielt keine große Rolle. Habe mir angewöhnt, bei langen Feldlisten und wenigen Rückgabewerten, das eher mit SPs zu machen. Ist viel besser für Source, wegen Tibbvehler, ''''''''' vergessener Parameter usw. Für Anfänger aber eher nicht voreilig zu empfehlen.

mkinzler 22. Jun 2006 07:03

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

Zitat von mojo777
also wenn ich eine abfrage über eine ganze tabelle mache und die zeilen unterscheiden sich z.b. nach kunden, dann muss ja die view immer den aktuellen (zeiger) kunden beachten. kann sie das denn?
ich wüsste keine möglichkeit. :-(

Natürlich geht das, in dem du die Abfrage, die du machen würdest (z.B. die von Hansa) als Code des Views nimmst.

TBx 22. Jun 2006 07:09

Re: Feldwert in IB Automatisch berechnen duch sp.
 
.. und Du kannst natürlich auch ein Computed By Feld erstellen, daß Dir die gewünschten Werte liefert,
aber wie schon gesagt, Du machst Dir die Performance der Datenbank damit zunichte, da für jeden Datensatz, der ausgelesen wird, gerechnet werden muß.

Gruß

onlinekater

mojo777 22. Jun 2006 10:51

Re: Feldwert in IB Automatisch berechnen duch sp.
 
ja, aber was soll ich mit einem view nur für eine person aus der db?
oder kann ich das where kriterium dynamisch variieren? ich denke nicht. :-(
+

Hansa 22. Jun 2006 11:39

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

Zitat von mojo777
...oder kann ich das where kriterium dynamisch variieren? ich denke nicht. :-(
+

Natürlich geht das. Ersetze die ... in dem SELECT z.B. so:
SQL-Code:
K.NR = :PAR_KUNR
Im Programm steht dann so was :

Delphi-Quellcode:
VkDS.ParamByName ('PAR_KUNR').AsString := edKuNr.Text;
Genauso gut kann man das dynamisch erweitern bspw. so :

Delphi-Quellcode:
VkDs.Close;
VkDs.SelectSql.Clear;
VkDs.SelectSql.Add ('Select ...');
...
if CheckBoxAlpha.checked then
  VkDs.SelectSql.Add ('ORDER BY NAME');
else
  VkDs.SelectSql.Add ('ORDER BY NR');
VkDs.Open;
Ja, Der View. Was soll der View ? :shock: Was soll der denn hier nützen ?

mojo777 22. Jun 2006 11:43

Re: Feldwert in IB Automatisch berechnen duch sp.
 
aha!
also mit parametern IM view ;-) ist mir neu. geil!
das ist sehr gut, sehr gut...

Hansa 22. Jun 2006 12:42

Re: Feldwert in IB Automatisch berechnen duch sp.
 
Zitat:

Zitat von mojo777
...ist mir neu. geil!
das ist sehr gut, sehr gut...

:shock: Es ist nicht zu fassen. :wall: :nerd: :lol: :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 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-2025 by Thomas Breitkreuz