Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi, DBGridEh

Автор: apatit
Дата сообщения: 30.10.2002 10:10
Еще раз всем привет!

Кто работает с сабжем? Объясните, пожалуйста, как по-нормальному организовать сортировку данных в сетке?

Смотрю демку, там написан обработчик события OnSortMarkingChanged. Делаю себе такой же, но при нажатии на заголовке столбца ничего не происходит. Тогда я вызываю этот обработчик в событии OnTitleBtnClick. Сортировка работает, но после нескольких нажатий на одном и том же заголовке вдруг выдается сообщение List index out of bounds (0). Что бы это значило? Может, эту сортировку нужно делать иным способом?
Автор: Fishbone
Дата сообщения: 11.11.2002 14:54
Запости фрагмент исходника - обработчик от OnTitleBtnClick - тогда найду ошибку, а так - на слух - врядли....
Точно скажу что в компонентах ошибки нет - я ими пользуюсь уже очень давно.

Удачи.
Автор: apatit
Дата сообщения: 11.11.2002 14:58
Пытался делать, как это было реализовано в демке.


Код:
procedure TfrmPerfDict.dbgPerformersTitleBtnClick(Sender: TObject;
ACol: Integer; Column: TColumnEh);
begin
try
case Column.Title.SortMarker of
smNoneEh: Column.Title.SortMarker := smDownEh;
smDownEh: Column.Title.SortMarker := smUpEh;
smUpEh: Column.Title.SortMarker := smNoneEh;
end;

dbgPerformersSortMarkingChanged(self);
except

end;
end;
Автор: Fishbone
Дата сообщения: 12.11.2002 09:14
Ну во-первых я бы объедигил все в один обработчик, а именно - в TfrmPerfDict.dbgPerformersTitleBtnClick - ибо так будет быстрее и проще - сиреч надежнее.
Во-вторых

Цитата:

:
if s <> ’’ then s := ’ ORDER BY ’ + Copy(s,1,Length(s)-2);
s := DeleteStr(s,’1’);
:

зачем искать и удалять строку ’1’ - она врядли там когда будет.

В-тртьих

Цитата:

if dbgPerformers.SortMarkedColumns[i].Title.SortMarker = smUpEh then
:
else if dbgPerformers.SortMarkedColumns[i].Title.SortMarker = smDownEh then s := s + dbgPerformers.SortMarkedColumns[i].FieldName + ’, ’ else continue;

Иначе у тебя в критерий сортировки попадают в том числе и те, у которых маркер в smNoneEh, что не верно.

В-четвертых, раз ты используешь продвинутй ДБГрид, то не мешало бы использовать продвинутые ДБ-компоненты, а именно выборку с поддержкой макросов, иными словами

SourceQuery.SQL[7] := s;

меняется на SourceQuery.MacroByName(’%m_Order’).AsString := s;

Ну и на последок - ставь для отладки ShowMessag’и -помогает...
например ShowMessage(SourceQuery.SQL.Text);

Удачи. пиши, елси что.
Автор: apatit
Дата сообщения: 12.11.2002 09:29

Цитата:

раз ты используешь продвинутй ДБГрид, то не мешало бы использовать продвинутые ДБ-компоненты, а именно выборку с поддержкой макросов, иными словами

SourceQuery.SQL[7] := s;

меняется на SourceQuery.MacroByName(’%m_Order’).AsString := s;


Речь идет о RxQuery с поддержкой макросов?
Автор: Fishbone
Дата сообщения: 12.11.2002 09:36
Ну например. Хотя тут все зависит от того, к чему обращаешься.
Ну вот, например, мой выбор

Interbase - ZeosDBO, IBObjects
MSSql,MySQL - ZeosDBO
Access .MDB - Diamond Access
Oracle - ODA
Автор: apatit
Дата сообщения: 12.11.2002 09:45
Увы, обращаюсь к Sybase SQL Anywhere 5.5

Добавлено

Цитата:

не мешало бы использовать продвинутые ДБ-компоненты, а именно выборку с поддержкой макросов


В принципе у меня было такое желание. Но на момент, когда я тестировал фичу, было не до того. А потом, когда проблему поимел, то и вообще из головы RxQuery вылетел.
Автор: Fishbone
Дата сообщения: 12.11.2002 10:27
Я думаю и для сибейза чтонть найдем.
Кстати - посмотри внимательнее на ZeosDBO - сдается мне, там есть поддержка сибейза.
Автор: apatit
Дата сообщения: 12.11.2002 10:37

Цитата:

сдается мне, там есть поддержка сибейза.


MySql, PostgreSql, Interbase, Oracle, Microsoft SQL, and IBM DB2 - информация с сайта.

Под сайбэйс есть несколько стоящих вещей. Но их нет в виде вареза с сырцами в инете. Я веду речь про NativeDB И ASADAC. Они не используют какого-либо промежуточного софта. Есть еще SQLDirect, но ему нужен CT-client. С помощью feandy мы поломали NativeDB - перестал наг-скрины выдавать, работает полнофункционально. Но увы, без сырцов .
Автор: Fishbone
Дата сообщения: 12.11.2002 11:40
Ну тут уж врядли чем смогу помочь. =(
Уж больно редкая вещь.
Автор: apatit
Дата сообщения: 12.11.2002 13:30
И я про то же . Поэтому и юзаем стандартное, а так не хочется с этим БДЕ связываться...
Автор: Fishbone
Дата сообщения: 12.11.2002 14:29
А 7ю дельфю не пробовал ?
Там DBX подправленные вроде.
Автор: apatit
Дата сообщения: 13.11.2002 10:42

Цитата:
Там DBX подправленные вроде

А шо цэ такэ ?


Добавлено
Глянь ПМ.
Автор: Fishbone
Дата сообщения: 13.11.2002 12:33
ну я так обозвал компоненты прямого (без уродца-БДЕ) доступа к базам данных.
Автор: apatit
Дата сообщения: 13.11.2002 13:13
там для Sybase Enterprise Server, для SQL Anywhere нету
Автор: Fishbone
Дата сообщения: 14.11.2002 09:23
Печально.
Автор: noisy
Дата сообщения: 25.11.2002 14:21
apatit

может еще нужно ... 

Цитата:
Смотрю демку, там написан обработчик события OnSortMarkingChanged.  
Делаю себе такой же, но при нажатии на заголовке столбца ничего не происходит.


в Опциях грида поставь (DBGridEhOptions)
dghAutoSortMarking := true
dghMultiSortMarking := true

и обработучик OnSortMarkingChanged начнет работать ...
вставляешь кусок из демки и не надо ставить Delphi 7


Автор: morpheuz
Дата сообщения: 03.06.2003 11:28
Товарисчи, может я чтото пропустил, но мне по-зарез нужно сломать NativeDB, а здесь шла речь о том, что "feandy" сломал както наг-скрины.
Помогите, прошу вас.
можно на мыло uge@pisem.net

Заранее благодарен!

Страницы: 1

Предыдущая тема: Microsoft Windows Script Host


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.