| Autor |
Beitrag |
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 12:00
Hi,
habe mir jetzt mal eine Stored Procedure angelegt. Wie komme ich da jetzt mit Delphi dran ??
_________________ Gruß
Hansa
|
|
Lemmy
      
Beiträge: 792
Erhaltene Danke: 49
Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
|
Verfasst: Mi 26.02.03 12:42
Hi Hansa,
1. Select-Procedure (mit Rückgabewerten):
Quelltext 1:
| Select * from ProcedureName(Param1, Param2,..,ParamN); |
2. Ausführende Prozedur (ohne Rückgabewert):
Quelltext 1:
| Execute ProcudureName(Param1, Param2,...,ParamN); |
Mit anderen Worten: Wie bei ner Tabelle!
Grüße
Lemmy
Moderiert von Tino: Code-Tags hinzugeüfgt.
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 12:47
also brauche ich die Komponente "StoredProcedure" gar nicht  Wozu ist die dann da 
_________________ Gruß
Hansa
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mi 26.02.03 13:15
Hi
| hansa hat folgendes geschrieben: | also brauche ich die Komponente "StoredProcedure" gar nicht Wozu ist die dann da  |
In erster Linie um die Handhabung zu vereinfachen.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 13:26
| LCS hat folgendes geschrieben: | | In erster Linie um die Handhabung zu vereinfachen. |
Dann formuliere ich die Frage eben anders :"Wie handhabe ich eine Stored Procedure in Delphi?" 
_________________ Gruß
Hansa
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mi 26.02.03 13:55
Eigentlich ganz simpel. Der TStoredProc einfach die Datenbank zuordnen, Procedure auswählen, eventl. Eingabeparameter füllen und mit ExecProc ausführen und die Ergebnisse holen.
Wenn die Procedure allerdings ein Select-Erbniss liefert, musst du so verfahren wie Lemmy schon geschrieben hat.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 14:36
ich brauche etwas mehr Infos.
Quelltext 1: 2: 3: 4: 5: 6: 7:
| BEGIN SELECT SUM(UMSATZMWST2), AVG(UMSATZMWST2), MIN(UMSATZMWST2), MAX(UMSATZMWST2) FROM RECKOPF WHERE RECHNNR < 1000 INTO :tot_budget, :avg_budget, :min_budget, :max_budget; SUSPEND; END |
Diese Prozedur soll mir halt für Testzwecke irgendwelche Daten liefern für alle Rechnungen mit nr < 1000. Wie soll ich jetzt am besten die Daten darstellen? Z.B. mit 4 DBtext, oder wie sonst ? Wie kriege ich die daten da rein. Sorry, aber ich bin gerade dabei verschiedene Aufgaben von meinem Programm auf den Server zu verlagern und hab die Dinger noch nicht benutzt.
_________________ Gruß
Hansa
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 15:03
So sieht die DFM aus :
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| object pFIBStoredProc1: TpFIBStoredProc Database = pFIBDatabase1 ParamCheck = True SQL.Strings = (
'EXECUTE PROCEDURE TEST_PROCEDURE (?MAX_BUDGET, ?MIN_BUDGET, ?AVG' + '_BUDGET, ?TOT_BUDGET)') Transaction = pFIBTransaction1 StoredProcName = 'TEST_PROCEDURE' Left = 24 Top = 152 end |
In der DB-Prozedur verwende ich aber Select, hier steht jetzt EXECUTE drin. Ich denke, das soll ich so nicht machen  Ist das MAX_BUDGET kein Rückgabewert ? Was macht denn dann die Prozedur überhaupt ?
_________________ Gruß
Hansa
|
|
Lemmy
      
Beiträge: 792
Erhaltene Danke: 49
Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
|
Verfasst: Mi 26.02.03 15:50
Hi,
wie ich schon geschrieben habe, muss bei einer Prozedur die einen oder mehrere Werte zurückliefert mit Select zugegriffen werden, was letztendlich heißt (zitat:"Mit anderen Worten: Wie bei ner Tabelle! ") in einer TIBQuery/TIBDataSet ein Select rein:
Select * from Test_Procedure;
Fertig!
Die Komponente TIBStoredProcedure ist demzufolge für rein ausführbare Procs ohne Rückgabewert!
Grüße
Lemmy
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 16:25
Habe die Procedure mal so umgebaut :
Quelltext 1: 2: 3: 4: 5: 6: 7:
| BEGIN SELECT SUM(UMSATZMWST2) FROM RECKOPF WHERE RECHNNR < :RECHNNRPAR INTO :tot_budget; SUSPEND; END |
Dabei habe ich :RECHNNRPAR als Input und tot:_budget als Output-Parameter angelegt. Das scheint so auch zu funktionieren, aber mein einfaches SelectSQL passt nun nicht mehr : SELECT * FROM TEST_PROCEDURE "Parameter mismatch" Wie übergebe ich den Parameter RECHNNRPAR an die Procedure ?? Daran wirds wohl hängen. Und noch eine Frage am Rande, sollte man die Stored Procedures einsetzen, wo es nur geht, oder nur so ab und zu ?
_________________ Gruß
Hansa
|
|
Lemmy
      
Beiträge: 792
Erhaltene Danke: 49
Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
|
Verfasst: Mi 26.02.03 17:37
| hansa hat folgendes geschrieben: | | Und noch eine Frage am Rande, sollte man die Stored Procedures einsetzen, wo es nur geht, oder nur so ab und zu ? |
Hast wohl meine DB-Tutorial-Trilogie noch nicht vollständig gelesen
Parameterübergabe an Proc:
Select * from Procedurename(Param1, Param2, Param3,....);
Stored Procedures sollen überall dort eingesetzt werden wo es Sinn macht und das macht es i.d.R. fast immer!
Grüße
Lemmy
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 26.02.03 21:18
so gehts tatsächlich  :
| Zitat: |
procedure TForm1.Button1Click(Sender: TObject);
begin
pFIBDataSet1.close;
pFIBDataSet1.SelectSQL.Text := 'SELECT * FROM TEST_PROCEDURE ('+Edit1.Text+')';
pFIBDataSet1.open;
end;
|
Dank an Lemmy  na gut, dann muß noch eine kleine IB-Exception dran glauben und morgen die UDF.
_________________ Gruß
Hansa
|
|