Danke an alle,
mit den letzten Hinweisen bin ich fast am Ende angekommen:

Zitat von
dataspider:
SELECT TMP$USER_HOST FROM TMP$ATTACHMENTS WHERE TMP$USER = USER INTO :Computer_Name;
Dies liefert in der konkreten Situation tatsächlich mehr als einen Datensatz und führt deshalb zu dem Fehler (es hat also nichts mit den SP-Rückgabewerten oder dem Suspend zu tun, wie ich gedacht hatte).

Zitat von
dataspider:
TMP$ATTACHMENTS erzeugt für jede Verbindung einen Datensatz.
Wenn sich der gleiche User 2 mal verbindet, liefert dann dein Select evtll 2 Records?
Die Lösung kann nur darin liegen, auch Computer_Name als Input-Parameter zu übergeben.

Zitat von
dataspider:
Das Suspend kannst du bei der Fehlersuche vergessen. Da in Interbase auch Selected Procedures unterstützt werden, kannst du Suspend beliebig oft aufrufen. Es produziert keine Fehlermeldung. Der letzte zugewiesene Wert vor dem Suspend wird zurückgegeen.
Eben - deswegen bin ich wegen der Fehlermeldung und Hinweisen, die sich auf Suspend bezogen, durcheinander gekommen.

Zitat von
Elvis:
Hier ist mal ein möglichst minimalistischer Ansatz, der mit dem Firebird DataProvider laufen sollte.
Code:
public static void LogbuchStart(IDbConnection connection,
int datenNr,
int selectionNr,
out int neuId,
out bool neuerMonat) // und so weiter
Danke, so werde ich es machen. Bisher wollte ich mehrere Verfahren, die sich nur wenig unterscheiden, in einer Methode zusammenfassen und nur durch die Parameter unterscheiden; z.B.:
Code:
BdpCommand cmd = Connect.CreateCommand();
switch(Variante) {
case 1: cmd.CommandText = "Logbuch_Start"; cmd.Parameters.Add(...); break;
// usw. }
try {
Connect.Open();
cmd.ExecuteNonQuery();
// Parameter auswerten }
catch (
Exception ex) {
MessageBox.Show( "Fehler bei VS-Interna",
cmd.CommandText + Environment.NewLine + ex.Message, System.Drawing.SystemIcons.Error);
}
finally { Connect.Close(); }
Das wird bei unterschiedlichen Parametern schnell unübersichtlich; also sind getrennte Methoden - wie von Dir vorgeschlagen - praktischer.
Mit einer Methode, die ich nach Deinem Vorschlag angepasst habe, klappt es jetzt fast vollständig. Nur folgendes Problem bleibt noch: "Neuer_Monat" ist auch in der SP ein boolean-Parameter. Aber die Auswertung klappt nicht:
Code:
BdpParameter param = cmd.Parameters[5];
if (param.Value != null && param.Value != DBNull.Value)
b0 = (bool) param.Value; // -- hier knallt es
else b0 = false;
liefert die Fehlermeldung:
Zitat:
Die angegebene Umwandlung ist ungültig.
Der Debugger zeigt deutlich die Problemstelle. Ich finde aber in der
SDK-Doku keinen Weg, um param.Value zu einem bool-Parameter zu machen. Kann ich auch dazu noch einen Tipp bekommen?
Danke! Jürgen