Es ist sehr sehr selten nötig, aus unterschiedlichen Zeilen einer Datenmenge Informationen zu extrahieren. Fast immer interessiert dich immer nur eine Zeile (das ist der 'aktuelle Datensatz'). Wieso sollte man also in einer solchen Klasse die 'Matrixdarstellung' bereitstellen?
Im Übrigen kannst Du diese Zeile direkt durch setzen der Eigenschaft 'RecNo' anspringen, sodaß damit fast deinem Wunsch entsprochen wird. Du benötigt also kein First/Next. Trotzdem wirst Du nur selten finden, das mit einer For-Schleife durch eine Datenmenge iteriert wird.
Ob man nun
Delphi-Quellcode:
For i:=1 to Dataset.RecordCount do
Work (Dataset.Record[i,'Fieldname']) // <<--- fiktive Eigenschaft
oder
Delphi-Quellcode:
Dataset.first;
While not Dataset.Eof do Begin
Work (Dataset['Fieldname']);
Dataset.Next;
End;
schreibe, ist doch egal (bis auf die Anzahl der Codezeilen).
Wenn Du partout als Matrix auf eine Datenmenge zugreifen willst, erstelle Dir eine eigene Klassenwrapper, der diese Funktionalität bereitstellt:
Delphi-Quellcode:
Type
TDatasetAsMatrix = Class (TDataset)
private
function GetAsMatrix(RecordNumber: Integer; Fieldname: String): Variant;
procedure SetAsMatrix(RecordNumber: Integer; Fieldname: String;
const Value: Variant);
Public
Property AsMatrix [RecordNumber : Integer; Fieldname : String] : Variant Read GetAsMatrix Write SetAsMatrix;
End;
function TDatasetAsMatrix.GetAsMatrix(RecordNumber: Integer; Fieldname: String): Variant;
begin
Self.RecNo := RecordNumber;
Result := Self[Fieldname];
end;
procedure TDatasetAsMatrix.SetAsMatrix(RecordNumber: Integer; Fieldname: String; const Value: Variant);
begin
Self.RecNo := RecordNumber;
Self[Fieldname] := Value;
end;
// Zugriff geht über Typecast:
Begin
ShowMessage (TDatasetAsMatrix(MyQuery).AsMatrix[5,'MyFieldName']);
End;
Ob Dir das etwas bringt, sei mal dahingestellt.