/ / Delphi 2006 TClientDataSet - Indexproblem - Delphi, Indexierung, Tclientdataset

Delphi 2006 TClientDataSet Index Problem - Delphi, Indizierung, tclientdataset

Ich benutze ein ClientDataSet mit einem DataSetProvider verknüpft mit einem lokalen DataSet. Wenn ich die Daten im DataSet bearbeiten möchte, öffne ich das ClientDataSet und füge einige Indizes hinzu. Nachdem ich die Daten bearbeitet habe, schließe ich das ClientDataSet. Alles funktioniert gut, außer dass, wenn ich ClientDataSet erneut öffne und einen Index auswähle, eine Ausnahme mit der Nachricht ausgelöst wird "index "xxx" not found". Was mache ich falsch?

Hier ist der Code zum Öffnen von ClientDataSet:

 Application.CreateForm (TfrmCardDep, frmCardDep);
try
with DM.tblCCardDep do
begin
IndexDefs.Clear;
if not Active then Open;
AddIndex ("iDepID", "DepID", []);
AddIndex ("iDep", "Dep", []);
IndexName := "iDep";
FieldByName("Dep").DisplayLabel := "Departament";
FieldByName("Dep").DisplayWidth := 50;
FieldByName("DepID").Visible := false;
end;

frmCardDep.ShowModal;
finally
if DM.tblCCardDep.Active then DM.tblCCardDep.Close;
frmCardDep.Free; frmCardDep := nil;
end;

DM.tblCCardDep ist das ClientDataset

Antworten:

2 für die Antwort № 1

Nach der ersten Runde hast du IndexName setzen auf die ClientDataSet. Wann IndexDefs verworfen wird, wird der Index ungültig. klar IndexName Bevor Sie den Datensatz erneut öffnen, ändern Sie den zu lesenden Code:

 [..]
try
with DM.tblCCardDep do
begin
IndexDefs.Clear;
IndexName := "";      // <- here
if not Active then Open;
[..]

Oder verwenden Sie so etwas: [..]

 try
with DM.tblCCardDep do
begin
if not Active then Open;
if IndexDefs.Count = 0 then
begin
AddIndex ("iDepID", "DepID", []);
AddIndex ("iDep", "Dep", []);
IndexDefs.Update;             // Update IndexDefs
IndexName := "iDep";
end;
FieldByName("Dep").DisplayLabel := "Departament";
[..]

0 für die Antwort № 2

Client-Dataset-Indizes werden immer dann gelöscht, wennSie schließen das Client-Dataset. "Persistenter Index" im Kontext des Client-Datasets bedeutet, dass es im Speicher bleibt, solange das Client-Dataset geöffnet ist:

Grundlegendes zu ClientDataSet-Indizes

TClientDataset-Indizes: temporär oder persistent?