lokale Datenbank ohne primären Index?
-
Hi!
Ich schlage mich gerade mit einer lokalen Datenbank herum und mein Problem ist, dass ich für eine der Tabellen
1. keinen Primärschlüssel benötige
2. keines der Felder eindeutig ist, sich also nichts für einen Primärschlüssel eignet.Das bedeutet also, dass ich einen künstlichen Schlüssel erzeugen muss. Weiss jemand ob die Datenbank das irgendwie automatisch erzeugen kann, also z.B. ein Integer-Feld kontinuierlich hochzählt? Oder weiss jemand wie man einen zusammengesetzten Index erzeugen kann?
Ein kleiner Auszug aus meinem Code:
//create the Transaction-Database Table->DatabaseName = Edit_Path->Text; Table->TableName = "database"; Table->FieldDefs->Clear(); Table->FieldDefs->Add("member", ftString, 255, true); Table->FieldDefs->Add("description", ftString, 55, true); Table->FieldDefs->Add("number", ftString, 10, true); Table->FieldDefs->Add("date", ftDate, 0, true); Table->FieldDefs->Add("time", ftTime, 0, true); //define indices Table->IndexDefs->Clear(); //create the primary key Table->IndexDefs->Add("", "member", TIndexOptions() << ixPrimary); Table->IndexDefs->Add("numb", "number", TIndexOptions()); Table->CreateTable();Danke im voraus!
Sebo
-
Hallo Sebo,
zuerst wäre es von vorteil welche Datenbank du benutzt (SQL,Paradox,....).
Bei Paradox gibt es den Feldtyp Autoinc.
Bei einer SQL-Datenbank kannst du einen generator ereugen. Diesen rufst du auf bevor du eine Eintrag vornimmst (Stichwort BeforeInsert).
So kannst du dir einen eindeutigen Integer-Wert erzeugen.Rainer
-
Hi!
Wie gesagt ist eine lokale Datenbank, kein SQL, kein Server. Die Auswahl des Tabellentyps überlasse Borland -> "ttDefault". Borland erstellt dann aber eine Paradox-Datenbank.
Bei einer SQL-Datenbank brauche ich keinen Generator erzeugen, das händelt die Datenbank selbständig. Da reicht ein einfaches
. . . `id` int(5) NOT NULL auto_increment, . . .beim erstellen der Tabelle.
Jep, "ftAutoInc" hab' ich zwar schon in der Hilfe gesehen aber hab' nicht dran gedacht! Danke für den Tipp!
Die beste Lösung wäre aber immer noch die Datenbank ohne Primärschlüssel zu handhaben (In SQL-DBs ist das ohne weiters möglich). Weiss vielleicht jemand wie und ob das machbar ist?
Was noch interessant wäre ist, wie man einen zusammengesetzten Schlüssel erzeugt! So
Table->IndexDefs->Add("number", "number", TIndexOptions() << ixCaseInsensitive);funktioniert es jedenfalls nicht. Hat jemand eine Idee?
Danke im voraus!
SeboStone