AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

MS-SQL Trigger?

Ein Thema von Sharky · begonnen am 21. Jun 2002 · letzter Beitrag vom 24. Jun 2002
Antwort Antwort
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.248 Beiträge
 
Delphi 2006 Professional
 
#1

MS-SQL Trigger?

  Alt 21. Jun 2002, 08:35
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?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#2
  Alt 21. Jun 2002, 22:07
Hai Sharky,

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 ) 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...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.248 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 24. Jun 2002, 07:38
Hai Paul Jr.

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
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#4
  Alt 24. Jun 2002, 11:23
Hi Sharky,

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 (
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.248 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 24. Jun 2002, 11:44
Hai Paul Jr.

ersteinmal Danke für deine Mühe

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 (
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#6
  Alt 24. Jun 2002, 12:16
Hallo Sharky,

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

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

(...)
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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.248 Beiträge
 
Delphi 2006 Professional
 
#7
  Alt 24. Jun 2002, 12:44
Zitat von Paul Jr.:
Hoppla... soviel Begeisterung habe ich von Dir nicht erwartet...
Ich bin doch immer Begeistert.

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?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#8
  Alt 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.
  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 09:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf