Einzelnen Beitrag anzeigen

Benutzerbild von cs.rumpelstilzchen
cs.rumpelstilzchen

Registriert seit: 16. Sep 2004
Ort: NRW
72 Beiträge
 
Delphi XE4 Professional
 
#5

Re: dbExpress und TSQLStoredProc Probleme mit Parameterüberg

  Alt 2. Jun 2005, 10:46
Hallo Thorsten,
vielen Dank für die Hilfe zu später Stunde!

Dein Beispiel funktioniert bei mir nicht! Vielleicht mache ich noch was falsch!!?!
Hier der StoredProc-Code:
SQL-Code:
CREATE PROCEDURE TestProc @Input INT
AS

DECLARE @ausgabe1 INT, @ausgabe2 INT
SET @ausgabe1 = 101
SET @ausgabe2 = 102
SELECT @ausgabe1 AS Output1, @ausgabe2 AS Output2
GO
und der Delphi-Aufruf dazu:

Delphi-Quellcode:
with gMySqlServerObject.SQLStoredProc do
  begin
  try
    StoredProcName := 'TestProc';
    ParamByName('Input').AsInteger := 1; // <- hier tritt der Fehler auf!!!!
    Open;
    iResult := ExecProc;
    Output1 := FieldByName('Output1').AsInteger;
    Output2 := FieldByName('Output2').AsInteger;
    Close;

    ShowMessage('ExecProc = '+inttostr(iResult));

    ShowMessage('Output1 = '+inttostr(Output1));

    ShowMessage('Output2 = '+inttostr(Output2));
  finally
    Free;

  end; // with gMySqlServerObject.SQLStoredProc do
Ich erhalte die Fehlermeldung: 'Parameter 'Input' nicht gefunden'

Und jetzt der Hit: Lasse ich diese Zeile Weg bekomme ich beim Open folgende Fehlermeldung:
'Datenbank-Server-Fehler: SQL State: 42000, SQL Error Code: 201
Die TestProc-Prozedur erwartet den @Input-Parameter; dieser wurde nicht übergeben.'


Das ist doch stark, oder? Erst findet er ihn nicht, dann will er ihn haben!!!

Zu deinen Fragen: Ich benutze TSQLStoredProc und die Borland dbExpress-dll.


Ich hab in meiner Not mal ein neues Formular erstellt und das TSQLConnection-Object aus dem Designer (dbExpress) benutzt. Das geht gar nicht! Ich erhalte beim Connect folgende Fehlermeldung noch bevor das Login (LoginPrompt ist true!) erscheint:
Zugriffsverletzung bei Adresse 40C180DE in Modul 'dbexpress90.bpl'. Lesen von Adresse 00000000.

Details:
[40C180DE]{dbexpress90.bpl} SqlExpr.TSQLConnection.SQLError (Line 1730, "SqlExpr.pas" + 24) + $B
[40005F5B]{rtl90.bpl } System.@HandleAnyException (Line 9625, "system.pas" + 13) + $0
[7C913786]{ntdll.dll } RtlConvertUlongToLargeInteger + $41
[7C91EAF5]{ntdll.dll } KiUserExceptionDispatcher + $9
[40C1C12E]{dbexpress90.bpl} SqlExpr.TSQLConnection.Check (Line 2919, "SqlExpr.pas" + 1) + $B
[403BF2AD]{dbrtl90.bpl } DB.TCustomConnection.SetConnected (Line 2506, "DB.pas" + 8) + $4
[0033BA66]{designide90.bpl} DesignEditors.TEnumProperty.SetValue (Line 1332, "DesignEditors.pas" + 5) + $6
[00A3D630]{vclide90.bpl} IDEInspListBox.TInspListBox.SetPropValue (Line 1144, "ideinsplistbox.pas" + 40) + $24
[00A3EC00]{vclide90.bpl} IDEInspListBox.TInspListBox.ListAccept (Line 1635, "ideinsplistbox.pas" + 6) + $7
[00A36FC2]{vclide90.bpl} IDEListBtns.TListButton.CloseUp (Line 752, "IDEListBtns.pas" + 14) + $12
[0053CF02]{vcl90.bpl } Controls.TWinControl.WndProc (Line 6673, "Controls.pas" + 51) + $4
[4003EEC0]{rtl90.bpl } Classes.StdWndProc (Line 11456, "classes.pas" + 8) + $0
[77D18731]{user32.dll } GetDC + $6A
[77D18811]{user32.dll } GetDC + $14A
[77D189C8]{user32.dll } GetWindowLongW + $122
[77D18A0B]{user32.dll } DispatchMessageW + $A


Im gleichen Formular hab ich dann mal die dbGo-Objekte benutzt. Also TADOConnection und TADOStoredProc. Das geht ohne Probleme! Der Connect geht sofort und die Stored Procedures werden mir automatisch angezeigt. Ausführen klappt auch problemlos!

Bin ich zu doof, oder ist dbExpress Murks?

Hiiiiiilfeeeeeeeeee.............
Der weiß, daß er nichts weiß, wie alle anderen auch nichts wissen.
Nur weiß er, was die anderen und auch er selbst noch lernen müssen.
(Novalis 1772 - 1801)
  Mit Zitat antworten Zitat