AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Nächsten Primärschlüsselwert holen
Thema durchsuchen
Ansicht
Themen-Optionen

Nächsten Primärschlüsselwert holen

Ein Thema von bioser · begonnen am 12. Dez 2005 · letzter Beitrag vom 13. Dez 2005
Antwort Antwort
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#1

Nächsten Primärschlüsselwert holen

  Alt 12. Dez 2005, 16:08
Datenbank: Access • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Nächsten Primärschlüsselwert holen

  Alt 12. Dez 2005, 16:29
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#3

Re: Nächsten Primärschlüsselwert holen

  Alt 12. Dez 2005, 19:53
Jo, danke, ich habe einfach noch ne autoinc-Spalte hinzugefügt.
Nee, Access als Multiuser-DB hätte ich sowieso nicht genommen.
  Mit Zitat antworten Zitat
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#4

Re: Nächsten Primärschlüsselwert holen

  Alt 12. Dez 2005, 20:34
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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Nächsten Primärschlüsselwert holen

  Alt 12. Dez 2005, 21:34
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#6

Re: Nächsten Primärschlüsselwert holen

  Alt 13. Dez 2005, 11:51
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 ?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Nächsten Primärschlüsselwert holen

  Alt 13. Dez 2005, 12:02
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
    ...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 17:58 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