Also die Fehlermeldung heißt exakt:"Im Projekt Project1.exe ist iene Exception der Klasse EDatabaseError aufgetreten. Meldung: 'Table1: Datenmenge weder im Editier- noch im Einfügemodus'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen."
Die Prozedur ist relativ lang aber egal:
procedure TForm2.BtnSortClick(Sender: TObject); //Bubblesort
var
maxPK, x, y : LongInt;
Name1, Name2, Vorname1, Vorname2, Tutor1, Tutor2, Jahrgang1, Jahrgang2 : ShortString;
Pos1, Pos2 : TBookmark;
begin
Table1.Edit;
Table1.Last;
maxPK := StrToInt(DBText1.Caption); // höchsten PK herausfinden
Table1.First;
Pos1 := Table1.GetBookmark;
for x := maxPK - 1 downto 1 do
for y := 1 to maxPK do
begin
Table1.GotoBookmark(Pos1); // Die zu vergleichenden Feldwerte herausziehen
Name1 := Table1.FieldValues['Nachname'];
Vorname1 := Table1.FieldValues['Vorname'];
Tutor1 := Table1.FieldValues['Tutor'];
Jahrgang1 := Table1.FieldValues['Klasse'];
Table1.Next;
Pos2 := Table1.GetBookmark;
Name2 := Table1.FieldValues['Nachname'];
Vorname2 := Table1.FieldValues['Vorname'];
Tutor2 := Table1.FieldValues['Tutor'];
Jahrgang2 := Table1.FieldValues['Klasse'];
if concat(Name1,Vorname1) > concat(Name2,Vorname2) then //Vergleichen
begin
Table1.GotoBookmark(Pos1); // Tauschvorgang
Table1.FieldValues['Nachname'] := Name2;
Table1.FieldValues['Vorname'] := Vorname2; //Auftreten der Exception
Table1.FieldValues['Tutor'] := Tutor2;
Table1.FieldValues['Jahrgang'] := Jahrgang2;
Table1.GotoBookmark(Pos2);
Table1.FieldValues['Nachname'] := Name1;
Table1.FieldValues['Vorname'] := Vorname1;
Table1.FieldValues['Tutor'] := Tutor1;
Table1.FieldValues['Jahrgang'] := Jahrgang1;
end;
if concat(Name1,Vorname1) = concat(Name2,Vorname2) then // für den Fall komplett gleicher Namen
if concat(Name1,Vorname1,Tutor1) > concat(Name2,Vorname2,Tutor2) then
begin
Table1.GotoBookmark(Pos1); // Tauschvorgang
Table1.FieldValues['Nachname'] := Name2;
Table1.FieldValues['Vorname'] := Vorname2;
Table1.FieldValues['Tutor'] := Tutor2;
Table1.FieldValues['Jahrgang'] := Jahrgang2;
Table1.GotoBookmark(Pos2);
Table1.FieldValues['Nachname'] := Name1;
Table1.FieldValues['Vorname'] := Vorname1;
Table1.FieldValues['Tutor'] := Tutor1;
Table1.FieldValues['Jahrgang'] := Jahrgang1;
end;
Pos1 := Pos2; // Positionstausch, damit der Algorithmus wirklich hochzählt
end;
end;
Ich hoffe mal, daraus ist alles ersichtlich.
So long
Kai