![]() |
Datenbank: MSDE • Zugriff über: ADO
Kein PK zurück über Stored Procedure
Hallo
in meiner DB habe ich folgende Procedure
Delphi-Quellcode:
in Delphi
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
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:
ändern funktioniert auch
...
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; 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 |
Re: Kein PK zurück über Stored Procedure
Hallo Homer,
Zitat:
Grüße vom marabu |
Re: Kein PK zurück über Stored Procedure
Refresh?
Was soll ich refreshen? Ich schreibe über die Update Function meine Daten zurück in die DB ich wollte über die Stored Procedure mein neuen Key ID wiederbekommen. ein Refresh bei ADO.net, du meinst sicher dann wieder ein Select ausführen. Nur warum soll ich alle daten wieder laden, ich brauche nur den Key. Die Stored Procdure liegt auf der Datenbank. Homer |
Re: Kein PK zurück über Stored Procedure
Hallo
habe mein Fehler gefunden in der Parameter liste habe ich vergessen den ID als Output zu setzen und die Spalte nicht angeben
Delphi-Quellcode:
und es muss so sein
..
ins_cmp.Parameters.Add('@Identity', SqlDbType.int, 4, 'ID'); ..
Delphi-Quellcode:
jetzt bekomme ich über die SP beim Update den PK zurück :-D
..
ins_par := ins_cmp.Parameters.Add('@Identity', SqlDbType.Int, 4, 'ID'); ins_par.Direction := System.Data.ParameterDirection.Output; ins_par.SourceColumn := 'ID'; ins_par.SourceVersion := DataRowVersion.Original; .. Nur wenn ADO.net weiß wohin er den Wert schreiben soll, bekomme ich auch den PK Wert in mein Datset Thx Homer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz