Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nächsten Primärschlüsselwert holen (https://www.delphipraxis.net/58777-naechsten-primaerschluesselwert-holen.html)

bioser 12. Dez 2005 16:08

Datenbank: Access • Zugriff über: ADO

Nächsten Primärschlüsselwert holen
 
Moin an alle,

mein Primärschlüssel setzt sich aus zwei Attributen zusammen.

ID(Zahl) und Sprache(Text)

Da es sich hierbei um kein Autoinc-Feld handelt, muß ich zuerst
den größten Wert aus der DB holen und 1 draufaddieren.
Für Mehrbenutzersysteme ist das aber völlig ungeeignet.
Was macht man dann ?
Danke für Eure Antworten.

Viele Grüße
bioser

alzaimar 12. Dez 2005 16:29

Re: Nächsten Primärschlüsselwert holen
 
Zitat:

Zitat von bioser
...Für Mehrbenutzersysteme ist das aber völlig ungeeignet.
Was macht man dann ?
...

Gerade dafür wurden AutoIncs eingeführt. Füge also eine AutoInc-Spalte hinzu und das Problem sollte erledigt sein.

Wenn Du die Tabellenstruktur nicht ändern kannst, must Du mit einer Transaktion arbeiten. Dazu brauchst Du eine Hilfstabelle.

Dessenungeachtet ist es Selbstmord, in einer Mehrbenutzerumgebung mit Access zu arbeiten, früher oder später fliegt dier die Access-DB um die Ohren, zerlegt sich, Datensätze gehen verloren etc.

Schmeiss es auf den Müll und besorg Dir eine richtige DB. Gehe nicht auf den Kunden ein, wenn er sagt: 'Das soll aber so bleiben'. Es geht nicht. Access ist keine Mehrbenutzer-DB, es wäre gern eine, ist aber zu blöd. Punkt. Du wirst den Ärger bekommen.

Tu Dir (und deinem Kunden) einen Gefallen und migriere zu:
-MSSQL (Express, ist umsonst und wirklich gut)
-Firebird (siehe oben)
-PostGreSQL (oha!)

Ich bin mit MSSQL gross geworden, also ist das 'meine' DB. Die anderen sind aber mindestens genau so gut. Und wirklich stabil. Und ca. mindestens 10x-100x schneller.

bioser 12. Dez 2005 19:53

Re: Nächsten Primärschlüsselwert holen
 
Jo, danke, ich habe einfach noch ne autoinc-Spalte hinzugefügt.
Nee, Access als Multiuser-DB hätte ich sowieso nicht genommen.

bioser 12. Dez 2005 20:34

Re: Nächsten Primärschlüsselwert holen
 
hi, ich habe gerade bemerkt, daß sich mein Problem noch nicht erledigt hat, weil die "ID" meines zusammengesetzten Schlüssels ja mehrfach auftritt und dann durch die Hinzunahme von "Sprache" eindeutig ist. Dann bringt mir auch eine weitere Spalte mit einem Autowert nichts,
weil ja eben die "ID" nicht von mir festgelegt werden soll.

alzaimar 12. Dez 2005 21:34

Re: Nächsten Primärschlüsselwert holen
 
Du hast also so eine Tabelle
  • ID Sprache
    1 D
    1 E
    1 F
    2 D
    ...
Und willst dafür neue eindeutige ID/Sprache Kombination generieren. Erstmal denke ich, ein AutoInc-ID Feld ist grundsätzlich erstmal richtig, den damit ist dein Datensatz auch in einer Mehrbenutzerumgebung eindeutig identifiziert.

So, jetzt hast Du also einen neuen Datensatz, sagen wir so:
  • AID ID Sprache
    1 1 D
    2 1 E
    3 1 F
    4 2 D
    5 ? ?
    ...
Äh... Du must doch wissen, 'wem' (also zu welcher ID) der Datensatz gehört... oder ist deine ID-Spalte doch eindeutig, nur 'leider' kein AutoInc-Feld? Weise der ID-Spalte doch einfach den AutoInc-Wert zu, dann ist dieser Wert zwar redundant, aber trotzdem eindeutig

Ich hoffe, Du weisst wenigstens die Sprache von dem neuen Datensatz. Dann würde ich mal vorschlagen, Du schmeisst die ID-Spalte weg und nimmst stattdessen die AutoInc-Spalte als ID-Feld. Falls Du verknüpfungen hast, musst Du die nur umbiegen.

bioser 13. Dez 2005 11:51

Re: Nächsten Primärschlüsselwert holen
 
hi, danke, das siehst Du richtig. Die Felder ID_wort und ID_sprache sind eindeutig.
ID_wort sollte normalerweise ein Autoinc-Wert sein, aber das ist nicht möglich, weil es mehrere gleiche ID_wort gibt. Hier meine Tabelle:

Code:
id_wort id_sprache id_wort
1       de        Hund
1       eng       dog
2       de        Katze
2       eng       cat
id_wort + id_sprache bilden den Primärschlüssel. Die Tabelle soll mir jeweils eine Übersetzung
eines Wortes in eine andere Sprache liefern, was ja soweit auch möglich ist.
id_wort soll aber generiert werden. Genau das ist mein Problem !
Oder sollte ich mir eine andere Tabellenstruktur überlegen ?

alzaimar 13. Dez 2005 12:02

Re: Nächsten Primärschlüsselwert holen
 
Ja:
Z.B. eine Tabelle 'Wort' und eine Tabelle 'Übersetzung' (vielleicht noch eine als 'Sprache')
  • WortID Wort
    1 Hund
    2 Katze
    3 Dog
    4 Cat
Übersetzung
  • WortID Sprache TranslatedID
    1 en 3
    2 en 4
    ...


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