Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TIBStoredProc und BIGINT Parameter (https://www.delphipraxis.net/82810-tibstoredproc-und-bigint-parameter.html)

Meta777 19. Dez 2006 23:00

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX Kompos

TIBStoredProc und BIGINT Parameter
 
Hallo :hi:

Ich hab zwar schon gesucht im Forum aber nix gefunden darum hier folgende Frage:
Wie - wenn überhaupt - kann man mit den IBX Kompos 64Bit Integer Parameter handhaben?
Wenn es nicht gehen sollte, gleich eine zweite Frage: Was ist eine möglichst einfach zu integrierende Alternative die auch paralell zu den schon vorhanden IBX Kompos arbeitet?

Okili... Also schonma vielen Dank...

Shalom und Gottes Segen

Lemmy 20. Dez 2006 07:13

Re: TIBStoredProc und BIGINT Parameter
 
Hi,

ganz einfach: Indem Du an stelle der TIBStoredProc eine TIBDataSet verwendest und dort die Procedure entsprechend aufrufst.

Ein Wechsel zu anderen Komponenten ist nie einfach. Für mich kommen zur Zeit nur 2 Bibliotheken in die engere Auswahl FIBPlus und UIB, evtl. noch ZEOS wenn man mit mehreren unterschiedlichen DBMS arbeiten muss.

GRüße
Lemmy

Meta777 20. Dez 2006 09:27

Re: TIBStoredProc und BIGINT Parameter
 
Danke Lemmy.

Nun hab ich aber noch folgendes Problem: Wie kann ich auf Output Parameter einer Stored Procedure zugreifen? :gruebel:
Delphi-Quellcode:
var
  LRes: Int64;
begin
  IBDataSet1.SelectSQL.Text := 'SELECT * FROM PROC_TEST(:BIIP)';//BigIntInputParam
  IBDataSet1.Prepare;
  try
    IBDataSet1.ParamByName('BIIP').AsInt64 := High(Int64);
    IBDataSet1.Open;
    LRes := IBDataSet1.ParambyName('BIO').AsInt64;//Feld 'BIO' nicht gefunden!
    IBDataSet1.Close;
  finally
    IBDataSet1.UnPrepare;
  end;
Hier die Testprocedure:
SQL-Code:
CREATE PROCEDURE PROC_TEST (
    BII BIGINT)
RETURNS (
    BIO BIGINT)
AS
begin
  /* Procedure Text */
  BIO = 9223372036854775807;
  suspend;
end
TIA

dataspider 20. Dez 2006 10:16

Re: TIBStoredProc und BIGINT Parameter
 
Hi,

'BIO' erhältst du nicht als Parameter, sondern als Feld.

Cu, Frank

Meta777 20. Dez 2006 14:36

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

Zitat von dataspider
Hi,

'BIO' erhältst du nicht als Parameter, sondern als Feld.

Cu, Frank

Aber es gibt da eben kein 64Bit Integer FieldType.
Mit Field[].AsInteger bekomme ich -1 wenn es die 32 Bit übersteigt und .AsInt64 gibs eben nicht.... :|

Was einer nun eine Lösung :?:

Lemmy 20. Dez 2006 17:02

Re: TIBStoredProc und BIGINT Parameter
 
Hi,

bin jetzt gerade etwas überrascht ;-) Ich habe auf jeden Fall schon INT64 aus den IBX rausgequetscht... Ich habe gerade nachgeschaut: IBSQL kann INT64 als Feld. Ich muss mal zu Hause nachschauen wie ich das gemacht habe.....

Lemmy

Hansa 20. Dez 2006 18:19

Re: TIBStoredProc und BIGINT Parameter
 
Lemmy hat wohl nicht genau genug geguckt. :???:

Delphi-Quellcode:
  SP.ParamByName('PARAM1').AsInteger := 1; // Input
  SP.ExecProc;  // SP ausführen, Rückgabewerte ermitteln
  LeseFloatDS := SP.FieldByName ('OUT_PARAM').AsFloat; // Rückgabewerte auslesen

mkinzler 20. Dez 2006 18:45

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

LeseFloatDS := SP.FieldByName ('OUT_PARAM').AsFloat; // Rückgabewerte auslesen
Ein Float ist aber IMHO kein BigInt!

Meta777 20. Dez 2006 18:45

Re: TIBStoredProc und BIGINT Parameter
 
@hansa: Das es hier um Int64 geht haste wohl übersehen? :wink:

@lemmy: wäre sehr dankbar wenn du es findest und postest :)

Hansa 20. Dez 2006 18:57

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

Zitat von Meta777
@hansa: Das es hier um Int64 geht haste wohl übersehen? :wink:

Mann, mann, ein falsches Wort und es ist schon zuviel verlangt, dass die Beteiligten mal ihr Gehirn einschalten. :mrgreen: Man gebe einen . ein und dann noch ein "A". Was sieht man ? AsInt64, AsBcd, AsExtentded usw. Muss man halt selber mal überlegen, was am besten passt.

Meta777 20. Dez 2006 19:21

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von Meta777
@hansa: Das es hier um Int64 geht haste wohl übersehen? :wink:

Mann, mann, ein falsches Wort und es ist schon zuviel verlangt, dass die Beteiligten mal ihr Gehirn einschalten. :mrgreen: Man gebe einen . ein und dann noch ein "A". Was sieht man ? AsInt64, AsBcd, AsExtentded usw. Muss man halt selber mal überlegen, was am besten passt.

Ich komme schon zu Rande mit meiner IDE... Awa Recht haste; bei .Params gibt es ein AsInt64 nur wenn die Procedure ausgeführt wird gibs eine "Ungültige Datenkonvertierung" Exception. Deswegen wahrscheinlich der Vorschlag von Lemmy zum TIBDataset zu Wechseln, da ja wohl die IBX nicht ganz "fertig" entwickelt worden waren bzw. TIBQuery und andere Kompos "nicht benutzt werden" sollten, orso :roll: ...

