Announcement

Collapse
No announcement yet.

ADO und Identity

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

  • ADO und Identity

    Hi,

    ich nutze ADO mit dem MS SQL-Server und Delphi6 und habe folgendes Problem.

    Eine Tabelle hat als Primary-Key eine Spalte vom Typ integer die als Identity markiert ist. Füge ich unter Delphi Datensätze in diese Tabelle ein, so funktioniert das problemlos (ich nutzte die TBetterADODataset-Komponente). Wenn ich jedoch in einem AfterInsert-Trigger den Vorgang in einer zweiten Tabelle mit einer Identity-Spalte protokolliere, so liefert ADO nach dem Einfügen nicht den neuen Identity-Wert der Ursprungstabelle zurück, sondern den der Protokoll-Tabelle. Scheint, als würde ADO nach dem Einfügen nur den globalen @@IDENTITY-Wert auslesen anstatt den letzten IDENTITY-Wert er Ursprungstabelle über IDENT_CURRENT('Tabellenname') auszulesen. Als Resultat hat ADO ein problem mit der Repositionierung !?

    Weiß eventuell jemand eine Abhilfe ? Auf die Identity-Funktionalität verzichten zu müssen ist ein erhebliches Handycap. Und für jede Tabelle eine INSERT-StoredProcedure zu schreiben ist ein wenig aufwendig ...

    Tobias

  • #2
    Hallo,

    >..Und für jede Tabelle eine INSERT-StoredProcedure zu schreiben ist ein wenig aufwendig ...

    dies gilt nur dann, wenn man das von Hand macht :-)

    Falls <i>Visual Studio .NET</i> zur Verfügung steht, baut dort der Wizard für den SqlDataAdapter die SPs auf Wunsch selbst zusammen. Wenn VS.NET nicht verfügbar ist, aber das .NET Framework installiert wurde, steht das kostenfreie Tool <b>SQL Server Centric .NET Code Generator</b> (Projektname <b>OlyMars</b>) zur Verfügung (siehe <i>http://www.microsoft.com/france/msdn/technologies/outils/olymars/default.asp</i>). Auch mit OlyMars kann man die SPs generieren lassen, so dass der Tippaufwand bei vielen Parametern vermieden wird.

    P.S: Der @@IDENTITY-Weg funktioniert im Gegensatz zu IDENT_CURRENT auch mit dem MS SQL Server 7

    Comment


    • #3
      Hi,

      .Net ist hat in dieser Firma noch keinen Einzug gehalten. Allerdings würde ich die Problematik an sich gerne näher verstehen. Besteht die Philosophie von ADO und MS-SQLServer grundsätzlich in der Verwendung von SPs die dann den richtigen IDENTITY-Wert beim Einfügen von Datensätzen zurückgeben können ? Sollte ich ADO anders einsetzen ? Oder muß ADO in diesem Punkt nachgebessert werden ..

      Comment


      • #4
        Hallo,

        &gt;..Oder muß ADO in diesem Punkt nachgebessert werden ...

        ADO ist tot, es lebe ADO.NET ;-)<br>
        (daher glaube ich nicht, dass ADO sein Verhalten an dieser Stelle noch ändern wird)

        &gt;Sollte ich ADO anders einsetzen ?

        Das Recordset-Objekt von ADO stellt an dieser Stelle im Gegensatz zu ADO.NET keine Eingriffsmöglichkeit zur Verfügung. Wenn man somit eine "bequeme" editierbare Datenmenge haben möchte, muss man die Einschränkungen für TRIGGER in Kauf nehmen. Wenn man alles in eigener Regie erledigt, gibt es keine Einschränkungen

        Comment

        Working...
        X