AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einmal index setzen, dann Tabelle kaputt
Thema durchsuchen
Ansicht
Themen-Optionen

Einmal index setzen, dann Tabelle kaputt

Ein Thema von Susanne · begonnen am 6. Sep 2006 · letzter Beitrag vom 6. Sep 2006
Antwort Antwort
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#1

Einmal index setzen, dann Tabelle kaputt

  Alt 6. Sep 2006, 16:08
Datenbank: Paradox • Version: 9 • Zugriff über: BDE
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;
Susanne
  Mit Zitat antworten Zitat
Schweesspunkt

Registriert seit: 6. Sep 2006
Ort: ZARE ouest L-4394 Ehlerange
14 Beiträge
 
#2

Re: Einmal index setzen, dann Tabelle kaputt

  Alt 6. Sep 2006, 16:29
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Einmal index setzen, dann Tabelle kaputt

  Alt 6. Sep 2006, 16:44
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.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:39 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