Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Einmal index setzen, dann Tabelle kaputt (https://www.delphipraxis.net/76578-einmal-index-setzen-dann-tabelle-kaputt.html)

Susanne 6. Sep 2006 15:08

Datenbank: Paradox • Version: 9 • Zugriff über: BDE

Einmal index setzen, dann Tabelle kaputt
 
Hallo,

ich habe ein Problem mit dem Zugriff auf die Paradoxtabelle. ich öffne die Tabelle, setze den Sekundärindex und suche dann nach einem Schlüssel, lese aus und schliesse die Tabelle wieder. Soweit klappt das. anschliessen mache ich im Programm noch mal das gleiche, aber anstatt auszulesen setze ich hier die Werte des gefundenen Datensatzes neu. Das macht er bei dem ersten Durchgang auch einwandfrei

Nun führe ich das ganze erneut aus und nun möchte ich den Index setzen und jetzt bekomme ich den Fehler : Index nicht mehr gültig.

Jetzt kann ich die Tabelle reparieren, das erst mal klappt es wieder und danach wieder die gleiche Fehlermeldung.

Wo liegt mein Fehler? Irgendjemand noch eine idee, mir sind sie irgendwie ausgegangen.


Lesen
Delphi-Quellcode:
        Form2.Table1.IndexName := '';
        try
          Form2.Table1.IndexName := 'VORGANG';
        except
          on e:exception do
            ShowMEssage(e.message);              
        end;
        Form2.Table1.open;
        KeyGefunden := form2.Table1.FindKey([FieldValue]);
        if KeyGefunden then begin
          for i:=0 to (sl_FieldName1.Count-1) do begin
            if Form2.Table1.Fieldbyname(sl_Values1[i]).isnull then
              TempString := ' '
            else
              TempString := Form2.Table1.fieldvalues[sl_Values1[i]];
            if TempString <> '' then
              cbo.SetDlgFieldValue(sl_FieldName1[i] ,TempString,true);
          end;
        end else
          ShowMessage('Vorgangsnr nicht gefunden.');
        Form2.Table1.close;
Schreiben
Delphi-Quellcode:
//Werte in DB zurückschreiben / aktualisiere den Datensatz
  else if cbo.GetDlgFieldValue('VORGANG') <> '' then begin

    Form2.Table1.IndexName := '';
    Form2.Table1.IndexName := 'VORGANG';
    inhalt:= cbo.GetDlgFieldValue('VORGANG');
    KeyGefunden := form2.Table1.FindKey([inhalt]);
    if KeyGefunden then
      Form2.Table1.Edit
    else
      Form2.Table1.Append;
    Form2.Table1.open;
    Form2.Table1.FieldByName('ABNR').AsString:= cbo.GetDlgFieldValue('ABNR');
    Form2.Table1.FieldByName('BELDAT').AsString:= cbo.GetDlgFieldValue('BELDAT');
    Form2.Table1.FieldByName('VORGANG').AsString:= cbo.GetDlgFieldValue('VORGANG');
    Form2.Table1.FieldByName('KDNR').AsString:= cbo.GetDlgFieldValue('KDNR');
    Form2.Table1.FieldByName('Debitor').AsString:= cbo.GetDlgFieldValue('KUNDE');

    try
      Form2.Table1.Post;
    except
      on e:exception do begin
        ShowMessage(e.message);
        exit;
      end;
    end;
    Form2.Table1.close;
  end;

Schweesspunkt 6. Sep 2006 15:29

Re: Einmal index setzen, dann Tabelle kaputt
 
Hallo,

Bin an sich nur Hobby-Programmierer aber im Schreiben-Teil scheint mir
"Form2.Table1.open;" an der falschen stelle zu stehen.

Mich würde es wundern wenn du ein findkey, edit oder append kommando auf eine geschlosene Datei anwenden kannst.
Und ich glaube, bin mir nicht sicher, ein open kommando setzt findkey, edit und append wieder zurück.

M.f.G.
Kunsch Alain

hoika 6. Sep 2006 15:44

Re: Einmal index setzen, dann Tabelle kaputt
 
Hallo,

auch wenn du es schon zum 100sten Mal hörst ..
Du benutzt die falsche Datenbank.
Mit Bde-Befehlen bekommt man keinen Index kaputt.

Allerdings sieht das Form2.Table1.open; wirklich merkwürdig aus.

Das muss noch vor Form2.Table1.IndexName:= ....
Das Setzen des Index darf gar nicht gehen, wenn die Tabelle zu ist!

Ausserdem kannst du das

Form2.Table1.IndexName := '';
vor dem

Form2.Table1.IndexName := 'VORGANG';

weglassen


Ich habe übrigens die Erfahrung gemacht, dass ein einmal zerstörter Index
nie wieder richtig wird.
Lösche mal die xg_, yg_ Dateien und lege die Indizes neu an.


Heiko

PS:
Als ich noch Support für eine Paradox-DB machen musste,
stand Indexfehler weit oben auf der Liste der Fehler ...
Jetzt benutze ich Interbase/Firebird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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