Re[11]: сортировка на клиенте
От: kig Россия  
Дата: 14.11.02 17:38
Оценка: 3 (1)
Здравствуйте chia, Вы писали:

C>Здравствуйте kig, Вы писали:


kig>>Здравствуйте chia, Вы писали:


kig>>хъ


C>>>вообще-то вопрос был, — как отсортировать данные на клиенте, а не зачем это надо...


kig>>Видел этот пост на мастаке... Ну если нельзя использовать ADO, используйте TClientDataSet.


kig>>Оба имееют возможность (ADO в режиме клиентского курсора) заниматься сортировкой рекордсета в памяти.

kig>>Можно и фильтровать там же (на клиенте).

C>я использую DOA, а эта утилита является частью большого проекта написаннного с использованием DOA. Поэтому, переход на другую схему работы с БД не резонно.


C>Похоже, если мой датасет не умеет сортировать локально (а он не умеет), то приедтся релизовывать это вручную, делая наследника от датасета или от средства отображения данных.


C>Всем спасибо за участие. Вопрос закрыт по причине создания налседника TDbGrid, с требуемыми свойствами


Хотя Вы тему уже закрыли:

Наследника TDbGrid с возможностью сортировки писать смысла нет. Хотя бы по тому — а если Вам завтра понадобится
TDBListBox с сортировкой?

Исходя из того, что Вы пользуйте стантдартные средства Д — DB-Aware контролы (TDBGrid) и упоминаете "датасет", логично
предположить, что компоненты DOA — это наследники TDataSet. Так вот, я Вам предложил не уйти от DOA для доступа к Ораклу, а использовать возможности "движков" на клиенте ("...то приедтся релизовывать это вручную, делая наследника от датасета..."), которые уже реализованы.

Вот, сравните, что требуется, чтобы устроить сортировку на клиенте с использованием TClientDataSet:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, Provider, DBClient, DB, ADODB;

type
  TForm1 = class(TForm)
    ADODataSet1: TADODataSet;
    ClientDataSet1: TClientDataSet;
    DataSetProvider1: TDataSetProvider;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    procedure DBGrid1TitleClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  ClientDataSet1.IndexFieldNames := Column.FieldName;
end;

end.


В IDE:


DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClientDataSet1;
ClientDataSet1.ProviderName := DataSetProvider1;
DataSetProvider1.DataSet := ADODataSet1;


Замените ADODataSet1: TADODataSet на, как он там называется? Типа TDOADataSet?
И пользуйте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.