Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten einfügen, bei zwei Tabellen (https://www.delphipraxis.net/23650-daten-einfuegen-bei-zwei-tabellen.html)

abi 7. Jun 2004 12:17


Daten einfügen, bei zwei Tabellen
 
Hallo :hi:
da ich noch ziemlich neu bin, hab ich keine Ahnung. Des halb hoffe ich das ihr mir helfen könnt.

Ich habe zwei Tabellen.
Die 1.
Nummer (Primary key)
Name (String)
Ort (Integer)

Die 2
Nummer (Primary Key)
OrtNr (Integer)
Ort (String)

Wenn ich jetzt einen neue Daten einfügen will, geht das ja wunderbar. Aber leider muss ich wenn ich einen neuen Ort habe immer die Nummer dazu eingeben.

Kann man des so machen, das er falls der Ort schon vorhanden ist, diesen Übernimmt und wenn nicht denn neuen Ort einfach einfügt.

Mache ich des am besten mit Table oder Query Komponente.

abi

shmia 7. Jun 2004 12:53

Re: Daten einfügen, bei zwei Tabellen
 
Zitat:

Zitat von abi
Ich habe zwei Tabellen.
Die 1.
Nummer (Primary key)
Name (String)
Ort (Integer)

Die 2
Nummer (Primary Key)
OrtNr (Integer)
Ort (String)

Wenn ich jetzt einen neue Daten einfügen will, geht das ja wunderbar. Aber leider muss ich wenn ich einen neuen Ort habe immer die Nummer dazu eingeben.

Kann man des so machen, das er falls der Ort schon vorhanden ist, diesen Übernimmt und wenn nicht denn neuen Ort einfach einfügt.

Ich denke nicht, dass es sinnvoll ist, die Normalisierung von Datenbank so weit zu treiben,
den Ort getrennt vom Rest zu speichern.
Aber trotzdem hier mal die Vorgehensweise. Nimm eine Query mit folgender SQL-Anweisung
SQL-Code:
SELECT * FROM Tabelle2 WHERE Ort=:Ort
Delphi-Quellcode:
QryOrte.Close;
QryOrte.Params.ParamByName['Ort'] := aktuellerOrt;
QryOrte.Open;
if QryOrte.IsEmpty then
begin
   // aktueller Ort nicht gefunden, also einfügen
   QryOrte.Append;
   QryOrte['OrtNr'] := ...
   QryOrte['ort'] := aktuellerOrt;
   QryOrte.Post;
end
else
   // Ort gefunden, also Feld OrtNr auslesen
   aktuelleOrtNr := QryOrte['OrtNr'];

Jelly 7. Jun 2004 13:11

Re: Daten einfügen, bei zwei Tabellen
 
Zitat:

Zitat von "shmia[code=delphi
if QryOrte.IsEmpty then
begin
// aktueller Ort nicht gefunden, also einfügen
QryOrte.Append;
QryOrte['OrtNr'] := ...
QryOrte['ort'] := aktuellerOrt;
QryOrte.Post;
end[/code]

Der Ansatz stimmt sicherlich, nur muss man sich noch überlegen was man für ... einsetzt. Arbeitet man mit AutoInc Felder für den Primärschküssel, ist es sehr DBS abhängig, wie man die den neu eingefügten Wert auslesen kann. Denn den Wert von OrtNr brauchst du auf jeden Fall, da ja die 2. Tabelle mit dem Fremdschlüssel auf diese Nr referenziert.

Gruß,
Tom

abi 7. Jun 2004 13:24

Re: Daten einfügen, bei zwei Tabellen
 
Hallo shmia
warum denkst :gruebel: du das die nicht sinnvoll ist, hab mir gedacht. Wenn man denn Wert meistens hat ist es doch einfacher schon einen vorhanden zunehmen und nicht noch mal in die andere Tabelle zugehen um diesen dort einzufügen.

Denn Code probiere ich gleich mal aus, schon mal danke.

abi

Kasoft 7. Jun 2004 14:46

Re: Daten einfügen, bei zwei Tabellen
 
Hallo Abi,

Soweit ich Shmia verstanden habe meint er das du Ortsdaten und die Personendaten in eine
Tabelle schreiben kannst. Das kann richtig sein aber für manche Fälle ist es Sinnvoll
auch den Ort in eine Tabelle zu setzen.

Sag uns doch einfach mal wie es so ca aussehen soll bei dir. Ist es nötig 2 Tabellen zu
machen?

und noch einen Vorschlag meinerseits:

Die Tabelle wo die Ortsdaten drin sind einfach OrtNr rausmachen. Dein Primary Key
reicht völlig aus um eine Master/ Detail Beziehung herzustellen.
Abhängig von den Komponenten die verwendest kannst du beide Tabellen verknüpfen.
Dazu würd ich dir das Einsteiger Datenbanktutorial von Delphi-source.de empfehlen.

MfG
Kasoft

shmia 7. Jun 2004 14:59

Re: Daten einfügen, bei zwei Tabellen
 
Zitat:

Zitat von abi
Hallo shmia
warum denkst :gruebel: du das die nicht sinnvoll ist, hab mir gedacht.

Wenn nur deutsche Adressen verarbeitet werden, könnte eine Hilfstabelle mit allen Postleitzahlen
und Ortsnamen von Deutschland mehr bringen.
Das PLZ-Feld und das Ortsfeld werden dann als Lookup-Combobox ausgeführt. Wenn der Benutzer die
Combobox aufmacht kann er eine PLZ auswählen und bekommt den Ort gleich eingetragen.
Dennoch darf er den Ortnamen von Hand abändern (z.B. um einen Ortsteil anzufügen).
Bei Bedarf kann ich hier eine Access-Datenbank mit allen 41113 deutschen PLZ&Orten posten. (gezipped ~ 1MB)

abi 7. Jun 2004 15:28

Re: Daten einfügen, bei zwei Tabellen
 
Hallo
des hab ich auch so verstanden. :thuimb:

Ich soll eine Datenbank machen für Drehgeber, hab des jetzt nur als Beispiel genommen. Da diese Datenbank sehr klein ist und ich sie noch überschauen kann. :mrgreen:

In meiner Datenbank gibt es 22 Positionen.
Habe dabei mir vier weitere Tabellen gemacht.

Meine Haupttable sieht so aus.

GeberDatenbank:
Bezeichung
Device Name
HW-Version
SW-Version
Auflösung
Preset Wert
usw.

für HW-Version
und SW-Version habe ich eine extra Tabelle gemacht.

Ist des jetzt Sinnvoll oder nicht :gruebel: . Hab des bisher so verstanden :cyclops: wenn man eine Datenbank hat die 200 Elemente hat und bei ein Feld wie z.B. HW-Version das im Grunde nur 5 bis 10 Elemente braucht ist es besser wenn man diese auslagert. Denn ganau dies ist hier der Fall.

Hab des jetzt die ganze Zeit mit Tables :angle2: gemacht. Damit komme ich auch schon klar. Denke ich jedenfalls. :coder:

Wenn ich jetzt neue Daten eintragen will. Dann habe ich für meine weiteren Tabellen eine ComboBox.
Somit kann man diese Felder schneller auswählen. Aber wenn jetzt in der ComboBox nicht das drin ist was man braucht. Dann muss man dies erst extra in dieser Table ändern, dann ist es in der ComboBox verfügbar.

Soweit bin ich jetzt.

Jetzt habe ich mir gedacht vielleicht ist es nicht schlecht. :idea: Wenn man alle Werte eintippen kann ohne sie auszuwählen, nicht das man immer nur von Table zu Table :( springen muss. Wenn man dies aber macht kann es ja sein das man ein Wert doppelt bekommt. Dies wollte ich vermeiden in dem ich prüfe ob dieser schon vorhanden ist.

Da ich nur Datenbank als anwender kenne, kann ich leider nicht sagen was besser ist. Deshalb würde ich gerne beide Version ausprobieren. Vielleicht kann man auch beide Kombinieren.

Hab gerade auch gemerkt das ich Ortnr nicht brauch.

Wie ich dies genau mache weiss ich leider noch nicht.

Tutor werde ich mir durch lesen.

Danke

abi

abi 7. Jun 2004 15:34

Re: Daten einfügen, bei zwei Tabellen
 
Hallo shmia
danke schon mal für das angebot. Hab gedacht damit verstehe ich es besser als mit meiner Datenbank.

Die ist mir igendwie zu groß.

Hoffe das meine letzter Beitrag mehr licht in die Sache gebracht hat.

Was würde ich ohne euch nur machen.

abi

Kasoft 7. Jun 2004 15:36

Re: Daten einfügen, bei zwei Tabellen
 
Hallo Abi,

Hier hast du nochmal nen Link zu dem Tutorial indem es um Relationen in
Tabellen geht.
Tutorial Datenbank
Ich versteh ansonsten das Problem nicht. Was ist ein Drehgeber????

MfG
Kasoft

abi 7. Jun 2004 15:44

Re: Daten einfügen, bei zwei Tabellen
 
Hallo Kasoft
sorry, hab ich nicht mehr dran gedacht.

Was ist ein Drehgeber.
Ich kanns zwar nicht besonders gut aber ich versuchs.

Man hat eine Welle diese dreht sich. Auf dieser Welle ist eine Codierscheibe, da stehen im binärCode Zahle drauf. Also eine Scheibe auf der z.B. 1,2,3,4 usw. drauf steht. Diese kann der Drehgeber lesen. Damit kann er ganau sagen auf welcher Position er sich befindet.

Jetzt braucht man z.B. nicht jeden Schritt sondern es reicht wenn man nur die geraden Zahle zählt. Dies kann man mit der Aufösung ändern.

z.B. bei einem Robotor. Dieser darf immer nur ganz bestimmte Position anfahren. Um dies zu überprüfen braucht man einen Drehgeber.

Ich hoffe du weisst was ich meine.

Ich werde jetzt Feierabend machen, denn irgendwie. Brauch ne Pause.

Werde mich aber morgen wieder melden.

Mercy nochmal.

abi


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