![]() |
Datenbank: Informix • Version: 7SE • Zugriff über: Luxena
Stored Procedure Aufruf Fehler
Morgen.
ich möchte über die Komponente TSQLStoredProc eine Stored Procedure aufrufen. Die Komponente zeigt mir meine SP an und fügt auch die korrekt Anzahl von Parametern hinzu. Ich erhalte beim aktivieren oder mit dem Aufruf execproc die Fehlermeldung Data type 0 (subtype 0) is unsupported Jemand ne Idee woher die kommt. Sven |
Re: Stored Procedure Aufruf Fehler
Hallo Sven,
hast du nach dem Besetzen der Parameter TStoredProc.Prepared auf TRUE gesetzt? Grüße vom marabu |
Re: Stored Procedure Aufruf Fehler
Ja habe ich.
Sven |
Re: Stored Procedure Aufruf Fehler
Manchmal sind ja die Fehlermeldungen direkt interpretierbar. Vielleicht hast du bei irgendeinem Parameter einen Datentyp verwendet, der von Informix SP nicht unterstützt wird.
marabu |
Re: Stored Procedure Aufruf Fehler
Die Stored Procedure funktioniert.
Wenn ich diese im Server selber anstarte wird sie korrekt ausgeführt. Hier mal den Header der procedure:
Delphi-Quellcode:
Sven
create procedure saveKomCom(auftrag char(6) ,nummer char(30) ,was char(5) )
|
Re: Stored Procedure Aufruf Fehler
Vielleicht müssen wir am anderen Ende anfangen. Zeig doch mal den Code mit dem du die SP in Delphi erzeugst. Du arbeitest ja mit TStoredProc, aber bei mir würde das so aussehen:
Delphi-Quellcode:
marabu
var
sp: TADOStoredProc; begin sp := TADOStoredProc.Create(nil); with sp do begin Connection := adoConnection; ProcedureName := 'saveKomCom;1'; Parameters.CreateParameter('auftrag', ftString, pdInput, 6, ''); Parameters.CreateParameter('nummer', ftString, pdInput, 30, ''); Parameters.CreateParameter('was', ftString, pdInput, 5, ''); Prepared := true; end; end; |
Re: Stored Procedure Aufruf Fehler
Ich habe das eben in der IDE gemacht.
So nun habe ich folgenden Code
Delphi-Quellcode:
Nun ist es ganz lustig.
var dbproc: TSQLStoredProc;
begin dbproc:=TSQLStoredProc.Create(nil); dbproc.SQLConnection:=db; dbproc.StoredProcName:= 'saveKomCom'; showmessage(inttostr(dbproc.Params.Count)); with dbproc.Params.CreateParam(ftInteger, 'auftrag', ptInput) do asstring := '100006'; with dbproc.Params.CreateParam(ftInteger, 'nummer', ptInput) do asstring := 'sven@stalkingwolf.de'; with dbproc.Params.CreateParam(ftInteger, 'was', ptInput) do asstring := 'eMail'; dbproc.Prepared := true; showmessage('davor'); dbproc.open; dbproc.close; showmessage('danach'); dbproc.free; end; Gebe ich als StoredProcName = saveKomCom mit dann spuckt das showmessage danach 0 für params.count aus. und das open gibt als Fehlermeldung aus : Listenindex überschreitet das Maximum(0). Lasse ich die drei createParam weg, dann meckert er :-696 SQL error : Variable (auftrag) has undefined value. Setze ich über
Delphi-Quellcode:
den value erhalte ich die Meldung Parameter auftrag nicht gefunden.
dbproc.ParamByName('auftrag').AsString:='100006';
Setze ich über dbproc.ParamByName('1').AsString:='100006'; dann erhalte ich die Meldung : -694 SQL error : Too many arguments passed to procedure Gebe ich als StoredProcName = savekomcom mit, dann erhalte ich als param.count 3 zurück. Setze ich über
Delphi-Quellcode:
den value erhalte ich die Meldung : Data type 0 (subtype 0) is unsupported .
dbproc.ParamByName('1').AsString:='100006';
---------------------- Wenn ich eine SP ohne Parameter aufrufe, dann läuft diese durch. Liegt also wohl an den Parametern. Sven |
Re: Stored Procedure Aufruf Fehler
Du kannst die SP einmal erzeugen und mehrmals benutzen. Du solltest mit ExecProc arbeiten, wenn deine SP keinen result set produziert.
Zitat:
Zitat:
marabu |
Re: Stored Procedure Aufruf Fehler
Case Sensitive ist gut.
Die sollte groß geschrieben werden und genau das kennt er nicht. Er möchte sie immer klein geschrieben haben. Folgendes kleines Bespiel funktioniert auch nicht:
Delphi-Quellcode:
create procedure test(was int)
returning int; return was; end procedure;
Delphi-Quellcode:
Gleiche Meldung wie immer Data type 0 (subtype 0) is unsupported
dbproc:=TSQLStoredProc.Create(nil);
dbproc.SQLConnection:=db; dbproc.StoredProcName := 'test'; dbproc.Params.Clear; with dbproc.Params.CreateParam(ftInteger, 'was', ptInput) do asinteger := 1; dbproc.Prepared := true; dbproc.ExecProc; dbproc.free; Sven |
Re: Stored Procedure Aufruf Fehler
Wenn ich meine SP in MSSQL eingestellt habe und dann in der Delphi IDE ein Datenmodul anlege, eine TADOConnection draufziehe und die Verbindung zur Datenbank herstelle, eine TADOStoredProc mit der ADOConnection verbinde, dann kann ich den ProcedureName aus einer DropDownList auswählen. Nach meiner Auswahl sind alle Parameter korrekt initialisiert.
Wenn ich die SP dynamisch erzeuge, dann muss ich selbst für die Parameter sorgen. Damit ich keine Fehler mache, übernehme ich die Angaben, die ich vorher auf die obige Weise aus der Datenbank habe holen lassen. Wenn das bei dbExpress auch so funktioniert, dann solltest du so erkennen können, ob du die Werte korrekt eingetragen hast. Einen Versuch wäre es wert... marabu |
Re: Stored Procedure Aufruf Fehler
hab ich schon alles durch. Funktioniert genau so wenig.
Er kennt die Procedurenamen und er meldet sogar den Namen eines Parameters wenn dieser nicht gesetzt ist. Sobald ich den Parameter aber setze erhalte ich den Fehler. Sven |
Re: Stored Procedure Aufruf Fehler
Mühsam ernährt sich das Eichhörnchen :-)
Ich hab es hinbekommen. Allerdings über TSQLQuery.
Delphi-Quellcode:
So und morgen setze ich mich daran Werte aus eine Stored Procedure zurück zu bekommen. *dreikreuzemach*
SQLQuery1.SQL.clear;
with SQLQuery1.Params.CreateParam(ftstring, 'auftrag', ptInput) do asstring := '100006'; with SQLQuery1.Params.CreateParam(ftstring, 'nummer', ptInput) do asstring := 'sven@stalkingwolf.de'; with SQLQuery1.Params.CreateParam(ftstring, 'was', ptInput) do asstring := 'eMail'; SQLQuery1.SQL.Add('execute procedure saveKomCom(:auftrag,:nummer,:was);'); SQLQuery1.Prepared:=TRUE; SQLQuery1.ExecSQL(); Sven |
Re: Stored Procedure Aufruf Fehler
danke Dir, Sven. Das hat mir viel Mühe erspart...ich freimele mich auch gerade komplett ohne vorwissen in delphi-datenbankanbindungen rein...also wenn du das mit der rückgabe raus hast...immer her damit ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 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-2025 by Thomas Breitkreuz