Registriert seit: 9. Jun 2003
390 Beiträge
Delphi 7 Professional
|
Kein PK zurück über Stored Procedure
17. Jun 2005, 12: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
|