AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Erstellung eines Index bei Paradox / DBase III+ Dateien
Thema durchsuchen
Ansicht
Themen-Optionen

Erstellung eines Index bei Paradox / DBase III+ Dateien

Ein Thema von DBman · begonnen am 31. Mai 2003 · letzter Beitrag vom 9. Jun 2003
Antwort Antwort
Seite 1 von 3  1 23      
DBman

Registriert seit: 31. Mai 2003
Ort: nähe hannover
77 Beiträge
 
#1

Erstellung eines Index bei Paradox / DBase III+ Dateien

  Alt 31. Mai 2003, 20:20
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(); )
  Mit Zitat antworten Zitat
hacki

Registriert seit: 15. Nov 2002
96 Beiträge
 
Delphi XE5 Professional
 
#2
  Alt 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

grüsse
hacki
Es ist nicht gesagt, daß es besser wird, wenn es anders wird! Wenn es aber besser werden soll, muß es anders werden! ** There are 10 different types of people in this world; those who understand binary numbers and those who don’t !
  Mit Zitat antworten Zitat
DBman

Registriert seit: 31. Mai 2003
Ort: nähe hannover
77 Beiträge
 
#3

Danke....aber trotzdem noch eine Frage

  Alt 31. Mai 2003, 23:40
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
  Mit Zitat antworten Zitat
hacki

Registriert seit: 15. Nov 2002
96 Beiträge
 
Delphi XE5 Professional
 
#4
  Alt 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
Es ist nicht gesagt, daß es besser wird, wenn es anders wird! Wenn es aber besser werden soll, muß es anders werden! ** There are 10 different types of people in this world; those who understand binary numbers and those who don’t !
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5
  Alt 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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
DBman

Registriert seit: 31. Mai 2003
Ort: nähe hannover
77 Beiträge
 
#6

...lag nur am ExclusiveMode ... aber noch mal eine Frage

  Alt 1. Jun 2003, 18:04
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
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7
  Alt 2. Jun 2003, 08:55
Hallo DBMan,

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

tblParadox.IndexName:=''; Denn dort steht ja noch der Name des Indizes, den du zuvor gelöscht hast.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
DBman

Registriert seit: 31. Mai 2003
Ort: nähe hannover
77 Beiträge
 
#8
  Alt 2. Jun 2003, 11:46
Danke...aber ist es eigentlich NICHT möglich auch den Primärindex zu löschen?
  Mit Zitat antworten Zitat
DBman

Registriert seit: 31. Mai 2003
Ort: nähe hannover
77 Beiträge
 
#9

Hilfe!!?

  Alt 5. Jun 2003, 13:15
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.

Danke DBman.
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#10
  Alt 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
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 21:01 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