AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie behandelt Interbase SELECT INTO abfragen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie behandelt Interbase SELECT INTO abfragen?

Ein Thema von mojo777 · begonnen am 24. Sep 2005 · letzter Beitrag vom 26. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#1

Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 13:48
Datenbank: IB6 • Version: 6 • Zugriff über: stored procedure
Hallo!
Ich sitze gerade vor so einer aufgabe mit stored procedures folgendes zu realisieren:
Delphi-Quellcode:
SELECT KND_ID FROM TRANSACTION WHERE EINZAHLUNG>1000 INTO :KND_ID;
EXECUTE PROCEDUERE UPDATE_KND_PRIVILEGIEN(:KND_ID);
suspend;
so...
was geschieht da?
wird er mir alle kunden "updaten" bei denen EINZAHLUNG>1000 steht?
Oder macht der das nur mit dem ersten datensatz?
oder passiert gar nichts, weil die procedur UPDATE_KND_PRIVILEGIEN einen Intergerwert erwartet eine Liste dieser aber bekommt?

Kann das jetzt leider noch sehr schlecht testen, weil das sql-programm noch in einer sehr rohen phase ist

Vielen dank für Eure Tipps!

MfG
Muh macht die kUh
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 14:07
Die SP wird nur für den ersten Kunden aufgerufen.
Für diese Aufgabe hilft dir nur ein Trigger, oder do musst garantieren, das dein SELECT immer nur einen Datensatz zurückgibt. Das ist aber eher Gefriemel und wenig professionell ...

  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#3

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 14:10
schade...

gibts da schleifen???
Muh macht die kUh
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 14:15
Zitat von mojo777:
Kann das jetzt leider noch sehr schlecht testen, weil das sql-programm noch in einer sehr rohen phase ist
Welches Programm ? Für so was gibts IBExpert. Da kann man kinderleicht die 2 Zeilen testen. Entweder geht es so nicht, oder es wird der erste bzw. letzte Wert, der der WHERE Klausel entspricht in die Variable gespeichert. Weiß es jetzt selber nicht genau und würde das auch testen, bevor ich groß im Nebel stochere oder umständlich suche. Aber was soll ein Trigger da machen ? Wenn ich mirs nochmal überlege, so wird eine Ergebnismenge gefunden und deshalb wirds mit einem Wert kaum gehen. Wie sollte denn das gehen und wozu überhaupt ?
Gruß
Hansa
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#5

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 14:25
@hansa
also mit dem programm meine ich nicht ibexpert
sondern mein programm. der codeausschnitt ist nur ein stark vereinfachtes beispiel.
bei mir hängen viele tabellen von einander ab und wenn sich irgendwo was ändert, sollten die anderen angepasst werden.
ok, habs verstanden. ich werde gleich mal nach dem mittagessen versuchen zu testen

mit triggern ist es so eine sache... die benutze ich sowieso. aber für ergebnismengen....? hä? naja. egal.
hmmm *denk*... joaaaa... ist keine schlechte idee!!!!!
wenn ich UPDATE TABLE1 SET F1='bla' WHERE <cond> ausführe, DANN kann wird doch ein trigger nacheinander aufgerufen... also für jeden eintrag einzeln. und so wäre es doch möglich die ergebnismenge zu teilen....
oder?


ist aber krasses gefusche!
Muh macht die kUh
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 14:36
UPDATE TABLE1 SET F1='blaWHERE F2>1000 Damit werden alle F1-Felder der gesamten Tabelle auf 'bla' gesetzt, sofern F2 > 1000 ! Also Vorsicht !Da geht es aber in erster Linie nicht um eine Menge sondern um die Bedingung > 1000. Und die Bedingung >1000 ist genau festgelegt, ebenso wie der neue Wert 'bla'. Ein Update-Trigger nützt insofern etwas, wenn bei vorliegen einer Bedingung eine Aktion automatisch ausgeführt werden soll. Das geht allerdings eventuell mit einer SP sogar besser. Ich verwende z.B. Update-Trigger um festzuhalten, wann der letzte Zugriff auf einen Datensatz war. Das kann die DB selber erledigen und ich habe meine Ruhe. Alles andere was mit speichern zu tun hat : SP.
Gruß
Hansa
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#7

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 14:59
was gibt mir denn der letzte zugriff?
ok ich beschreibe mal mein problem im detail.

