Announcement

Collapse
No announcement yet.

Rückgabe von ADOCommand

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

  • Rückgabe von ADOCommand

    Hallo,

    ich lege mittel ADOCommand einen neuen Datensatz in einer MS-SQLServer2000-Datenbank an. Funktioniert auch ohne Schwierigkeiten. Die Tabelle enthält ein id-Feld (Autowert), nun benötige ich die id des angelegten Datensatzes. Meine Versuche, dies über eien ADODataset-Komponente zu tun schlugen fehl. Bei

    ADODataset1.Recordset:=ADOCommand1.Execute

    erhalte ich die Fehlermeldung, dass der Recordset nicht geöffnet ist.
    Was mache ich falsch? Hat jemand einen Tipp?

    Danke im Voraus

    Matthias

  • #2
    Ein Insert gibt Dir die Id nicht zurück. Du musst einen Select absetzen:<p>
    Select SCOPE_IDENTITY();<br>
    Select @@IDENTITY;<p>
    Mari
    Schöne Grüße, Mario

    Comment


    • #3
      neben dem, daß ich das ohnehin gewuß habe trifft die Antwort meine Frage nicht ganz so.

      wenn ich zB.
      Restore database GMC from Disk = ''D:\Test\GMC.bak' WITH REPLACE

      mache bekomme ich im Queryanalyser folgende Meldung:

      400 Seiten für die GMC-Datenbank, Datei 'gmc_Data' auf Datei 1 verarbeitet.
      1 Seiten für die GMC-Datenbank, Datei 'gmc_Log' auf Datei 1 verarbeitet.
      RESTORE DATABASE hat 401 Seiten in 3,718 Sekunden erfolgreich verarbeitet (0,881 MB/Sekunde).

      so und genau diesen Text möchte in ein TMemo übernehmen.

      Es gibt die unterschiedlichsten Rückmeldungen vom Queryanalyser in Textform, je nach dem was man gerade macht, und genau diese möchte ich übernehmen können.

      hat da jemand eine Idee wie das geht.

      Fred

      Comment


      • #4
        Hallo Matthias
        ich habe genau das gleiche Problem und die beiden Antworten zu dieser Frage helfen mir nicht weiter!
        Hat noch jemand ein Tip

        Comment


        • #5
          So gehts, ohne Fehler,
          aber bekomme ich so sicher den richtigen Wert?
          --
          adocommand1.commandtext:='INSERT INTO...
          adocommand1.execute;

          adocommand1.commandtext:= ' SELECT @@IDENTITY as ... ';
          adodataset1.Recordset:= adocommand1.execute;
          --
          Wenn das Select @@IDENTITY im ersten commandtext angefügt wird geht es nicht.

          im MS SQL Enterprise Manager funktioniert das Beispiel aus der Hilfe auch nicht als 'ein Aufruf':

          INSERT INTO jobs (job_desc,min_lvl,max_lvl)
          VALUES ('Accountant',12,125)
          SELECT @@IDENTITY AS 'Identity'

          zuerst
          INSERT INTO jobs (job_desc,min_lvl,max_lvl)
          VALUES ('Accountant',12,125)
          dann
          SELECT @@IDENTITY AS 'Identity'

          klappt

          Delphi 2005, MS-SQL Server

          Hat jemand einTip wo so etwas dokumentiert ist? oder suche ich nur an den falschen Stellen.

          Jör

          Comment


          • #6
            Hallo,

            mit dem Query Analyzer geht das bei mir sehr wohl...

            Wenn Du nicht sicher bist, ob Dein Eintrag wirklich der letzte in der Datenbank ist, dann solltest Du besser SELECT IDENT_CURRENT('tabelle') benutzen, da kannst Du den Tabellennamen angeben. Liefert den letzten generierten Identity-Wert für die Tabelle zurück

            Comment

            Working...
            X