![]() |
Fehlermeldung: *.db Index ist schreibgeschütz
Hallo,
Hat jemand eine Idee, wie so ein Fehler entsteht und wie man ihn beheben kann. Erklärung: Ich habe die *.db Datenbank mit 2 indexdateien indiziert. Ich arbeite mit TDBGRID und TDBEDIT. Wenn ich die Datenbank ohne indexdateien öffne, kann ich einen neuen Datensatz einfügen und editieren. Beim Speichern kommt dann die Fehlermeldung "Indexdatei ist schreibgeschützt" bei diesem Befehl: Table1.Post; könnt ihr mir Helfen?? Mit freundlichen Grüssen RedHorse |
Tja, im ersten Moment würde ich vermuten, daß der Index tatsächlich schreibgeschützt ist. Auch wenn kein Index aktuell im Zugriff ist, dann wird wenigstens bei Mdx-Dateien dieser auromatisch gepflegt, soweit ich mich erinnern kann.
Viele Grüße! |
Hallo RedHorse,
wie öffnest du die Tabelle ohne Index? Wenn das IndexName Feld leer ist, benutzt du bei Paradox Tabellen den Primärindex. Benutzt du TTable Objekte? Welches Datenbanksystem? |
Hallo...
das Problem ist bei mir auch vorhanden! Index wird mit Database Desktop zur Paradox Datei erzeugt...es entstehen eine *.DB und eine *.NDX Datei! Nun werden auf dem Formblatt: TTable:, Databasename:, Tablename : *.db TDataSource:, Dataset : Table1 TDBGRID: DataSource: DataSource1 richtig ausgewählt. Gespeichert werden die Dateien über ein Edit.Text-Feld mit Table1.Insert; in der Datei. Jetzt bekomme ich mit eingeschaltetem Index einmal die Fehlermeldung: "Index is out of Date" und einmal die Meldung "Index read only". Irgendetwas muß doch da falsch eingestellt sein! Am schönsten wäre es, wenn das mal jemand in Kurzform beschreiben könnte. Von der Indexerstellung bis zur Einbindung an die Datei und Darstellung in einer Tabelle mit Eingabe über ein Edit.Feld! Ich denke, das mit diesem Problem viele Einsteiger zu kämpfen haben und das es ihnen hilft das Problem zu lösen! Gruß Mitchl |
Hallo Mitchl55,
wenn du von DB Dateien sprichst, nehme ich an, dass du mit Paradox Tabellen arbeitest. Ich nehme an du hast eine Tabelle, die noch keinen Index hat. Du rufst dann die Datenbankoberfläche auf und wählst Tools|Tabellenoperationen|Umstrukturieren... Im Open Dialog wählst du dann die Tabelle aus. Um jetzt einen Primärindex zu erstellen, machst du einen Doppelklick auf die rechte Spalte hinter die ersten n (n=1..AnzahlFelder) Felder und klickst dann auf "Speichern". Es wird dann eine .PX Datei erstellt, die den Primärindex enthält. Zusätzlich kannst du auch einen oder mehrere Sekundärindices erstellen. Dazu wählst du im o.g. Umstrukturierungsdialog unter Tabelleneigenschaften "Sekundärindizes" und dann "Definieren". Dort wälst du das Feld bzw. die Felder, die den Sekundärindex bilden sollen. Als Indexoption wähst du "gewartet" und ggf. "eindeutig", wenn gewünscht. Dem Index gibst du einen Namen z.B. nachDatum oder nachName. Nach dem Speichern entstehen dann .XGn .YGn (n=1,2 ...) Dateien. Wie erstellst du denn .NDX Dateien? |
Fehler: index ist schreibgeschützt
Hallo MrSpock,
Ich danke Dir für die schnelle Antwort. Ich hatte genau, wie du bei Mitchl55 erklärt hast die indexdateien erzeugt. Ich habe Paradox Tabellen. Nach dem Speichern entstehen dann .XGn .YGn (n=1,2 ...) Dateien. Ich habe trotzdem ein Fehler mit "index ist schreibgeschützt". Ich habe Indexname bei table1 Eigenschaften:indexdatei ausgewählt. Wenn ich keine indexdateien benutze, kommt dieser Fehler nicht. Ich habe über den Arbeitsplaz mir die Dateieigenschaften angeschaucht. Die sind nicht schreibgeschützt. Mit freundlichen Grüssen RedHorse |
Re: Fehler: index ist schreibgeschützt
Hallo RedHorse,
Zitat:
|
Re: Fehler, indexdateien schreibgeschützt
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo MrSpock,
Ich weiß nicht mehr weiter, wie ich so ein Fehler beheben kann. Diese lief.db Datenbank habe ich von lief.dbf umgewandelt. Die Indexdateien haben ich mit Datenbanköberfläche erstellt. Anbei sende ich teil des Programmes, wo diese Fehler eintritt. Ich würde mich freuen, ob du eine Lösung für mich hast. 2. Frage: Wie könnte ich nur die indexdateien, wie ich sie manuel mit Datenbankoberfläche erstellt habe mit ein Buttondruck, nochmal neu erstellen. z.b. Nach dem Systemabstruz. Ich wäre für ein beispiel sehr dankbar. Mit freundlichen Grüssen RedHorse |
Hallo RedHourse,
habe mir Deine DB angesehen. Der Primary-Index fehlt. Verpaß' Deinen DB als erste einfach in Feld ID (für Identifikation oder so ähnlich) vom Typ AutoInc und definiere dieses als Primärindex. Dann dürften diese Probleme verschwinden. mfg eddy |
re: Fehler, indexdatei ist schreibgeschützt.
Hallo eddy,
Danke für schnelle Atwort, leider lauft es bei mir nicht. Ich habe in der Datenbank lief.db neues Feld eingefügt. Feldname Typ Größe Schlüssel Feldid + * ich denke daß, ein Primärindex erzeugt haben muß. ich habe danach gespeichert und die sekundärindexdateien gelöscht und neu erstellt, damit keine Fehler von dieser dateien auftauchen soll. Fehler ist immer noch da. Ich weis nicht mehr weiter. Hast du es bei dir probiert, wie du mir erzählt hast und lauft es bei dir??? Mit freundlichen Grüssen RedHorse |
Hallo RedHorse,
ich habe das Programm gestartet und konnte den Fehler nachvollziehen. eddy hat eigentlich bereits die Antwort geliefert. Du musst folgendes machen: 1. Öffne die Datenbank zum Umstrukturieren in der DB Oberfläche 2. Lösche lief und liefn 3. Doppelklicke auf die rechte Spalte hinter LFNR, um diesen zum Primärindex zu machen 4. Lege liefn neu an (wie gehabt mit Firmenname1 als Feld und liefn als Indexname). Wähle als Option "gewartet" Im Program löscht du jetzt im TTableobject den Indexname, damit der Primärindex benutzt wird. Ich habe es ausprobiert: dann läuft das Programm fehlerfrei. |
re: Fehler, Index ist schreibgeschützt, Fehler behoben.
Hallo MrSpock,
Danke für rasche Antwort: Ich hatte diesen Vorgang nicht geändert gehabt " Im Program löscht du jetzt im TTableobject den Indexname, damit der Primärindex benutzt wird. " ( das war Fehler) Ich habe es ausprobiert: das Programm läuft Fehlerfrei. Speichern, Ändern, Neueinfügen läuft ohne Fehler. "Leider habe ich mich zu früh gefreut." Weil ich vorher zwischen beiden indexdateien wechseln können, damit die Datenbank 1. Lfnr 2. nach name sortiert angezeigt werden konnte. Jetzt geht es leider nicht mehr. Wenn du in meinem Programm oben sehen würdes, zeigt indexdateinen an. Wenn ich vorher dort angeklickt hatte, hatte er zwischen beider indexdateien gewechselt gehabt. Jetzt kommt Fehlermeldung "Index nicht mehr gültig". Jetzt kann ich speichern, aber nicht zwischen beieden indexdateien wechseln, weil jetzt Fehlermeldung: Index nicht mehr gültig erscheint und Programm abbricht. Eine Fehler ist bezeitigt, kommt jetzt andere Fehler. Ich habe über arbeitsplatz in die Verzeichnis angeschaut. lief.PX, lief.XG0, liefYG0 indexdateien sind da. Warum sind indexdateien nicht mehr gültigt.???? 1. Frage noch: Wie kann man in eiem Feld mit ENTER-Taste auf die nächste Feldgehen. muss man bei bei DELPHI unbedingt TAB-Taste benutzen??? Mit Freundlichen Grüssen RedHorse |
Hallo RedHorse,
Du mußt Deine Index-Dateien natürlich auch als "gewartet" kennzeichnen. Ich habe diese mit dem Browser geöffnet, den ich Dir schon mal geschickt hatte, und beim Versuch einen neu eingefügten Datensatz zu speichern, erhielt ich die gleiche Meldung. Außerdem empfehle ich Dir für die nachfolgenden Felder den Typ Integer 0 LFNR N 1 KDNR N 2 KDNRTK N bzw. A (String) zu verwenden (bei Plz sonst Problem mit führenden Nullen z.B. 09126 --> 9126) 7 PLZ N
Code:
Und das ist aus einem der vielen Beiträge zu diesem Thema und ist wohl von der Funktion identisch mit Tab (ich hab's noch nicht probiert):
Im cbME1 vom Typ TComboBox wird bei Enter die aktive Seite gewechselt und ein ausgewähltes Edit-Feld fokussiert:
procedure TFKasse.cbME1KeyPress(Sender: TObject; var Key: Char); begin if key = #13 then begin sbBack2BucheWE.Visible := false; key := #0; pcArt.ActivePage := tsKalk1; pcArtChange(Sender); edListenPreis.SetFocus; end; end;
Code:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin If (Key = #13) Then Begin Key := #0; Perform(WM_NEXTDLGCTL,0,0); // gehe zur nächsten Komponente End; end; mfg eddy |
re: Fehler, Index nicht mehr gültig, lauft wieder.
Hallo an Allen, (MrSpock, Eddy und anderen die mir geholfen haben)
Ich habe den Fehler bei mir gefunden. Databasename : Falscheverzeichnis eingestellt. Jetzt lauft alles ok. Ich kann jetzt zwischen beide Indexdateien wechseln. 1. Frage: gibt es nicht die Möglichkeit bei der Eingabe TDBEditfeld mit ENTER-Taste auf die nächste Feld zu wechseln. wird es bei DELPHI nicht automatisch unterstüztz ??. Ich würde mich freuen, wenn jemand mir helfen würde. Mit freundlichen Grüssen. RedHorse |
Hallo RedHorse,
Enter-Taste funktioniert wie Tab-Taste in OnKeyPress:
Code:
funktioniert in TEdit, TDBEdit und vielen anderen Objekten. Einfach probieren. Ich habe es getestet mit den beiden genannten.
procedure TForm.MyObj_KeyPress(Sender: TObject; var Key: Char);
begin If (Key = #13) Then Begin Key := #0; Perform(WM_NEXTDLGCTL,0,0); // gehe zur nächsten Komponente End; end; mfg eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr. |
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