ein kunde kauft regelmäßig ein.
dadurch steigt sein wert (menge des bezahlten geldes )
abhängig von diesem wert wird dem kunden eine gruppe zugewiesen.
z.b. gruppe 2. diese gilt für kunden, die mehr als 1000 eur und weniger als 2000 eur eingezahlt haben.
so. jetzt so so ein benutzer des programms und sagt: wir müssen den bereich der gruppe 2 verschieben. und zwar auf
1500<x<2500
davon wollen ja alle betroffen werden, die in der 2. gruppe vorher gewesen sind.
manche fliegen auch raus und kommen in die 1. gruppe, falls sie <1500 auf dem konto haben.
anhängig von der gruppe und für jeden kunden individuell gibts da noch eine angebotstabelle, in der die rabatte etc gespeichert wind.... da muss sich dann auch einiges ändern, falls die gruppe wandelt.....
soohh...

aber eigentlich ist mir der ansatz jetzt klar!
setze mich dann mal davor.

vielen DANK!!

Muh macht die kUh
  Mit Zitat antworten Zitat
imp

Registriert seit: 5. Mai 2003
25 Beiträge
 
#8

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 16:37
Hallo,

du kannst, wie du schon vermutet hast, Schleifen innerhalb der SP programmieren. Die genaue Syntax weiss ich zwar gerade nicht aber es müsste ungefähr so gehen (genaueres kann dir die Doku liefern):

Code:
FOR SELECT a, b FROM d INTO :value DO
BEGIN
  // Mache was mit :value
END
Schönen Gruß,
Frank
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 19:24
Nachdem jetzt endlich klar ist, um was es geht (aber nur im Prinzip !) : es liegt ein Denkfehler vor. 8) Folgendes Beispiel soll nur die Vorgehensweise verdeutlichen : Wie speichert man ein Alter ab, um später einem beim 18. Geburtstag ein Geschenk zu schicken ? Man kann es so machen wie mojo das vorhatte und speichert jetzt 17 als Alter und dann geht man hin und muß immer jeden Tag alle Daten durchgehen und prüfen, ob derjenige Geburtstag hat. Ist das der Fall, dann werden die entsprechenden Alter-Werte auf 18 gesetzt und neu abgespeichert. Es gibt da so Sachen wie Normalform u.ä. Die sind nicht umsonst vorhanden, in der Praxis aber meistens nicht zu 100 % umzusetzen. Zumindest bei dem Beispiel mit dem Alter wäre es doch wohl besser das Geburtsdatum zu speichern, aus dem man sich jederzeit das Alter zu einem bestimmten Tag errechnen kann.

Bei der konkreten Sache siehts ähnlich aus. Der Umsatz muß egal bleiben. Der Kunde bleibt bei Umsatz X. Und in zweiter Tabelle steht drin, daß der Umsatz X in Kategorie 2 fällt oder sonstwas. Wird die Grenze von Kategorie 2 verändert, dann fällt der Kunde dementsprechend in andere Kategorie oder auch nicht. Das Feld mit der Gruppe gehört NICHT in die Daten des Kunden !!

P.S.: das hat übrigens noch den großen Nebeneffekt, daß ich mit Änderung eines einzigen Feldes in der Gruppentabelle sämtliche Daten der anderen Tabelle beeinflussen kann.
Gruß
Hansa
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#10

Re: Wie behandelt Interbase SELECT INTO abfragen?

  Alt 24. Sep 2005, 20:53
Zitat von jensw_2000:
Die SP wird nur für den ersten Kunden aufgerufen.
Für diese Aufgabe hilft dir nur ein Trigger, oder do musst garantieren, das dein SELECT immer nur einen Datensatz zurückgibt. Das ist aber eher Gefriemel und wenig professionell ...

Entschuldige,
das kommt dabei raus wenn man zwischen Tür und Angel noch schnell etwas von sich gibt ..

Ich meinte nicht Trigger sondern einen Cursor ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz