Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: TDataSet, TQuery -- wie auf Zellen zugreifen?

  Alt 29. Jan 2009, 08:09
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat