Announcement

Collapse
No announcement yet.

Problem bei ExecSql

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

  • Problem bei ExecSql

    Hallo,

    bei folgender Anweisung erhalte ich ein Exception :

    If IBQryConnectLoc.Transaction.InTransaction then <br>
    IbQryConnectLoc.Transaction.Commit; <br>
    IbQryConnectLoc.Transaction.StartTransaction; <br>

    IBQryConnectLoc.ExecSQL; <br>
    IbQryConnectLoc.Transaction.Commit; <br>

    die lautet : invalid transaction handle (expecting excplizit transaction start)

    funktioniert ExecSql hier anders als open ? Die Transaktion wird doch explizit gestartet ? Was soll also diese Exception uns sagen?

    Gruss Frank

  • #2
    Hi,

    Was soll uns die Frage sagen ??

    Ohne den SQL-Code zu kennen, grenzt eine Antwort an Wahrsagerei !

    Gruß
    Gesin

    Comment


    • #3
      Hallo Gesine,

      mein Problem liegt imho nicht an de SQL-Anweisung, sondern in der Verwaltung von Transaktionen.

      dennoch hier die 'Vorgeschichte':

      IBQryConnect.Close;<br>
      IBQryConnect.SQL.clear;<br>
      IBQryConnect.SQL.add(' INSERT INTO connect');<br>
      IBQryConnect.SQL.add(' (Name, Empfänger, Meldetext, ID_Gruppe, Ausfuehrungsort, Verk, Freigabe )');<br>
      IBQryConnect.SQL.add(' VALUES');<br>
      try<br>
      result := false;<br>
      IBQryConnect.SQL.add('( :Name, :Empfaenger, :Meldetext, :IDGruppe,:Ausfuehrungsort, :Verk, :Freigabe)');<br>
      IBQryConnect.ParamByName('Name').asString := Name;<br>
      IBQryConnect.ParamByName('Empfaenger').asString := Empfaenger;<br>
      IBQryConnect.ParamByName('Meldetext').asString := EdMelde.text;<br>
      IBQryConnect.ParamByName('IDGruppe').asString := IDGruppe;<br>
      IBQryConnect.ParamByName('Ausfuehrungsort').asStri ng := Ort;<br>
      IBQryConnectLoc.ParamByName('Verk').AsString := Verknuepfung;<br>
      IbQryConnectLoc.ParamByName('Freigabe').AsString := 'AUS'; <br>

      soweit so gut, die hat unter BDE auch schon funktioniert.
      Jetzt die der SQL-String quasi gesetzt, und die Sache solle sauber ausgefuehrt werden.
      Dazu wollte ich eine Transaktion benuetzen.
      Und jetzt kommt der Code von oben :

      If IBQryConnectLoc.Transaction.InTransaction then <br>
      IbQryConnectLoc.Transaction.Commit; <br>
      IbQryConnectLoc.Transaction.StartTransaction; <br>
      IBQryConnectLoc.ExecSQL; <br>
      ---- und hier krachts ----

      Frage: gibts hier gar keine Moeglichkeit fuer ExecSql, die TRansaktionen zu dem Zeipunkt zu starten, wo mans haben will ?

      Oder ist es vielleicht auch gut, eine 'Lesetransaktion' und eine 'Editier-Transaktion' zu verwenden, also zwei Instanzen.
      Wobei ja eh immer nur eine Transaktion aktiv sein kann.

      Gruss
      Fran

      Comment


      • #4
        ne, ne , ne

        In dem Moment wo Du ParamByName verwendest geht schon ein Prepare zur DB, denn die analysiert dein SQL und nicht der Client. Somit wird da die Transaktion (automatisch) geöffnet.

        Daher also das Transaktionsgeraffel weiter nach oben und es sollte tun.

        Ein bißchen Code tut meistens gut ;-

        Comment

        Working...
        X