Announcement

Collapse
No announcement yet.

ADO / Recordset / Sort

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO / Recordset / Sort

    Hi,
    <br>
    <br>ich habe ein Recordset im Speicher erstellt und habe nun folgendes Problem:
    <br>Will ich die Daten Sortieren, so muß ich erst recordset.sort := '[Feld1] ASC'; schreiben, und danach nochmal alle daten in das Recordset eingeben/lesen. Der gesetzte Filter wird anscheinend nur auf neue Dateneingaben angewandt. Und ein Requery / Resync funkrioniert nicht (nicht genügend Basistabellen Informationen).
    <br>
    <br>Wie kann ich nun die Sortierung aktivieren/ändern und das Recordset dazu veranlassen die aktuell im Recodrset gespeicherten Daten gemäß sort zu sortieren?
    <br>
    <br>Danke!
    <br>
    <br>mfg
    <br>PS

  • #2
    Hallo,

    alle <b>Sort</b>-Zuweisungen wirken sofort auf alle Datensätze. Ein Requery/Resync ist nur dann erfolgreich, wenn das RecordSet eine Verbindung (Connection) zu der Datenbank findet, von der die Daten stammen. Bei einer In-Memory-Table (d.h. man hat das RecordSet selbst zusammengebaut) kann dies jedoch nicht funktionieren, da es keine "Originaldatenbank" gibt.

    Das folgende Beispiel demonstriert den Aufruf von <B>Sort</b> und <b>Filter</b> für eine In-Memory-Table über RecordSet:
    <pre>
    { ************************************************** **************
    Typ : Hauptformular
    Autor : Andreas Kosch
    Compiler : Delphi 5.01 Enterprise
    Betriebssystem : Windows 2000 SP1
    Begonnen am : 10.03.2001
    TADODataSet als In-Memory-Tabelle
    - FieldDefs | rechter Mausklick | RecordSet erzeugen
    - Sort (Mausklick auf die Spaltenbeschriftung)
    - Filter
    - Locate
    ************************************************** ************** }

    unit StandaloneFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ComCtrls, Db, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls;

    type
    TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    ADODataSet1Name: TStringField;
    ADODataSet1eMail: TStringField;
    CheckBoxFilter: TCheckBox;
    ButtonLocate: TButton;
    ADODataSet1Vorname: TStringField;
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure CheckBoxFilterClick(Sender: TObject);
    procedure ButtonLocateClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DataSource1DataChange(Sender: TObject; Field: TField);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    {
    Beim Compilieren muss TADODataSet inaktiv sein, daher wird beim
    Programmstart die Methode CreateDataSet aufgerufen (zur Entwicklungszeit
    kann dies über die rechte Maustaste aufgerufen werden)
    }

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ADODataSet1.CreateDataSet;
    // Testdaten füllen
    ADODataSet1.AppendRecord(['Kosch', 'Andreas','[email protected]']);
    ADODataSet1.AppendRecord(['Regel', 'Wolfgang','Test']);
    ADODataSet1.AppendRecord(['Filter', 'Test','x']);
    end;

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
    with TADODataSet(Column.Field.DataSet) do
    begin
    if Sort = Column.Field.FieldName then
    Sort := Column.Field.FieldName + ' DESC'
    else
    Sort := Column.Field.FieldName;
    end;
    end;

    procedure TForm1.CheckBoxFilterClick(Sender: TObject);
    begin
    if CheckBoxFilter.Checked then
    begin
    ADODataSet1.Filtered := True;
    end
    else
    begin
    ADODataSet1.Filtered := False;
    end;
    end;

    procedure TForm1.ButtonLocateClick(Sender: TObject);
    begin
    ADODataSet1.Locate('Name', 'Regel', [loCaseInsensitive]);
    end;

    procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin
    StatusBar1.SimpleText := Format('%d Datensätze',[ADODataSet1.RecordCount]);
    end;

    end.
    </pre&gt

    Comment


    • #3
      Vielen Dank!
      <br>
      <br>mfg
      <br>P

      Comment

      Working...
      X