Laut der Hilfedatei von Delphi 6 (Thema Datenmengen vom Typ Stored Procedures) soll es möglich sein die Returns der IBSP über eine TDatasource mit Datensteurungskomponenten zuverbinden.
So "sieht" meine IBSp aus. Nicht wundern das sie sich selbst referenziert. Aber eine andere Lösung ist mir nicht eingefallen um ein Tree mit mir einer unbekannten Anzahl von Level´s zu speichern.
<pre>
CREATE PROCEDURE SelectFromSubkat (IntInputLevel INTEGER, IntInputRefSubkatid INTEGER)
RETURNS (RET_SUBKATEGORIE INTEGER, RET_SUBKATEGORIE_REF_KATEGORI INTEGER, RET_SUBKATEGORIE_REF_SUBKATE INTEGER,
RET_SUBKATEGORIE_LEVEL INTEGER, RET_SUBKATEGORIE_NAME VARCHAR(50)) AS
BEGIN
FOR SELECT IBDF_SUBKATEGORIE,
IBDF_SUBKATEGORIE_REF_KATEGORI,
IBDF_SUBKATEGORIE_REF_SUBKATE,
IBDF_SUBKATEGORIE_LEVEL,
IBDF_SUBKATEGORIE_NAME
FROM IBT_SUBKATEGORIE
WHERE IBDF_SUBKATEGORIE_REF_SUBKATE=:IntInputRefSubkatid
AND IBDF_SUBKATEGORIE_LEVEL=:IntInputLevel
INTO :RET_SUBKATEGORIE,
:RET_SUBKATEGORIE_REF_KATEGORI,
:RET_SUBKATEGORIE_REF_SUBKATE,
:RET_SUBKATEGORIE_LEVEL,
:RET_SUBKATEGORIE_NAME
DO
SUSPEND;
END
^
</pre>
in Delphi:
Einer TDatasource habe ich als Dataset die IBSp angegeben. 5 DBEdit Feldern die Datasource und als Fieldname kann ich RET_XXXXXXXX wählen. Also hat Delphi das soweit schonmal begriffen.
Der Aufruf in Delphi
<pre>
with DM.IBSPSubkatRefSubkat do begin
ParamByName('INTINPUTREFSUBKATID').AsInteger := 1;
ParamByName('INTINPUTLEVEL').AsInteger := 1;
Prepare;
ExecProc;
end;
</pre>
Als Parameter habe ich "dummyhalber" die 1 übergeben. Diese Datensätze sind in der Tabelle auch vorhanden.
Doch es wird nichts angezeigt. Ein ShowMessage(IntToStr(DM.IBSPSubkatRefSubkat.Record Count)); gibt eine 0 aus.
In dem Buch C/S Datenbankentwicklung mit Delphi von Herrn Kosch steht das eine Select Stored Procedures bei dem Einsatz von Delphi in einer TQuery (seit ibx wohl TibQuery Oder TIbSql) Komponenten gut aufgehoben sei.
Muß dieser Weg eingeschlagen werden die Returns zu erhalten? WEnn ja wie übergebe ich in einem TibQuery der IBSp die benötigten Parameter?
So "sieht" meine IBSp aus. Nicht wundern das sie sich selbst referenziert. Aber eine andere Lösung ist mir nicht eingefallen um ein Tree mit mir einer unbekannten Anzahl von Level´s zu speichern.
<pre>
CREATE PROCEDURE SelectFromSubkat (IntInputLevel INTEGER, IntInputRefSubkatid INTEGER)
RETURNS (RET_SUBKATEGORIE INTEGER, RET_SUBKATEGORIE_REF_KATEGORI INTEGER, RET_SUBKATEGORIE_REF_SUBKATE INTEGER,
RET_SUBKATEGORIE_LEVEL INTEGER, RET_SUBKATEGORIE_NAME VARCHAR(50)) AS
BEGIN
FOR SELECT IBDF_SUBKATEGORIE,
IBDF_SUBKATEGORIE_REF_KATEGORI,
IBDF_SUBKATEGORIE_REF_SUBKATE,
IBDF_SUBKATEGORIE_LEVEL,
IBDF_SUBKATEGORIE_NAME
FROM IBT_SUBKATEGORIE
WHERE IBDF_SUBKATEGORIE_REF_SUBKATE=:IntInputRefSubkatid
AND IBDF_SUBKATEGORIE_LEVEL=:IntInputLevel
INTO :RET_SUBKATEGORIE,
:RET_SUBKATEGORIE_REF_KATEGORI,
:RET_SUBKATEGORIE_REF_SUBKATE,
:RET_SUBKATEGORIE_LEVEL,
:RET_SUBKATEGORIE_NAME
DO
SUSPEND;
END
^
</pre>
in Delphi:
Einer TDatasource habe ich als Dataset die IBSp angegeben. 5 DBEdit Feldern die Datasource und als Fieldname kann ich RET_XXXXXXXX wählen. Also hat Delphi das soweit schonmal begriffen.
Der Aufruf in Delphi
<pre>
with DM.IBSPSubkatRefSubkat do begin
ParamByName('INTINPUTREFSUBKATID').AsInteger := 1;
ParamByName('INTINPUTLEVEL').AsInteger := 1;
Prepare;
ExecProc;
end;
</pre>
Als Parameter habe ich "dummyhalber" die 1 übergeben. Diese Datensätze sind in der Tabelle auch vorhanden.
Doch es wird nichts angezeigt. Ein ShowMessage(IntToStr(DM.IBSPSubkatRefSubkat.Record Count)); gibt eine 0 aus.
In dem Buch C/S Datenbankentwicklung mit Delphi von Herrn Kosch steht das eine Select Stored Procedures bei dem Einsatz von Delphi in einer TQuery (seit ibx wohl TibQuery Oder TIbSql) Komponenten gut aufgehoben sei.
Muß dieser Weg eingeschlagen werden die Returns zu erhalten? WEnn ja wie übergebe ich in einem TibQuery der IBSp die benötigten Parameter?
Comment