| Autor |
Beitrag |
Holla
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 03.12.02 00:17
Hallo,
wenn ich zur Laufzeit einen Index setze(Paradoxdb), dann aber mit TDBNavigator einen neuen Datensatz hinzufügen möchte erhalte ich die Fehlermeldung INDEX SCHREIBGESCHÜTZT.
Nun kann ich den Primärindex aber garnicht löschen, um dann editieren zu können. Was tun? Muß ich die Indizes überhaupt löschen?
Gruß, Holla
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Di 03.12.02 10:12
Hi
die Indizes darfst du eigentlich überhaupt nicht löschen und den Primärindex kannst du IHMO gar nicht löschen. Wie hast du denn die verwendeten Indizes erstellt?
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
Holla 
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 03.12.02 17:14
Titel: Index schreibgeschützt
Hallo,
den primären sowie den sekundären Index habe ich mit Addindex der TTable Klasse hinzugefügt, funktioniert auch prima, kann aber nun nicht mehr Datensätze zu meiner Tabelle hinzufügen!
Gruß Holla
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Mi 04.12.02 08:53
Hallo Holla,
einen Index kannst du am besten über die Datenbankoberfläche mit Tools|Umstrukurieren ändern/löschen oder hinzufügen.
Wenn du mehrere Indices hast, musst du zunächst einen auswählen. Standardmäßig (wenn du keinen speziellen auswählst) ist das der "primary key".
Benutzt du die BDE basierenden Komponenten mit dem "native" Treiber für Paradox oder einen ODBC Treiber? Hast du irgendeinem Ereignis der TTable Komponente Code hinzugefügt?
Die Fehlermeldung "Index schreibgeschützt" kenne ich nicht, aber es hört sich so an, als ob zu versuchst einen Index selbst zu überschreiben oder zu ändern. Das passiert aber nicht automatisch bei Betätigung irgendeines Schalters an der DBNav Komponente, deshlab meine Frage nach zusätzlichem Code, insbesondere Aufrufe von AddIndex, DeleteIndex, IndexNames, etc.
_________________ Live long and prosper
MrSpock \\//
|
|
Holla 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 04.12.02 20:53
Titel: Index schreibgeschützt
Hallo,
die Indizes hatte ich auch zuerst über die Datenbankoberfläche erstellt, bekam dort den gleichen Fehler.
Ich benutze die BDE und ihre Treiber(native??)
Mein Code besteht nur aus dem Ereignis OnFilterRecord von TTable und zwei Ereignisse bei denen ich sortiere, dort füge ich den Index hinzu und wähle ihn aus.
Hatte bis jetzt eine weitere Ereignismethode wo ich den sekundären Index löschte, die habe ich gelöscht und erhalte jetzt den Fehler beim editieren
"Indexfehler". Nicht besonders informativ.
Was mir grundsätzlich nicht klar ist, ist ob der Index normalerweise , nach hinzufügen eines neuen Datensatzes, automatisch aktualisiert wird?
Gruß ,
Holla
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Do 05.12.02 09:22
Hi
Ein gewarteter Index wird jedesmal beim Hinzufügen von Daten automatisch aktualisiert. Bei nicht gewarteten bist du selbst für das Aktualisieren des Index zuständig.
Die Kehrseite ist damit, das eine Tabelle mit vielen gewarteten Indizes für jede Update-Aktion sehr viel länger braucht, weil die Indizes ja auch alle aktualisiert werden müssen.
Die Meldung "Indexfehler" könnte darauf hindeuten, dass du entweder versuchst einen Index zu verwenden der gar nicht mehr existiert, oder der nicht mehr gültig ist.
Vor dem Löschen eines Index solltest du daher sicherstellen, dass du wieder auf den Primärindex zurückschaltest (IndexName := ''). Da das Löschen eines Sekundärindex nur dann funktioniert, wenn du Exklusiven Zugriff auf die Tabelle hast, würde ich an deiner Stelle vom Hinzufügen und Löschen von Indizes zu Laufzeit ganz absehen. Die für den Zugriff unbedingt notwendigen Indizes werden als gewartete Indizes mit der Datenbankoberfläche festgelegt und einfache Sortierungen mit SQL realisiert. Das ist zwar Anfangs ein bisschen mehr Aufwand, bringt auf lange Sicht aber sehr viel weniger Probleme.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Do 05.12.02 10:01
Hallo Holla,
wenn du eine Tabelle regelmäßig nach einer bestimmten Spalte sortieren willst, solltest du den Index als Sekundärindex anlegen. Beim Filtern darfst du dann den Index natürlich nicht erstellen, sondern ihn nur auswählen. Dazu solltest du bei der Erstellung in der Datenbankoberfläche für den Index die Option "gewartet" auswählen, dann wird bei Einfügen eines neuen Datensatzes der Index automatisch angeasst.
_________________ Live long and prosper
MrSpock \\//
|
|
Holla 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 05.12.02 13:46
Titel: Index schreibgeschützt
Hallo Leute,
danke für eure Antworten. Ich habe den Fehler gemacht, einen Index zu benutzen, der nicht mehr gültig war.
Mir war auch nicht klar, das der Primärindex eindeutig ist.
Gruß, Holla
|
|
|