Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mi 26.02.03 12:42 
Hi Hansa,

1. Select-Procedure (mit Rückgabewerten):
ausblenden Quelltext
1:
Select * from ProcedureName(Param1, Param2,..,ParamN);					

2. Ausführende Prozedur (ohne Rückgabewert):
ausblenden Quelltext
1:
Execute ProcudureName(Param1, Param2,...,ParamN);					

Mit anderen Worten: Wie bei ner Tabelle!

Grüße
Lemmy

Moderiert von user profile iconTino: Code-Tags hinzugeüfgt.
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 26.02.03 12:47 
also brauche ich die Komponente "StoredProcedure" gar nicht :?: Wozu ist die dann da :?:

_________________
Gruß
Hansa
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: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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?" :shock:

_________________
Gruß
Hansa
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: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 26.02.03 14:36 
ich brauche etwas mehr Infos. :cry:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 26.02.03 15:03 
So sieht die DFM aus :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 26.02.03 16:25 
Habe die Procedure mal so umgebaut :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: 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 :D

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 26.02.03 21:18 
so gehts tatsächlich :mrgreen: :

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