![]() |
Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC
Insert - PRIMARY KEY automatisch anlegen
Hi,
angenommen ich habe 2 Tabellen mit jeweils folgenden Feldern: T_DATA: DATA_ID, USER_NO, USW_FELD, ... T_USER: USER_NO, USERNAME, STREET, ... Jetzt ist T_DATA.USER_NO der FOREIGN KEY auf T_USER.USER_NO. Importiere ich jetzt Daten für die Tabelle T_DATA so muss die USER_NO in der Tabelle T_USER ja schon vorhanden sein, ansonsten knallt es. Wie kann ich bei einem Import automatisch eine neue entsprechende USER_NO anlegen ? Oder muss ich per SQL zuerst eine Abfrage auf vorhanden sein der USER_NO ausführen, wenn nein einfügen & dann erst den Datensatz in T_DATA schreiben... Danke für die Hilfe... |
AW: Insert - PRIMARY KEY automatisch anlegen
Am Besten die Benutzertabelle zuerst anlegen. Oder den Index/Schlüssel temporär deaktivieren
|
AW: Insert - PRIMARY KEY automatisch anlegen
Für den Import besten eine "Stored Procedure" anlegen, der die Daten übergeben werden, die alle Bedingungen prüft und je nach Fall reagiert.
Ändert sich später etwas an der Tabellenstruktur muss nur diese angepasst werden und der Import funktioniert weiterhin. |
AW: Insert - PRIMARY KEY automatisch anlegen
Zitat:
Delphi-Quellcode:
. Gibt es den schon, dann übernimmst du die durch Locate ermittelte USER_NO. Wenn nicht, legst du den neuen User an und übernimmst danach die neu angelegte USER_NO. Bestimmt hast du USER_NO als Primary-Key eingestellt und dieser Spalte Auto-Inc-Trigger und -Generator verpaßt ...
IF Dataset_T_User.Locate('USERNAME',BenutzerName,[]) THEN ...
|
AW: Insert - PRIMARY KEY automatisch anlegen
USER_NO ist Primary-Key, stimmt, aber kein Auto-Inc. Die Nummer müssen nicht zwingend fortlaufen sein (obiges ist auch nur ein verkürztes Bsp).
Hatte evtl. gedacht das man es über einen Trigger lösen kann, also Daten einfügen & die evtl. Exception abfangen & hier dann die USER_NO anlegen... Werde es aufgrund der referentiellen Integrität also richtig machen (müssen): Abfragen ob USER_NO bereits vorhanden, wenn nein erst anlegen & dann erst den T_DATA DS einfügen... @Blup Mit "Stored Procedure" kenne ich mich noch nicht aus, evtl. später mal einlesen... @mkinzler Benutzertabelle erst anlegen. Daran habe ich auch gedacht, können allerdings bis zu 3k DS werden von denen 'wahrscheinlich' die meisten nicht genutzt werden. Habe das verworfen. |
AW: Insert - PRIMARY KEY automatisch anlegen
Zitat:
Da du sicher keine Redundanz in deiner DB wünschst und aus diesem Grund User und Data in zwei Tabellen unterbringst, kommst du um die Prüfung, ob ein User bereits eingetragen ist bzw. das Neuanlegen eines Users nicht herum. Und 3000 Datensätze sind ein Klacks und sogar via Delphi-Code schnell erledigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz