Delphi-PRAXiS
Seite 1 von 3  1 23      

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 31. Mai 2003 20:20


Erstellung eines Index bei Paradox / DBase III+ Dateien
 
Hallo,
ich habe ein großes Problem.Und zwar möchte ich eine Spalte einer bestehenden Paradox 7 Datenbank indizieren (um z.B. alphabetisch
nach Namen zu sortieren)
Ich habe also eine TTable-Komponente , die mit der Tabelle verknüpft ist.Das ganze sieht dann im Code so aus :
--
tblParadox.Close;
//PRIMÄRINDEX erzeugen...
tblParadox.AddIndex('Nameindx', 'NAME', [ixPrimary,ixNonMaintained]);
//SEKUNDÄRINDEX erzeugen...
tblParadox.AddIndex('PLZindx' , 'PLZ' , [ixUnique ]);

tblParadox.Open;
--
Nun meine 1.Frage : WO wird die indexDatei Nameindx und PLZindx abgelegt auf der Festplatte??

Wenn ich nun etwa nach PLZ sortieren möchte also :
--
tblParadox.IndexName:='PLZindx';
--
so funktioniert das auch ein mal.Wenn ich dann aber wieder nach Name sortieren möchte :

--
tblParadox.IndexName:='Nameindx';
--
So wird mir die Fehlermeldung ausgegeben , dass die IndexDatei Nameindx NICHT EXISTIERT.

Wer kann mir helfen beim Indizieren von Paradox , bzw. DBase-Dateien (die haben ja keinen Primärindex , aber damit hab ich nur noch mehr Probleme , deswegen konvertiere ich die schon in Paradox Format)

Über eine rasche Antwort wäre ich mehr als dankbar!!! :-))
(P.S.: Vielleicht hattet ihr auch schonmal soviel Ärger mit TTable.Addindex(); )

hacki 31. Mai 2003 22:06

Hi DBMan,

bei Paradox werden die Indexe im Arbeitsverzeichnis der Datenbank (also dort wo die Datenbankdateien auch abgelegt sind), gespeichert. Für den Primär-Index einer Tabelle wird eine Datei angelegt, die den gleichen Namen wie die Tabellendatei erhält, jedoch die Extentions "PX" für primary index erhält. Ein Primär Index hat keinen Namen, den kannst Du entsprechende auch nicht auswählen. Falls kein Index verwendet wird, verwendet Paradox bzw. die TTable Komponente grundsätzlich den Primär-Index.

Die Sekundär-Indexe erhalten einen Namen zugewiesen und können über diesen auch expliziert angewählt werden, wie du es richtig gemacht hast. Die zugehörigen Dateien werden ebenfalls im Verzeichnis gespeichert, in dem die Tabelle steht. Für jeden sekundär Index werden zwei Dateien mit der Endung "XG0" und "YG0" für den ersten, "XG1" und YG1" für den zweiten .... angelegt.

Alles klar ? Falls nicht, fragen :wink:

grüsse
hacki

DBman 31. Mai 2003 23:40

Danke....aber trotzdem noch eine Frage
 
Hallo Hacki,
Du hast mir schon einen Schritt weitergeholfen.Aber ich habe trotzdem noch eine Frage... und zwar wenn ich jetzt zwischen der
Name-Indizierung und der PLZ-Indizierung einige Male "hin und herspringe" während der Laufzeit , so erhalte ich nach etwa 10 mal "hin und hersortieren" eine Exception der Klasse EAccesViolation , die anderen Male funktioniert das sortieren perfekt.... irgendwie eigenartig , findest du nicht auch?
Woran könnte das denn liegen.
Hast du darauf vielleicht auch noch einen Rat?
Wäre wirklich toll :-)

Vielen Dank DBman

hacki 1. Jun 2003 08:08

Hallo DBMan,

