AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Insert - PRIMARY KEY automatisch anlegen
Thema durchsuchen
Ansicht
Themen-Optionen

Insert - PRIMARY KEY automatisch anlegen

Ein Thema von user0815 · begonnen am 22. Mai 2012 · letzter Beitrag vom 23. Mai 2012
Antwort Antwort
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

Insert - PRIMARY KEY automatisch anlegen

  Alt 22. Mai 2012, 10:29
Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC
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...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Insert - PRIMARY KEY automatisch anlegen

  Alt 22. Mai 2012, 11:45
Am Besten die Benutzertabelle zuerst anlegen. Oder den Index/Schlüssel temporär deaktivieren
Markus Kinzler
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.465 Beiträge
 
Delphi 12 Athens
 
#3

AW: Insert - PRIMARY KEY automatisch anlegen

  Alt 22. Mai 2012, 13:36
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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Insert - PRIMARY KEY automatisch anlegen

  Alt 22. Mai 2012, 19:47
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...
Natürlich mußt du zuerst abfragen, ob es deinen Benutzer schon gibt: IF Dataset_T_User.Locate('USERNAME',BenutzerName,[]) THEN ... . 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 ...
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Insert - PRIMARY KEY automatisch anlegen

  Alt 23. Mai 2012, 07:49
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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Insert - PRIMARY KEY automatisch anlegen

  Alt 23. Mai 2012, 10:48
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...
Beim Verwenden von Autoinc-Feldern geht es nicht in erster Linie darum, eine fortlaufende Nummerierung zu erzeugen, sondern sicherzustellen, daß ein derart erzeugter Index eindeutig ist, indem er nur einmal vergeben wird. Die fortlaufende Numerierung ist dabei sozusagen ein Nebeneffekt, der nur in sehr seltenen Fällen wirklich benötigt wird (ich hatte erst einen solchen Fall, da war die fortlaufende Numerierung gesetzlich vorgeschrieben).

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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:05 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