Announcement

Collapse
No announcement yet.

Manuelle ID-Erzeugung bei einer IB-DB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Manuelle ID-Erzeugung bei einer IB-DB

    Hallo,

    in einer Anwendung muß ich den ID (Primärindex) manuell erzeugen.<br>In diesem Forum wurde ich schon auf den richtigen Weg (Stored Procedure)<br>gewiesen. Leider hapert es bei mir etwas mit der Umsetzung.<br>Also die entsprechende Stored Procedure sieht bei mir so aus:<p><br>
    CREATE PROCEDURE PROCEDURE_CHARGE_NEWID RETURNS (<br>
    MY_ID INTEGER<br>
    ) AS BEGIN<br>
    MY_ID = GEN_ID(GEN_CHARGE_1,1);<br>
    END<br><p>
    Diese Procedure wird beim Ereignis 'OnNewRecord' der entsprechenden TQuery ausgeführt:<br>
    // den nächsten ID ermitteln ...<br>
    StoredProcIdQuery1->Open();<br><br>
    Hier wird jetzt die Ausführung mit folgender Fehlermeldung abgebrochen:<br>
    'Fehler beim Erstellen des Cursor-Handle'<br><br>
    ### nicht mehr ausgeführt:<br>
    dID = StoredProcIdQuery1->ParamByName("MY_ID")->AsInteger;<br>
    ...<br><br>
    Hab' ich da eine Kleinigkeit übersehen? Benutze BCBPro3.<p><br>
    Vielen Dank schon mal, Ralf

  • #2
    Hallo Ralf,

    ich verwende immer die Komponente StoredProc und gabe damit keine Probleme.

    Tschüß

    Torste

    Comment


    • #3
      Hallo Torsten<p>
      danke für Deine Anwort, aber diese Komponete verwende ich ja auch. Kleines Codefragment...<p>
      // Procedure ausführen<br>
      StoredProcIdQuery1->Open();<br>
      // Ergebnis (ID) lesen<br>
      dID = StoredProcIdQuery1->ParamByName("MY_ID")->AsInteger;<p>
      Bei Open(), also dem Ausführen, bekomme ich die Fehlermeldung.<p>
      Grüße, Ral

      Comment


      • #4
        Hallo,

        eine StoredProcedure, die keine Ergebnismenge zurückliefert, sondern nur einen einzigen Rückgabewert, muss über die <b>TStoredProc.ExecProc</b>-Methode aufgerufen werden. Eine Instanz, die über <b>Open</b> aktiviert wird, erwartet immer eine Ergebnismenge, so dass die Fehlermeldung "Fehler beim Erstellen des Cursor-Handle" auch völlig plausible ist.

        In Delphi sieht das zum Beisiel so aus:
        <pre>
        { Es wird ein neuer Projekt-Datensatz in der Haupttabelle
        ProMain angelegt. Dazu ermittelt das Programm über eine
        Stored Procedure den nächsten Generator-Wert aus der
        InterBase-Datenbank. Außerdem werden alle Pflichtfelder
        vorbelegt. }

        procedure TDM.TableProMainNewRecord(DataSet: TDataSet);
        begin
        with SP_ProNr do
        begin
        ExecProc;
        TableProMainPRONR.Value := Params[0].Value;
        TableProMainDVERSION.Value := 4;
        TableProMainPRODATUM.Value := Now;
        TableProMainABSCHLUSS.Value := 'N';
        end;
        end;
        </pre>
        &#10

        Comment


        • #5
          Hallo Andreas<p>
          tausend Dank, ein ...<p>
          void __fastcall TFormChargeNew::Query1NewRecord(TDataSet *DataSet) {<br>
          StoredProcIdQuery1->ExecProc();<br>
          dID = StoredProcIdQuery1->ParamByName("MY_ID")->AsInteger;<br>
          }<p>
          liefert jetzt die gewünschte ID.<p>
          Grüße, Ral

          Comment

          Working...
          X