Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS-SQL Trigger? (https://www.delphipraxis.net/213-ms-sql-trigger.html)

Sharky 21. Jun 2002 08:35


MS-SQL Trigger?
 
Hai...

ich habe mal ne Frage die jetzt eigentlich nichts mit Delphi zu tun hat :?:

Wenn ich mit meinem Programm einen neuen Datensatz in eine Tabell einfüge und
der Datensatz vom Server eine ID bekommt kann ich diese ja nicht einfach wieder auslesen.
Nach
Code:
Query1.Insert;
Query1.Post;
Kann ich mit einem Query1.FielByName ('idfeld').AsInteger das Feld nicht auslesen.

Jetzt kann ich ja aber über einen Trigger die ID die vergeben wurde in eine andere Tabelle schreiben lassen. Aber wie komme ich an diese drann? Dafür müsste ich ja wieder ein eindeutiges Feld in der Tabelle haben.

Darum die Frage: Kann ich via Trigger den Computernamen der den Eintrag in einer Tabelle gemacht hat ermitteln?

Gast 21. Jun 2002 22:07

Hai Sharky, :lol:

ich werde mich gerne mit Deiner Frage beschäftigen...nun zuerst sehe ich kein Zusammenhang zwischen deinem Problem mit ID...(vielleicht finden wir hier eine Lösung :shock: ) und der überraschenden Frage am Ende:

(...)
Darum die Frage: Kann ich via Trigger den Computernamen der den Eintrag in einer Tabelle gemacht hat ermitteln?
(...)

Gruß

Paul Jr.

P.S.

Übrigens...ich würde gerne den Trigger (der Du benutzt) sehen... :idea:

Sharky 24. Jun 2002 07:38

Hai Paul Jr. :lol:

Zitat:

Zitat von Paul Jr.
...nun zuerst sehe ich kein Zusammenhang zwischen deinem Problem mit ID...

Das Problem ist doch folgendes. Wenn ich einem neuen Datensatz vom SQL-Server
eine ID geben lasse, kann ich diese nicht direckt nacht dem POST auslesen. (Zumindest geht es bei mir nicht).

Jetzt wollte ich durch einen Trigger die ID in eine TMP-Tabelle schreiben

Code:
CREATE TRIGGER [neu_adresse] ON [Adressen]
FOR INSERT
AS
INSERT INTO tmp_neue_adresse (adress_id,kundennummer) SELECT adress_id,kundennummer FROM inserted
In diesem Fall geht das ja auch ohne Probleme da ich durch die Kundennummer (die vom Programm vergeben wird) die ID in der Tabelle identifizieren kann.

Bei anderen Tabellen kann ich das leider nicht. Darum dachte ich mir das es am einfachsten wäre wenn im Trigger der Computername in eine TMP-Tabelle mit eingetragen wird.

z.B.:
Code:
CREATE TRIGGER [neue_ID] ON [Adressen]
FOR INSERT
AS
INSERT INTO tmp_neue_ID (adress_id,*****@@computername*****) SELECT adress_id inserted
***** Hier sollte der Computername des Rechners stehen von dem der Eintrag in die Tabeller gemacht wurde

Gast 24. Jun 2002 11:23

Hi Sharky, :D

Nun zuerst empfehle ich Dir Dein Trigger zu killen, also löschen. Stattdessen solltest Du folgende Deklaration verwenden um die ID automatisch zu bestücken:

z.B.:

Code:
CREATE TABLE [DBO].ADRESSEN
(
ID INTEGER IDENTITY PRIMARY KEY NOT NULL,
NAME VARCHAR(50) NULL,
VORNAME VARCHAR(50) NULL
)
GO
IDENTITTY (Eigenschaft)...- MsSQL Hilfe:
(...)
Erstellt eine Identitätsspalte in einer Tabelle. Diese Eigenschaft wird in den Transact-SQL-Anweisungen CREATE TABLE und ALTER TABLE verwendet.
(...)
So....

______________________________________

Jetzt zeige ich Dir wie Du anhand einer (stored) Prozedur Dein Problem beseitigen kannst:


[code:1:3a01902a88]
CREATE PROCEDURE INSERT_ADRESSEN (

Sharky 24. Jun 2002 11:44

Hai Paul Jr.

ersteinmal Danke für deine Mühe :D

ABER:

Code:
CREATE TABLE [DBO].ADRESSEN
(
ID INTEGER IDENTITY PRIMARY KEY NOT NULL,
NAME VARCHAR(50) NULL,
VORNAME VARCHAR(50) NULL
)
GO
Das brauch ich nicht. Die ID Felder in meinen Tabellen sind IDENTITY Felder (habe ich wohl nicht vernünftig geschrieben.

[code:1:2b2271943e]
CREATE PROCEDURE INSERT_ADRESSEN (

Gast 24. Jun 2002 12:16

Hallo Sharky, :D

(...)
ersteinmal Danke für deine Mühe
(...)

Hoppla... soviel Begeisterung habe ich von Dir nicht erwartet... :mrgreen:

(...)
Hmmmm.... Eigentlich nicht schlecht. NUR müsste ich jetzt alle Programmteile in denen
Datensätze angelegt werden neu schreiben. Und das wäre tötlich.
(...)

nicht unbedingt!!!, da...Du kannst Deine Query weiter mit Post betreiben...mit einziger Ausnahme für neue Datensätze...(Tödlich wird für Dich wenn Du bei Deinem bisherigen Konstrukt bleibst..., da zum einem lernst Du dabei nichts... und zum anderem...bringt das auch nichts...)

Du kannst in dem Ereignis BeforePost Deiner Query folgende Code schreiben... z.B.:

[code:1:f00d56ef26]
procedure TForm1.Query1BeforePost(DataSet: TDataSet);
BEGIN

Sharky 24. Jun 2002 12:44

Zitat:

Zitat von Paul Jr.
Hoppla... soviel Begeisterung habe ich von Dir nicht erwartet... :mrgreen:

Ich bin doch immer Begeistert. :lol:

Ich werde mir das ganze einmal ansehen.

Aber langsam kommt bei mir die Überlegung ob ich in den nächsten Projekten bzw. den
nächsten Tabellen meiner Datenbank die ID nich einfach durch Delphi erzeugen lassen.

Dann lasse ich mir einfach eine GUID erzeugen. Die ist eindeutig und ich habe sie auch
sofort zur Hand. Und ich bin absolut unabhängig vom verwendeten Server.

Was ist denn deine Meinung dazu?

Gast 24. Jun 2002 20:18

Hi Sharky 8)

ich habe dazu keine Meinung, da ich leider nicht weißt wovon Du sprichst. Erläutere das etwas...

In jedem Fall ich erzeuge meine Tabelle NUR per Scripts...

Gruß

Paul Jr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz