Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Stored Function\Procedures mit C++ Builder 6

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.11.2005, 13:30 Uhr
~Slurm123
Gast


Hallo Leute,

hat eine(r) von Euch schon mal Stored Functions benutzt die einen Rückgabewert haben?

Ich bekomme da immer wieder Fehlermeldungen....

Folgendes Szenario:

Möchte über eine TADOStoredProcedure folgende OracleStoredFunction aufrufen:

function checkIDN (p_idn_prefix in idn.idn_prefix%type,
p_idn_nr in idn.idn_nr%type ) return boolean;


p_idn_prefix datentyp char 'L'
p_idn_nr datentyp number(10) 0165141437

------------- Aufruf unter SQL+ -------------

declare

v_procret boolean;

begin


v_procret := checkidn('L', 0165141437);

if v_procret = true then

dbms_output.put_line('nummer vorhanden');
else
dbms_output.put_line('nummer nich vorhanden');

end if;

end;

--------------------- funktioniert einwandfrei ----------------------

Wenn ich das ganze mit TADOStoredProcedure aufrufe erscheint folgende Meldung:

wrong number or types of arguments in call 'checkidn'

Übergebene Parameter:

OleSrt 'L' input
Integer 0165141437 input
boolean true/false pdReturnValue

Laut der Borland Hilfe muß der Rückgabewert in die Parameterliste eingetragen werden. Wenn ich das nicht mache lässt sich die Procedure nicht aufrufen (Fehlermeldung: Procedure nicht vorhanden! Liegt wohl am Rückgabewert)

Starten tu ich das ganze mit Procedure->open() oder Procedure->ExecProc()

Ich hoffe jemand hat eine Lösung, bin auch über andere Lösungsvorschläge dankbar...

LG

Slurm...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.11.2005, 19:13 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,

Zitat von ~Slurm123:

p_idn_prefix datentyp char 'L'
p_idn_nr datentyp number(10) 0165141437

Wenn ich das ganze mit TADOStoredProcedure aufrufe erscheint folgende Meldung:

wrong number or types of arguments in call 'checkidn'

Übergebene Parameter:

OleSrt 'L' input
Integer 0165141437 input
boolean true/false pdReturnValue

Slurm...

Wenn ich mich jetzt nicht täusche, hast Du einen Int (Number(10)) deklariert, was Du aber schreibst ist ein String (0165141437). Wenn Du das unter SQL+ WorkSheet eingibst

C++:
insert into deineTable values ('L','0165141437')


castet Oracle die 0 weg (bei Typ Number). Hast du das Feld als VarChar(10) oder VarChar2(10) deklariert, rufst Du unter dem BCB falsch auf.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 04.11.2005 um 19:26 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.11.2005, 12:57 Uhr
~Slurm123
Gast


Hallo Uwe,

die Storedprocedure ist folgendermaßen aufgebaut:

checkIDN (...)

Return: (number) True/False

Parameter: in varchar2(1) Identnummernprefix zB: 'L'
: in number identnummer zB: 0165141437 (ob jetzt die 0 drann ist spielt keine Rolle)


Ich übergebe mit der TADOStoredproc folgende Parameter:

DatenTyp|Wert|rein/raus/return

OleSrt 'L' input
Integer 0165141437 input
boolean true/false pdReturnValue

Die Werte kann man im Objektinspektor unter Paramters eingeben. Dort stellt man auch ein ob der Wert der Procedure übergeben wird oder ob es sich bei dem Parameter um einen Rückgabewert handelt...

Kann leider nur über die Stored Procedure auf die DB zugreifen und keine direkten Querys absetzten...

Hab jetz auch mit ein paar anderen Storedproc gespielt, wie mir scheint ist das Problem der Rückgabewert denn wenn man eine normale Procedure mit Parameter startet funktioniert es einwandfrei. Das Problem sind also die Stored Functions die einen Rückgabewert liefern...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.11.2005, 20:58 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ich denke schon das das mit der Struktur Deiner Tabellen zu tun hat.

Zitat von ~Slurm123:

Kann leider nur über die Stored Procedure auf die DB zugreifen und keine direkten Querys absetzten...


Hast du den Oracle-Client auf Deinem Rechner? Wenn ja dann nutze SQL+WorkSheet. Die Logindaten musst Du ja haben, sonst könntest Du nicht über Borland darauf zugreifen.
Wenn das nicht installiert ist, nutze Access und verbinde Dich über ODBC mit der Db. Danach kannst du die Tabellen importieren oder verknüpfen (vorsicht, jede Datenänderung wirkt sich sofort auf den Datenbestand in der Ora aus). Nach dem Import kannst Du dir die Strukturen ansehen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.11.2005, 11:06 Uhr
~Slurm123
Gast


Hab jetzt herausgefunden das die Rückgabewerte schuld sind. Boolsche rückgabewerte können nicht verarbeitet werden... Int usw. gehen ohne Probleme...

LG

Slurm...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: