Excel VBA Insert-Befehl auf Datenbank mit Rückgabe der ID des neuen Datensatzes
Wer kann helfen.
Hallo zusammen,
folgendes müsste ich noch realisieren.
Ich habe eine Excelsheet, in dem ich Daten aus einer Datenbank lese.
Wegen mehrfachzugriff.
Nun speichere ich mir die ID des Datensatzes beim Auslesen in die erste Spalte.
Ich bin soweit, auch einen neuen Datensatz in die Datenbank zu erstellen.
Jetzt würde ich aber gerne im nächsten Schritt auch gleich die neue erstellte ID auszulesen.
Weil ich per VBA bei jeder Zelländerung eine Speicherung erzeuge und vor Update die erste Zelle der Spalte (steht ja die ID)
auslese und auf dieser ein Update mache.
Welche Möglichkeiten gibt es, dies zu realisieren.
Vielleicht kann mir einer weiterhelfen.
MfG
KgFmB
Hallo zusammen,
folgendes müsste ich noch realisieren.
Ich habe eine Excelsheet, in dem ich Daten aus einer Datenbank lese.
Wegen mehrfachzugriff.
Nun speichere ich mir die ID des Datensatzes beim Auslesen in die erste Spalte.
Ich bin soweit, auch einen neuen Datensatz in die Datenbank zu erstellen.
Jetzt würde ich aber gerne im nächsten Schritt auch gleich die neue erstellte ID auszulesen.
Weil ich per VBA bei jeder Zelländerung eine Speicherung erzeuge und vor Update die erste Zelle der Spalte (steht ja die ID)
auslese und auf dieser ein Update mache.
Welche Möglichkeiten gibt es, dies zu realisieren.
Vielleicht kann mir einer weiterhelfen.
MfG
KgFmB
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101527
Url: https://administrator.de/contentid/101527
Ausgedruckt am: 26.11.2024 um 01:11 Uhr
6 Kommentare
Neuester Kommentar
Also
insert into <tablename>(ID,Key2) Values(null,'was weiß ich')
so in der art sieht deine insert anweisung aus, wobei key2 der weitere primary key ist...
die ID bekommst du dann mit
SELECT ID FROM <tablename> WHERE Key2='was weiß ich'
und dann ist es wurscht, welcher benutzer inzwischen datensätze angelegt hat...
mike
insert into <tablename>(ID,Key2) Values(null,'was weiß ich')
so in der art sieht deine insert anweisung aus, wobei key2 der weitere primary key ist...
die ID bekommst du dann mit
SELECT ID FROM <tablename> WHERE Key2='was weiß ich'
und dann ist es wurscht, welcher benutzer inzwischen datensätze angelegt hat...
mike
Moin KgmB,
ich finde das zu kompliziert und die Vorstellung von zwei redundanten PrimaryKeys in einer Tabelle schlichtweg gruselig.
Es gibt doch in der Datenbank (Access? mySQL? Oracle? DB2?) offensichtlich ein Feld "ID" mit einer automatisch erzeugten eindeutigen Nummer (AutoWert oder AutoIncrement oder Sequence oder Identity oder wie es die Datenbank nennen mag.)
Und "normalerweise" oder zumindest wählbar kann dieser autmatisch generierte Wert doch aufsteigend festgelegt werden.
Wenn du also in der Datentabelle noch ein Feld "Username" anfügst mit dem Defaultwert des Usernamens (sei es des Datenbankusers oder des unter Windows angemeldeten Users =%username%), dann bekommst Du doch immer den jüngsten von diesem Benutzer angelegten Satz mit einer Abfrage:
"gib mit die höchste ID mit dem Usernamen des angemeldeten Users, oder auf SQLisch:
[wenn es denn über VBA-Krams und den %username% der Windows-Umgebung sein soll.]
Oder bei "richtigen Datenbanken halt über das special register USERID, also den Datenbank-User.]
[Edit] Ergänzung:
Den ganzen neu(est)en Datensatz würdest Du z.B. so erhalten:
[/Edit]
Grüße
Biber
ich finde das zu kompliziert und die Vorstellung von zwei redundanten PrimaryKeys in einer Tabelle schlichtweg gruselig.
Es gibt doch in der Datenbank (Access? mySQL? Oracle? DB2?) offensichtlich ein Feld "ID" mit einer automatisch erzeugten eindeutigen Nummer (AutoWert oder AutoIncrement oder Sequence oder Identity oder wie es die Datenbank nennen mag.)
Und "normalerweise" oder zumindest wählbar kann dieser autmatisch generierte Wert doch aufsteigend festgelegt werden.
Wenn du also in der Datentabelle noch ein Feld "Username" anfügst mit dem Defaultwert des Usernamens (sei es des Datenbankusers oder des unter Windows angemeldeten Users =%username%), dann bekommst Du doch immer den jüngsten von diesem Benutzer angelegten Satz mit einer Abfrage:
"gib mit die höchste ID mit dem Usernamen des angemeldeten Users, oder auf SQLisch:
SELECT Max(ID) as UsersNeuesteID from TableX
Where username=Environ('Username')
Oder bei "richtigen Datenbanken halt über das special register USERID, also den Datenbank-User.]
[Edit] Ergänzung:
Den ganzen neu(est)en Datensatz würdest Du z.B. so erhalten:
Select a.* FROM TableX a,
(SELECT max(id) as maxID FROM TableX
WHERE username = Environ('USERNAME')) x
WHERE a.id=x.maxID;
Grüße
Biber