hab ich momentan leider nicht. Bin aber leider auch nur auf dem Sprung - schaue später nochmal rein und versuche das nachzustellen. :(

gruss hacki

MrSpock 1. Jun 2003 09:09

Hallo DBMan,

zunächst einmal herzlich willkommen im Dephi-PRAXIS Forum.

Nun zu deiner Frage: Ich habe eine ganze Reihe von Programmen, bei denen die Umschaltung -auch mehrfach hintereinander- problemlos funktioniert. Die Frage ist deshalb, in welchem Tabellenmode tritt dieser Fehler auf? Bist du z.B. immer im dsBrowse Mode (nur Anzeige von Daten) oder auch manchmal im dsInsert oder einem anderen Mode? In deinem Codeschnipsel ist der Postleitzahlindex als "eindeutig" angelegt, ist das korrekt? Außerdem würde ich einen häufig benutzten Index immer als "gewartet" markieren.

DBman 1. Jun 2003 18:04

...lag nur am ExclusiveMode ... aber noch mal eine Frage
 
Mr Spock ,
ersteinmal danke für die ausführliche Antwort,aber das mit der Exception lag nur daran dass ich die Tabelle nicht im Exclusive Modus geöffnet hatte.
Ich habe aber dennoch nochmal eine Frage und zwar:

Ich habe eine Paradox 7 Tabelle der ich im Code einen Primärindex und zwei Sekundärindizes zuweise.

Delphi-Quellcode:
 tblParadox.AddIndex('Primeindx','NAME',[ixPrimary,ixNonMaintained]);
 tblParadox.AddIndex('Nameindx' , 'NAME' , [ixUnique]);
 tblParadox.AddIndex('PLZindx' , 'PLZ' , [ixUnique]);

Sortiere nun nach dem Sekundärindex PLZindex:
Delphi-Quellcode:
 tblParadox.Close;
 tblParadox.IndexName:='PLZindx';
 tblParadox.Open;
Nun möchte ich die Indizes löschen (also nur die Sekundärindizes) mit DeleteIndex....und es soll dann nach dem Primärindex wieder sortier werden.

Delphi-Quellcode:
tblParadox.Close;
tblParadox.Exclusive:=true;
 tblParadox.DeleteIndex('Nameindx');
 tblParadox.DeleteIndex('PLZindx');
tblParadox.Close;
tblParadox.Open;
Wenn ich diesen Schritt aber mache , so erhalte ich eine Exception EDBEngineError.
Das Programm sortiert also nicht automatisch nach dem Primärindex , sondern scheint noch irgendwie die Information zu haben dass es nach PLZindx sortieren soll (dieser existiert ja aber nicht mehr).

Nun meine Fragen:
Wieso denkt das Programm noch dass es nach PLZindx sortieren soll , und wo steht diese Information (im Datei-Header vielleicht oder wo??)
Kann ich den Primärindex auch irgendwie löschen?(Über deleteindex geht das ja nicht)
:-(
Ich wäre über einen Lösungsvorschlag sehr erfreut.

PS:Lob an den jenigen der dieses tolle Forum in die Welt gesetzt hat und nochmal Danke an alle die mir schon gute Tips gegeben haben.
-DBman

MrSpock 2. Jun 2003 08:55

Hallo DBMan,

nach dem Löschen der Indizes musst du noch die Eigenschaft IndexName anpassen:

Delphi-Quellcode:
tblParadox.IndexName:='';
Denn dort steht ja noch der Name des Indizes, den du zuvor gelöscht hast.

DBman 2. Jun 2003 11:46

Danke...aber ist es eigentlich NICHT möglich auch den Primärindex zu löschen?

DBman 5. Jun 2003 13:15

Hilfe!!?
 
Hallo Mr.Spock,
irgendwie komme ich über meine anfänglichen Schwierigkeiten immer noch nicht hinüber weg.
Beim erstellen eines Primärindexes :
Delphi-Quellcode:
TblParadox.Exclusive:=True;
TblParadox.Active:=true;
TblParadox.AddIndex('Ersterix','B',[ixPrimary,ixNonMaintained]);
erhalte ich folgende Fehlermeldung:

Im projekt test.exe ist exception EDBEngineError.
Meldung : 'Zahl außerhalb des gültigen Bereichs'
Index nicht vorhanden.
Index : Ersteix.Prozeß wurde angehalten.

Ich wäre Ihnen äußerst dankbar , wenn sie mir ein kleines funktionierendes Beispielprogramm (mit Code) schicken könnten , indem
einer Paradox7 Tabelle mit Memofeld mit TTable.Addindex ein Primär- und Sekundärindex hinzugefügt wird.
Und dann mit Indexname nach den Indizes sortiert wird...
Ich wäre darüber wirklich sehr sehr dankbar.
:roll:
Danke DBman.

Mario 5. Jun 2003 15:21

Ein Primärindex zeichnet sich dadurch aus, dass er keinen Namen hat, jedenfalls bei Paradox. Also für den Namen einfach einen Leerstring übergeben, schon sollte es gehen.

ixNonMaintained steht doch für nicht gewartet. Das geht bei einem Primärindex auch nicht.

Weiterhin muss der Primärindex zwingend über die ersten Felder der Datenbank gehen.
Feld 1 ->geht
Feld 1 und 2 -> geht
Feld 1 und 3 -> geht nicht!!!
Feld 1..3 -> geht

Vielleicht hilft Dir auch noch Beispiel 12:
http://info.borland.com/devsupport/b...structure.html

Jetzt ein Beispiel zusammenzuschreiben, ist zeitlich leider nicht drin :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
Seite 1 von 3  1 23      

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