Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FK in die DB speichern? (https://www.delphipraxis.net/180764-fk-die-db-speichern.html)

OrNEC 16. Jun 2014 13:30

Datenbank: SQLite • Version: 3 • Zugriff über: Lazarus SQLite3Connection

FK in die DB speichern?
 
Hallo,

ich habe folgende Frage: ich möchte in einer ComboBox Fahrzeughersteller auswählen oder falls der nicht vorhanden ist - neu mit der ComboBox anlegen. Nun wenn der Hersteller in der ComboBox aufgelistet ist, dann speichere ich einfach die ID des Herstellers als FK in die Haupttabelle. Was ist aber wenn es den Hersteller noch nicht gib? Ich schreibe den Name des Herstellers in die ComboBox und klicke auf OK. Woher bekomme ich die ID des neuen Herstellers, wenn der noch nicht angelegt ist? Etwa erst ma den Hersteller ablegen, dessen ID holen und danach damit den Rest der Daten speichern?

Danke für eure Tipps!

mkinzler 16. Jun 2014 13:58

AW: FK in die DB speichern?
 
Einfügen und letzte vergebene ID von Datenbank holen.
Dann Daten in die abhängige Tabelle speichern

p80286 16. Jun 2014 14:15

AW: FK in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1262459)
Etwa erst ma den Hersteller ablegen, dessen ID holen und danach damit den Rest der Daten speichern?

Wie sonst?
wenn es einen Datensatz nicht gibt, gibt's auch keine ID dazu!

Gruß
K-H

OrNEC 16. Jun 2014 14:18

AW: FK in die DB speichern?
 
Ok, danke!

Aviator 16. Jun 2014 22:23

AW: FK in die DB speichern?
 
SQLite verfügt über eine Funktion Last Insert RowID. Vielleicht hilft dir die weiter. Ich bin mir sogar ziemlich sicher das sie das tut. :wink:

himitsu 16. Jun 2014 23:06

AW: FK in die DB speichern?
 
Oder als SELECT
http://stackoverflow.com/questions/3...uery-in-sqlite



Aber eigentlich finde ich die DBMS praktischer, welche die RETURNING-Syntax beim INSERT anbieten. Da kann man dann auch problemlos mehrere Datensätze gleichzeitig anlegen
und sich dann von jedem neuen Datensatz bestimmte Werte zurückgeben lassen.

so ala
SQL-Code:
INSERT INTO distributors (dname) VALUES ('XYZ Widgets') RETURNING did;

Was Folgendem entspricht.
SQL-Code:
INSERT INTO distributors (dname) VALUES ('XYZ Widgets');
SELECT last_insert_rowid();
Aber eigentlich dem
SQL-Code:
INSERT INTO distributors ...;
SELECT did FROM distributors WHERE neue_Datensätze; -- IDs "aller" neuen Datensätze


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 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