Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Erstellung eines Index bei Paradox / DBase III+ Dateien (https://www.delphipraxis.net/5304-erstellung-eines-index-bei-paradox-dbase-iii-dateien.html)

DBman 6. Jun 2003 11:59

Primärindex nur für erste Spalte?
 
Ich habe selber nochmal ein wenig rumprobiert und herausbekommen , dass es bei mir mit der Indexerzeugung nur funktioniert , wenn sich mein Primärindex das erste Feld der Tabelle bezieht.... macht das Sinn ?
Naja egal hauptsache es funktioniert so.
Aber da ist mal wieder ein neues Problem hervorgekommen ich versuche schon durch rumgetüftel das wieder rauszukriegen , aber vielleicht weiß ja einer von euch genauer woran es liegen könnte:

Ich habe 2 Tabelle tblKuDa und tblKuPe , wobei in beiden Tabellen das Feld KUNKZ existiert.

Das erste Feld von tblKuDa heisst KUNKZ , das erste Feld von tblKuPe heisst NR.
Bei der Indexerzeugung von tblKuDa gibts jetzt (wo ich als Primärindex die erste Spalte genommen habe ) eigentlich keine Probleme.
Nur wenn ich die bei tblKuPe auskommentierte Zeile entkommentiere , so wird mir eine Fehlermeldung ausgegeben : Der Index sei bereits vorhanden.
Das finde ich aber ziemlich komisch weil das KUNKZ oben hat mit dem KUNKZ unten ja nichts zu tun. Es ist ja von einer anderen ParadoxTabelle.Hm... muss irgendwie daran liegen dass der Primärindex auch nach KUNKZ indiziert is... aber halt nach dem anderen von der anderen tabelle..... Macht für mich also wenig Sinn.
Eine Auflösung des Rätsels wäre toll.

Delphi-Quellcode:
tblKuDa.Exclusive:=True;
tblKuDa.Close;
tblKuDa.AddIndex('','KUNKZ',[ixPrimary]);
tblKuDa.AddIndex('KunkzDAIndx','KUNKZ',[ixCaseInSensitive]);
tblKuDa.AddIndex('FirmaDAIndx','FIRMA',[ixCaseInSensitive]);
tblKuDa.AddIndex('TelDAIndx','TEL' , [ixCaseInSensitive]);
tblKuDa.Open;


tblKuPe.Exclusive:=True;
tblKuPe.Close;
tblKuPe.AddIndex('','NR',[ixPrimary]);

//tblKuPe.AddIndex('KPEindx','KUNKZ',[ixCaseInSensitive]); //<-Kommentar

tblKuPe.AddIndex('NamePEIndx','NAME',[ixCaseInSensitive]);
tblKuPe.AddIndex('TelPEIndx','TEL',[ixCaseInSensitive]);
tblKuPe.Open;
PS:Es ist glaub ich egal ob ich bei AddIndex dem Primärindex nen Namen zuweise oder nicht , (ich spreche ich später sowieso über '' an oder??

Mario 6. Jun 2003 12:08

Ein Grossteil Deiner Fragen sollte sich klären, wenn Du Dir mein Posting noch mal durchliest.

Auf den ersten Blick sieht alles sauber aus. Die einzige Möglichkeit, welche ich sehe: Die Tabelle hat den Index wirklich bereits. Eine Zusammenhang mit der anderen Tabelle sollte eigentlich nicht bestehen. Das kannst Du aber leicht überprüfen, wenn Du die Index-Erstellung bei erster Tabelle einmal nicht durchführst.

DBman 6. Jun 2003 13:15

Mario du hattest irgendwie recht.

Ich habe einfach die Indizes nochmal manuell in dem Verzeichnis gelöscht dann ging es.

Aber die Indexe SOLLEN JA AUCH EXISTIEREN.

Ich will die ja bei jedem Programmstart mit Addindex neu überschreiben.
Also das was ich da geschrieben habe steht bei mir in der FormCreate -Methode. Deswegen verstehe ich nicht , weshalb ich eine Fehlermeldung bekomme , von wegen der Index existiert bereits , wenn ich ihn doch überschreiben will (Die anderen indizes Existierten ja auch alle bereits)....
Hm , naja so ganz klar ist mir das noch nich.
:freak:

Mario 6. Jun 2003 13:18

Überschreiben wird nicht gehen. Du musst erst alle nicht benötigten oder veralteten Indizes löschen (evtl. DeleteIndex?).

DBman 6. Jun 2003 13:18

Jetzt startet zwar das Programm ohne Fehlermeldung , wenn ich jedoch nach 'NamePEIndx' sortieren möchte bekomme ich die Fehlermeldung
'NamePEIndx' Index nicht vorhanden....
Aber der wurde doch gerade mit Addindex erzeugt??
Also ich werde daraus nicht schlau

DBman 6. Jun 2003 16:18

noch mal eine kleine frage...
 
Ich hab das jetzt doch hingekriegt.Danke nochmal für die Tips.


Aber ich habe nochmal eine kleine Frage , und zwar habe ich eine DBase Datei in Paradox konvertiert. Bei Dbase Dateien gibts ja keinen Primärindex.

Naja und in dieser (Detail-)Tabelle stehen nun auch teilweise gleiche Datensätze drin.
Wenn ich nun über den Primärindex sortiere , so werden die "doppelten" Datensätze aber ja quasi "rausgeschmissen"

Also nehmen wir an : Ich habe eine Master Tabelle in der die Kunden drin stehen , und eine DetailTabelle in der die Bestellungen drin stehen.

In der Master Tabelle steht nun KundenNr / VornnameNachname / Telefon
In der Detail Tabelle steht nun Nr / KundenNr / Name (des Produkts)

nun dürfen die doppelten Datensätze in der DetailTabelle jetzt ja aber nicht "rausgeschmissen" werden...

In einem Buch hab ich dazu folgendes gefunden :

Zitat:

Primärschlüssel - Um alle Datensätze einer Tabelle eindeutig zu identifizieren , kann der TAbelle ein weiteres Attribut NUMMER hinzugefügt werden , welches die Datensätze durchnummeriert.Dadurch ist es möglich , zwei Einträge der Tabelle immer anhand ihrer Nummer zu unterscheiden.Das Attribut NUMMER ist in diesem Fall der Primärschlüssel der Tabelle.Jede Tabelle kann nur einen Primärschlüssel besitzen. Ein Primärschlüssel einer Tabelle ist ein Attribut oder eine Attributkombination , deren Werte die Datensätze doser Tabelle eindeutig identifizieren.
hm...Ja genau so ein Attribut NUMMER dass die Datensätze quasi nach Datensatznummer durchnummeriert (wie es in DBASE ja war) bräuchte ich eigentlich.
Aber wie geht das , dass automatisch die Datensatznummer in diesem Feld steht , ich will ja schließlich nicht ein Feld namens Nummer erzeugen und dann da 1 , 2, 3,4 ,5..... reinschreiben..

Ich hoffe meine Frage ist nicht zu dumm , um in diesem Forum gestellt zu werden.
:spin:
PS:Vielen Dank nochmal an alle guten Tips! :wink:

MrSpock 6. Jun 2003 16:34

Hallo DBMan,
das kannst du am besten über die Datenbankoberfläche machen. Ein Feld hinzufügen, dann an den Anfang schieben. Als Typ wählst du "Zähler" (+) und dann klickst du noch in die rechte Spalte, um aus diesem Feld den Primärindex (ggf. zusammen mit der alten Nummer als zusammengesetzten Index). Wenn du später mal eine Satz löscht, wird die Nummerierung aber nicht geändert und die Lücke im Zähler auch nicht mehr benutzt. Aber das sollte ja egal sein. Oder?

DBman 6. Jun 2003 16:45

hm..naja
 
Danke für die Hilfe Mr.Spock ,
aber was meinst du damit , dass wenn ich einen Satz lösche dass das dann nicht mehr angepasst wird?Also das Feld Nummer sollte schon immer die Datensatznummer haben...

Naja ich spiel damit mal ein bisschen rum.

Dankschön ;-)

MrSpock 6. Jun 2003 21:17

Hallo DBMan,

ich meine das so: Der Zähler wird NIE zurückgesetzt. Angenommen du hast 100 Datensätze und löscht alle 100. Dann bekommt der nächste (erste) Datensatz die Nummer 101.

DBman 6. Jun 2003 21:46

Ahso ne das is ja eigentlich egal.

Passt in diese Thema jetzt zwar nich direkt rein , aber kannst du mir zufällig noch sagen wie man bei einem DBGrid die Farbe Spaltenüberschrift verändern kann?
Oder sollte ich da mal nach neuen Komponenten auf delphipages nachschauen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz