Autor Beitrag
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Fr 04.01.08 12:32 
Servus und ein frohes neues Jahr!

Aaalso... ich habe hier wieder mal was ganz besonderes. Seit neuestem bekomme ich bei zwei Rechnern (von etwa 1000) beim Öffnen eines ClientDatasets die Fehlermeldung 9729 - Key violation.

Interessanterweise passiert das wirklich NUR auf diesen Rechnern und wenn ich von einem anderen Rechner aus mit derselben Software (komplett inklusive Konfig-Files kopiert) auf dieselbe Datenbank zugreife, gibt es keine Probleme.

Ein Fehler mit denselben Symptomen hatte bei einem anderen Dataset dazu geführt, dass wir einen Workaround gebastelt haben. Dieselbe Fehlermeldung trat hier auch bei einem Refresh eines(!) von mehr als 30 Clientdatasets auf einem(!) Rechner auf. Mutmaßung war damals, dass das Clientdataset sich an unserem Primary Key Feld - Oracle Number(10) - verschlucken könnte. Dieser Workaround funktionierte auch einwandfrei. Aber in meinem Falle läuft er quasi schon beim ersten Open und nicht nur bei einem Refresh in die Exception.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TCsClientDataSet.DbQuery;
begin
  if (FRefreshBugPresent) then
    Close;

  try
    if not Assigned(FOnDbQuery) then begin
      Exit;
    end;
    FOnDbQuery(Self);
    if Active and HasAppServer then
      Refresh
    else
      Open;
  except
    on E: EDBClient do begin
      if (FRefreshBugPresent) then 
        // Fehler tritt also nicht nur bei Refresh auf
        raise;

      FRefreshBugPresent := True;

      // Fehler aufgetreten, versuchen wir es mit Schließen und erneutem Öffnen
      Close;
      DbQuery;
    end;
  end;
end;


Aktuell habe ich keine Ideen mehr, woran es liegen könnte. Der Fehler tritt aktuell nur auf, wenn mehr als 10 Records gefunden werden und diese angezeigt werden sollen.

Hat jemand hier eine Idee?

Vielen Dank

C.