Announcement

Collapse
No announcement yet.

Autoinkfelder

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

  • Autoinkfelder

    Ich arbeite mit Delphi5 ADO u. MSSQL 7
    Wie kann ich mit SQL einen Datensatz anlegen und gleichzeitig den Wert eines Feldes auslesen, welches auf IDENTITÄT steht.
    Also ein Feld im Datensatz ist ein Autoinkfeld, nun wird ein Datensatz mit INSERT INTO angelegt. Dabei interessiert mich der Wert des Autoinkfeldes, den ich nun auslesen möchte.
    Bitte um Hilfe!

    Helmut

  • #2
    SELECT @@Identity liefert das gewünschte

    Comment


    • #3
      Hallo,

      falls die Antwort von Bernhard zu knapp ausgefallen ist, habe ich ein ausführlicheres Beispiel "am Lager":

      Wenn der neue Datensatz über eine INSERT INTO-Anweisung eingefügt wird, muss die IDENTITY-Spalte nicht mit übergeben werden. Benötigt man allerdings den automatisch vom SQL Server 7 zugewiesenen Wert, so ist eine zweite Abfrage nach dem Wert in @@IDENTITY notwendig. Eleganter ist jedoch eine Stored Procedure, in der die INSERT INTO-Anweisung sowie die @@IDENTITY-Abfrage gekapselt wird. In diesem Fall muss das eigene Programm nur einmal die Stored Procedure aufrufen und erhält gleichzeitig das gesuchte zurück. Das folgende Beispiel demonstriert jedoch den Weg über eine zweite TADOQuery-Abfrage:
      <pre>
      unit GetAutoIncFrm;

      interface

      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ADODB, Grids, DBGrids, Db, ComCtrls;

      type
      TForm1 = class(TForm)
      StatusBar1: TStatusBar;
      ADOConnection1: TADOConnection;
      ADOTable1: TADOTable;
      DataSource1: TDataSource;
      DBGrid1: TDBGrid;
      ADOQueryINSERT: TADOQuery;
      Button1: TButton;
      ADOQueryIdentity: TADOQuery;
      ADOQueryIdentityID: TIntegerField;
      procedure Button1Click(Sender: TObject);
      private
      { Private-Deklarationen }
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;

      implementation

      {$R *.DFM}

      { Tabelle:
      CREATE TABLE AutoIncTest (
      ID INTEGER IDENTITY(1,1) NOT NULL,
      Info VARCHAR(20),
      Datum DATETIME )

      ADOQueryINSERT :
      INSERT INTO AutoIncTest (Info, Datum) VALUES (:sInfo,:dtDatum)

      ADOQueryIdentity:
      SELECT CONVERt(INTEGER, @@IDENTITY) ID
      }

      procedure TForm1.Button1Click(Sender: TObject);
      var
      iNewID : Integer;
      begin
      with ADOQueryINSERT do
      begin
      Parameters[0].Value := 'Testeintrag';
      Parameters[1].Value := Now;
      ExecSQL;
      end;
      with ADOQueryIdentity do
      begin
      Open;
      iNewID := ADOQueryIdentityID.Value;
      Close;
      end;
      ShowMessage(Format('Neuer Identity-Wert ist: %d', [iNewID]));
      // zur Demonstration in TADOTable anzeigen
      ADOTable1.Close;
      ADOTable1.Open;
      end;

      end.
      </pre>
      &#10

      Comment


      • #4
        Hallo <br>
        ich probiere gleich mal aus <br>

        vielen Dank <br>
        Helmu

        Comment

        Working...
        X