Hansa 20. Dez 2006 19:34

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

Zitat von Meta777
Ich komme schon zu Rande mit meiner IDE...

Mit Google aber anscheinend nicht. 8) Mein Beispiel war schon die Umsetzung in Delphi. Und zwar von so was :

Zitat:

Datensätze pro Tabelle in einer DB
Mit folgender Stored Procedure kann man sich schnell einen Überblick über die Anzahl der Datensätze in allen Tabellen einer Datenbank verschaffen:

SQL-Code:
CREATE PROCEDURE SP_SERVERISTATISTIK
RETURNS (
    TABLOAD VARCHAR(50),
    TABSIZE BIGINT)
AS
begin
   for
     SELECT RDB$RELATION_NAME
     FROM RDB$RELATIONS
     WHERE
     (RDB$RELATION_NAME NOT LIKE 'RDB$%')
     and
     (RDB$VIEW_SOURCE IS NULL)
     INTO
     :TABLOAD
   DO
   BEGIN
     execute statement 'SELECT CAST(COUNT(*) AS BIGINT) FROM "' || TABLOAD || '"'
     INTO :TABSIZE;
     suspend;
   END
end
Die erste Abfrage selektiert alle echten Tabellen (RDB$VIEW_SOURCE IS NULL), die keine Systemtabellen sind (RDB$RELATION_NAME NOT LIKE 'RDB$%').

Pro Tabelle wird die Anzahl der Datensätze ausgelesen.



Diese Stored Procedure kann man wie eine Tabelle abfragen:

SELECT * FROM SP_SERVERISTATISTIK;
Quelle : http://www.rrze.uni-erlangen.de/hilf...bird-faq.shtml

Wiederholung : den Rest macht As??????

Lemmy 21. Dez 2006 10:01

Re: TIBStoredProc und BIGINT Parameter
 
Guten Morgen,

vielleicht liegt es an mir, dass ich nicht kapiere was Du uns mitteilen willst Hansa. Fakt ist halt, dass Teile von IBX (zumindest in der Version die ich vorliegen habe) INT64 nicht unterstützt, da kannst Du noch so oft AS schreiben - IBDataSet/IBStoredProc.ParamByName().AsInt64 gibt's halt nicht... :-)

Evtl. gäb es über Umwege die Möglichkeit in Delphi wieder nen Int64 zu bekommen (ASString und denn StrToInt64) aber das habe ich nicht probiert. Ich weiß nur, dass ich es mal gemacht habe - und es hat auch funktioniert.

@Meta777: Leider bin ich gestern nicht mehr dazu gekommen meinen Rechner anzumachen....

Lemmy

Meta777 21. Dez 2006 13:08

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

Zitat von Lemmy
Evtl. gäb es über Umwege die Möglichkeit in Delphi wieder nen Int64 zu bekommen (ASString und denn StrToInt64) aber das habe ich nicht probiert. Ich weiß nur, dass ich es mal gemacht habe - und es hat auch funktioniert.

Mit dem TIBDataSet funktioniert es! Sowohl Input- als auch Output-Parameter kann man damit lesen und schreiben. Mit IBStoredProc funktioniert es nicht, jedenfalls kann man kein Int64 Param als String setzen (Ungültige Datenkonvertierung bei .ExecProc...).

Zitat:

Zitat von Lemmy
@Meta777: Leider bin ich gestern nicht mehr dazu gekommen meinen Rechner anzumachen....

Wenn du es noch schaffst wäre es schön. Denn obwohl es mit TIBDataset als String ja geht wäre eine Alternative, vllt. bessere Lösung nicht verkehrt. :stupid:

Shalom

Lemmy 23. Dez 2006 11:43

Re: TIBStoredProc und BIGINT Parameter
 
Hi Meta,

sorry, dass es so lange gedauert hat...

Im Moment bin ich total von mir überrascht ;-) Denn ich habe das Problem genau so gelöst:

Delphi-Quellcode:
function GetLargeInt(DataSet:TIBDataset; FieldName:String; FieldValue:TpInt64):boolean;
begin
  try
    FieldValue^:=StrToInt64(DataSet.Fields.FieldByName(FieldName).AsString);
    result:=true;
  except
    result:=false;
  end;
end;
Damals hatte ich mich einige Zeit mit dem Problem beschäftigt. Allerdings kann es sein, dass neuere Versionen von IBX den Int64 inzwischen besser unterstützen, ich habe die 7.04, da bei mir mal ne neuere Version mit FB 1.5 Probleme gemacht hat.

Grüße
Lemmy

Meta777 24. Dez 2006 00:51

Re: TIBStoredProc und BIGINT Parameter
 
Hi Lemmy,

danke das du dir noch die Mühe gemacht hast und es rausgesucht hast.
Das es so ja mit den StrToInt64 geht, ist es ja auch ok.
Aber mal noch ne andere dowe :stupid: Frage: Wo gibts die aktuellen Versionen der IBX?
Wir nutzen auch nur die, die mit Delphi 7 mitgeliefert werden...

Danke. Shalom und gesegnete Weihnachten :)

MagicAndre1981 24. Dez 2006 02:12

Re: TIBStoredProc und BIGINT Parameter
 
Zitat:

Zitat von Meta777
Aber mal noch ne andere dowe :stupid: Frage: Wo gibts die aktuellen Versionen der IBX?
Wir nutzen auch nur die, die mit Delphi 7 mitgeliefert werden...

Auf CodeCentral gibts die IBX 7.11 als Update für D7.


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