Здравствуйте 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?
И пользуйте.