Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: SProc misslungen: multiple rows in singleton select

  Alt 29. Jul 2006, 13:44
Danke, das hatte ich auch angenommen:
Zitat von dataspider:
Hi,

multiple rows in singleton select kommt vom Interbase Server und besagt,
dass du irgendwo einen Select hast, der nur einen Wert liefern darf, aber mehrere Records liefert.

Wenn 2 Datensätze im Feld den Wert habe, weiss die DB nicht, welche ID sie dir nun senden soll.
Somit würde ich in der Procedure schauen...

Frank
Ich habe die Stored Procedure in meiner Anfrage bereits angegeben:

Es gibt eine einzige Anweisung, die neu_ID etwas zuweist.
Es gibt zwei Anweisungen, die Neuer_Monat etwas zuweist.
Es gibt erst danach eine einzige SUSPEND-Anweisung.

Wieso soll Interbase glauben, dass multiple rows zurückgeliefert werden?

1. Ersatzversuch:
SELECT * FROM Logbuch_Start (0, 0, 0) aufgerufen durch C# (ursprünglich cmdUpdate, jetzt cmdSelect):
Code:
sCommand = "SELECT * FROM Logbuch_Start";
cmdSelect.Parameters.Clear();
cmdSelect.Parameters.Add(new BdpParameter("Daten_Nr",      BdpType.Int32, 0));
cmdSelect.Parameters.Add(new BdpParameter("Selektion_Nr", BdpType.Int32, 0));
cmdSelect.Parameters.Add(new BdpParameter("Formular_Nr", BdpType.Int32, 0));
...
cmdSelect.CommandText = sCommand;
tblResults.Rows.Clear();
Connect.Open();
Adapter.Fill(ds, tblResults.TableName);
Dies liefert die Interbase-Fehlermeldung:
Zitat:
parameter mismatch for procedure LOGBUCH_START
2. Ersatzversuch:
Aufruf durch C#:
Code:
sCommand = "SELECT * FROM Logbuch_Start(0,0,0)";
cmdSelect.Parameters.Clear();
//  keine Parameter ausdrücklich eingetragen
//  Aufruf wie beim 1. Ersatzversuch
Dies liefert keine Fehlermeldung, aber die Procedure wird nicht ausgeführt, und es gibt die Rückgabewerte (null, true) statt (3, true); der Parameter neu_ID kann - siehe SQL-Quelltext - niemals als null zurückgegeben werden.

Also Problem: Wie kann ich mit BdpProvider eine Stored Procedure aufrufen, die Parameter will und Werte zurückgibt? Wie kann ich die Rückgabewerte auslesen? (Der Weg über tblResults und Adapter ist nur eine schnelle Ersatzlösung, aber nicht wirklich sinnvoll.)

Hilfe! Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat