Einzelnen Beitrag anzeigen

Benutzerbild von HomerGER
HomerGER

Registriert seit: 8. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#1

Kein PK zurück über Stored Procedure

  Alt 17. Jun 2005, 11:28
Datenbank: MSDE • Zugriff über: ADO
Hallo
in meiner DB habe ich folgende Procedure
Delphi-Quellcode:
CREATE PROCEDURE Test
              @NAME NVarChar,
              @AKTIV BIT,
              @AUSGEBEN BIT,
              @USER_WAS NTexT,
              @USER_WER NVarChar,
              @USER_AM SmallDateTime,
              @IDENTITY INT OUT
              AS
              INSERT INTO GF_Config_Medien (NAME, AKTIV, AUSGEBEN,
                          USER_WAS, USER_WER, USER_AM)
              VALUES(@NAME,@AKTIV,@AUSGEBEN, @USER_WAS, @USER_WER, @USER_AM)
              SET @Identity = SCOPE_IDENTITY()
GO
in Delphi
Delphi-Quellcode:
....
  //Select
  //Select String
  select_s := 'SELECT * FROM GF_Config_Medien';

  //Daten aus der DB holen
  item_da := sqlDataAdapter.Create(select_s, connect_db);

  //Update
  //Update String
  update_s := 'UPDATE GF_Config_Medien ' +
              'SET NAME = @NAME, AKTIV = @AKTIV, AUSGEBEN = @AUSGEBEN, ' +
                  'USER_WAS = @USER_WAS, USER_WER = @USER_WER, USER_AM = @USER_AM ' +
              'WHERE ID = @ID';

  //Update Command
  upd_cmp := SqlCommand.Create(update_s, connect_db);
  upd_cmp.Parameters.Clear;
  upd_cmp.Parameters.Add('@NAME', SqlDbType.NVarChar, 100, 'NAME');
  upd_cmp.Parameters.Add('@AKTIV', SqlDbType.Bit, 1, 'AKTIV');
  upd_cmp.Parameters.Add('@AUSGEBEN', SqlDbType.Bit, 1, 'AUSGEBEN');
  upd_cmp.Parameters.Add('@USER_WAS', SqlDbType.NText, 16, 'USER_WAS');
  upd_cmp.Parameters.Add('@USER_WER', SqlDbType.NVarChar, 50, 'USER_WER');
  upd_cmp.Parameters.Add('@USER_AM', SqlDbType.SmallDateTime, 4, 'USER_AM');

  upd_par := upd_cmp.Parameters.Add('@ID', SqlDbType.Int);
  upd_par.SourceColumn := 'ID';
  upd_par.SourceVersion := DataRowVersion.Original;


  //Insert
  //Insert Command
  ins_cmp := SqlCommand.Create();
  ins_cmp.CommandText := 'Test';
  ins_cmp.CommandType := CommandType.StoredProcedure;
  ins_cmp.Connection := connect_db;
  ins_cmp.Parameters.Clear;
  ins_cmp.Parameters.Add('@NAME', SqlDbType.NVarChar, 100, 'NAME');
  ins_cmp.Parameters.Add('@AKTIV', SqlDbType.Bit, 1, 'AKTIV');
  ins_cmp.Parameters.Add('@AUSGEBEN', SqlDbType.Bit, 1, 'AUSGEBEN');
  ins_cmp.Parameters.Add('@USER_WAS', SqlDbType.NText, 16, 'USER_WAS');
  ins_cmp.Parameters.Add('@USER_WER', SqlDbType.NVarChar, 50, 'USER_WER');
  ins_cmp.Parameters.Add('@USER_AM', SqlDbType.SmallDateTime, 4, 'USER_AM');
  ins_cmp.Parameters.Add('@Identity', SqlDbType.int, 4, 'ID');

...

die Daten werden in ein Datagrid angezeigt

meine Update bzw Insert function

Delphi-Quellcode:
...
  item_bm.EndCurrentEdit;

  //Datenbank updaten
  try
    connect_db.Open;
    item_da.Update(dataset_ds, 'GF_Config_Medien');
    item_da.Update(item_dt);
  except
    on ex: Exception do
    begin
      MessageBox.Show(ex.Message, 'Fehler');
      connect_db.Close;
    end;
  end;
  connect_db.Close;
ändern funktioniert auch
auch das einfügen eines neuen Datensatzes

Aber im Datagrid steht, wenn ich ein neuen Datensatz einfüge
für den PK(ID) NULL
erst wenn ich die DB über Select neu lade
bekomme ich ein Wert zurück

meine Frage ist jetzt: wie bekomme ich nach dem Update bzw Insert mein PK(ID) zurück


Homer
  Mit Zitat antworten Zitat