AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism Kein PK zurück über Stored Procedure

Kein PK zurück über Stored Procedure

Ein Thema von HomerGER · begonnen am 17. Jun 2005 · letzter Beitrag vom 19. Jun 2005
Antwort Antwort
Benutzerbild von HomerGER
HomerGER

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

Kein PK zurück über Stored Procedure

  Alt 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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Kein PK zurück über Stored Procedure

  Alt 17. Jun 2005, 18:40
Hallo Homer,

Zitat von HomerGER:
ä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.
nach deiner Beschreibung zu urteilen ist eigentlich alles in Ordnung. Klar, dass der zurückgegebene ID (der wird doch zurückgegeben - oder?) nicht sofort in deinem DBGrid auftaucht. Wie sollte er denn dort hin gekommen sein? Ein Refresh der zugrunde liegenden Datenmenge muss es schon sein. Kannst ja mit dem ID dann wieder an die richtige Stelle positionieren.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von HomerGER
HomerGER

Registriert seit: 9. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#3

Re: Kein PK zurück über Stored Procedure

  Alt 19. Jun 2005, 14:53
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
  Mit Zitat antworten Zitat
Benutzerbild von HomerGER
HomerGER

Registriert seit: 9. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#4

Re: Kein PK zurück über Stored Procedure

  Alt 19. Jun 2005, 15:54
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:
..
ins_cmp.Parameters.Add('@Identity', SqlDbType.int, 4, 'ID');
..
und es muss so sein

Delphi-Quellcode:
..
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;
..
jetzt bekomme ich über die SP beim Update den PK zurück

Nur wenn ADO.net weiß wohin er den Wert schreiben soll, bekomme ich auch den PK Wert in mein Datset

Thx Homer
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf