Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ehlib сортировка по нажатию титула столбца / 16 сообщений из 16, страница 1 из 1
30.01.2020, 11:51
    #39920405
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Здравствуйте! Как в Ehlib сделать сортировка по нажатию титула столбца.
Delphi 7 база на Oracle соединяюсь компонентой ODAC.

Топики https://sql.ru/forum/101948 https://sql.ru/forum/177525 https://sql.ru/forum/115329 читал.

Стрелочка выходить нажимаю стрелка меняется, но сортировка не получается.
Думаю из-за того что у меня связь с БД через ODAC. На примерах через BDE, ADO.
...
Рейтинг: 0 / 0
30.01.2020, 12:21
    #39920435
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
А как сделал то ?
...
Рейтинг: 0 / 0
30.01.2020, 12:29
    #39920440
cptngrb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
в настройках грида включи сортировку, установи локальную сортировку, подключи memTable. вроде как с другими датасетами работать не будет
...
Рейтинг: 0 / 0
30.01.2020, 12:43
    #39920451
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
cptngrb
вроде как с другими датасетами работать не будет

Работает с другими. Нужно включить некоторые модули в uses и всё.
На счет одак - не помню, если в дефолтной поставке.
...
Рейтинг: 0 / 0
30.01.2020, 13:08
    #39920469
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Rustam Ergashev
Delphi 7 база на Oracle соединяюсь компонентой ODAC.
EhLib какой версии?
...
Рейтинг: 0 / 0
30.01.2020, 14:02
    #39920493
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
1. В OptionsEh включиль AutoSortMarking MultiSortMarking
2. В свойствах столбца включиль TitleButton
и тогдали
Кроме курсора нечего не изменился а потом
авторв настройках грида включи сортировку, установи локальную сортировку, подключи memTable. вроде как с другими датасетами работать не будет
По примеру сделал с memTable тоже результатов не дал.
...
Рейтинг: 0 / 0
30.01.2020, 14:04
    #39920494
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
EhLib 5.0 Beta Build 5.0.02 наверно вот этот. Код работал и работает, заказчик захотел сортировку по столбцу, вот и я решил сделать по простому. Но с первого раза не получилось.
...
Рейтинг: 0 / 0
30.01.2020, 14:34
    #39920507
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Найди и подключи (uses) модуль EhLibODAC.
...
Рейтинг: 0 / 0
30.01.2020, 14:56
    #39920520
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
https://www.sql.ru/forum/199636/sortirovka-v-ehlib
отсюда взял пример и восползовался
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TNaselPunkty.DBGridEh1TitleBtnClick(Sender: TObject;
  ACol: Integer; Column: TColumnEh);
begin
 if Column.Title.SortMarker=smDownEh
  then
   begin
    ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).setorderby(column.FieldName);
    if ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Active
     then ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Refresh
     else ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).open;
     Column.Title.SortMarker:=smUpEh;
   end
  else
   begin
    ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).SetOrderBy(column.FieldName+' DESC');
    if ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Active
     then ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Refresh
     else ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).open;
     Column.Title.SortMarker:=smDownEh;
   end;
end;


Сортироват получается только раз стрелка верх показывает и так остаётся, больше не реагирует на нажатие стрелки в столбце
...
Рейтинг: 0 / 0
30.01.2020, 14:59
    #39920521
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Rustam Ergashev,
тебе ведь написали, что нужно делать.
...
Рейтинг: 0 / 0
30.01.2020, 15:44
    #39920554
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Я ишу уже, я просто ответил на ране заданному вопросу
...
Рейтинг: 0 / 0
31.01.2020, 08:21
    #39920892
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Код: pascal
1.
2.
3.
4.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RzButton, DB, DBAccess, Ora, MemDS, OraTransaction, GridsEh,
  DBGridEh, OraSmart, StdCtrls, DBCtrls, Mask, DBCtrlsEh, ComObj, EhLibODAC;



подключил
EhLibODAC
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
unit EhLibODAC;

{$I EhLib.Inc}

interface

uses
  DbUtilsEh, DB, sysutils, DBGridEh, Ora, OraSmart;

implementation

uses Classes;

function ODACDataSetDriverName(DataSet: TOraDataSet): String;
begin
  Result := 'ORACLE';
end;

function DateValueToODACSQLStringProc(DataSet: TDataSet; Value: Variant): String;
begin
  Result := DateValueToDataBaseSQLString(ODACDataSetDriverName(TOraDataSet(DataSet)), Value)
end;

procedure SortDataInODACDataSet(Grid: TCustomDBGridEh; DataSet: TOraDataSet);
var
  s: String;
  i: Integer;
begin
  s := '';
  for i := 0 to Grid.SortMarkedColumns.Count - 1 do
  begin
    s := s + IntToStr(DataSet.FieldByName(Grid.SortMarkedColumns[i].FieldName).Index+1);
    if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh
      then s := s + ' DESC,'
      else s := s + ',';
  end;
  //DataSet.Sort := Copy(s, 1, Length(s) - 1);
    if DataSet.Active then begin
      //DataSet.Close;
      DataSet.SetOrderBy(Copy(s, 1, Length(s) - 1));
      DataSet.Open;
    end
    else DataSet.SetOrderBy(Copy(s, 1, Length(s) - 1));
end;

type

  TODACSQLDatasetFeaturesEh = class(TSQLDatasetFeaturesEh)
  public
    procedure ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
    procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
    constructor Create; override;
  end;

  TODACTableSQLDatasetFeaturesEh = class(TDatasetFeaturesEh)
  public
    procedure ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
    procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
  end;


//implementation

{ TODACSQLDatasetFeaturesEh }

procedure TODACSQLDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
begin
  if TDBGridEh(Sender).STFilter.Local
   then DataSet.Filter := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsLocalFilterString, nil)
  else (DataSet as TOraDataSet).FilterSQL := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsSQLWhereString, DateValueToODACSQLStringProc, True)
end;

procedure TODACSQLDatasetFeaturesEh.ApplySorting(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
begin
  if Sender is TCustomDBGridEh then
    if TCustomDBGridEh(Sender).SortLocal then
      SortDataInODACDataSet(TCustomDBGridEh(Sender), TOraDataSet(DataSet))
    else
      inherited ApplySorting(Sender, DataSet, IsReopen);
end;

constructor TODACSQLDatasetFeaturesEh.Create;
begin
  inherited Create;
  DateValueToSQLString := DateValueToODACSQLStringProc;
  SupportsLocalLike := True;
end;

{ TODACTableSQLDatasetFeaturesEh }

procedure TODACTableSQLDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
begin
  if TDBGridEh(Sender).STFilter.Local
   then DataSet.Filter := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsLocalFilterString, nil)
   else (DataSet as TOraDataSet).FilterSQL := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsSQLWhereString, DateValueToODACSQLStringProc, True)
end;

procedure TODACTableSQLDatasetFeaturesEh.ApplySorting(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
var
  i: Integer;
  sOrderFields: String;
begin
  If Sender is TCustomDBGridEh then
   With TCustomDBGridEh(Sender) do
    begin
     sOrderFields := '';
     If SortMarkedColumns.Count>0 then
      For i := 0 to SortMarkedColumns.Count - 1 do
       begin
        sOrderFields := sOrderFields + SortMarkedColumns[i].FieldName;
        If SortMarkedColumns[i].Title.SortMarker = smUpEh then
         sOrderFields := sOrderFields + ' DESC';
        sOrderFields := sOrderFields + ','
      end;
     Delete(sOrderFields,Length(sOrderFields),1);
     (DataSet as TOraTable).OrderFields := sOrderFields;
    End
end;

initialization
  RegisterDatasetFeaturesEh(TODACSQLDatasetFeaturesEh, TOraQuery);
  RegisterDatasetFeaturesEh(TODACTableSQLDatasetFeaturesEh, TOraTable);

end.

Выдаёт ошибку. Что то еще упустил.
...
Рейтинг: 0 / 0
31.01.2020, 08:24
    #39920893
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Только что заметил ощибку выдаёт но сортировку как то делает. Интересно в чем может быт проблема.
...
Рейтинг: 0 / 0
31.01.2020, 08:26
    #39920894
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Это ошибка получаю даже при прокрутке колесика мышки
...
Рейтинг: 0 / 0
31.01.2020, 11:27
    #39920937
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Rustam Ergashev,

EhLib у тебя с исходниками?
...
Рейтинг: 0 / 0
31.01.2020, 14:23
    #39921008
Rustam Ergashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ehlib сортировка по нажатию титула столбца
Vlad F, да
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ehlib сортировка по нажатию титула столбца / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]