Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2009, 00:41   #1
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию Возможна ли сортировка вычисляемых полей в DBGrid, если используется ADOTable

Можно ли отсортировать вычисляемое поле(по возрастанию или убыванию) при клике на Title в DBGrid, если использовать AdoTable.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 11.04.2009, 10:16   #2
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Как заставить DBGrid сортировать данные по щелчку на заголовке столбца
S@fer вне форума Ответить с цитированием
Старый 11.04.2009, 12:54   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Насколько видно из приведенного (во всяком случае как я понял) там использутся RxQuery, а также требуются дополнительные модули, также по-моему сточка в коде запрещает сортировку вычисляемых полей и Lookup:
Код:
if not Assigned(Param) or Field.Calculated or Field.Lookup then
    Exit;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 11.04.2009, 13:00   #4
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

там говориться
Цитата:
Работать не бyдет (без модyлей), но в качестве идеи может быть полезен
Еще как вариант могу предложить, поверх титлов повесить кнопки. при нажатии которых будет выполнятся запрос из query, в котором и будет сделана сортировка.
S@fer вне форума Ответить с цитированием
Старый 11.04.2009, 14:07   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

В том то и проблема что если создаю вычисляемое поле в AdoQuery CalcPath, потом на Title DBGrid прописываю примерно так:
Код:
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('select * from InfoFile order by CalcPath ASC');
AdoQuery1.Open;
При выполнении выдает ошибку: Параметр CalcPath не имеет значения по умолчанию.
В целом вопрос такой можно ли как то отсортировать вычисляемое поле?
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 11.04.2009, 14:18   #6
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Тогда посмотри это
SQL - сортировка вычисляемого поля
Цитата:
'select * from InfoFile order by CalcPath ASC'
немного не правильно. Нужно указывать, что-то типа
'select pole1,pole2, (pole3+pole4) AS CalcPath from InfoFile order by CalcPath ASC'
S@fer вне форума Ответить с цитированием
Старый 11.04.2009, 15:11   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Вроде бы должно сработать, только у меня вычисляемое поле ссылается на другую таблицу, то есть в OnCalcField прописано:
Код:
AdoTablePath.Active:=true;
    if AdotablePath.Locate('Kod',AdoQuery1.fieldbyname('KodPath').AsString,[loCaseInsensitive, loPartialKey])=true then
    AdoQuery1.Fieldbyname('CalcPath').AsString:=AdoTablePath.Fieldbyname('Path').AsString;
Поэтому запрос будет сложноватый, примерно такой наверное:
Код:
select caption, NameFile, Realname,
(Case 
when Path.Kod=InfoFile.KodPath then InfoFile.CalcPath=Path.Path
end)
 as CalcPath from InfoFile,Path
 order by CalcPath ASC
где то я в условии вычисления ошибся,но если подправить условие вычисления поля, то наверное все будет работать правильно.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 11.04.2009, 17:56   #8
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Создал такой запрос, но сортировки не происходит и ошибки не выводит,
возможно дело в том, что вычисление происходит по Memo полю (Path.Path)

Код:
    AdoQuery1.Close;
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add('select InfoFile.Kod,Caption, NameFile, Realname,( Path.Path) as CalcPath from InfoFile, Path where Path.Kod=InfoFile.KodPath order by CalcPath ASC');
    AdoQuery1.Parameters[0].Value:=0;
    AdoQuery1.Parameters[0].Size:=1000;
    AdoQuery1.Open;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 11.04.2009, 22:52   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

интересно узнать:
1) какой же расчет происходит по этому полю? ты же его выводишь впрямую - только алиас ему меняешь и все
2) где в этом запросе параметр?
3) а может пересмотреть структуру таблиц и не изобретать велосипеда для хранения чисел в мемо полях? ибо для поиска/сортировки в блобах обычно используют дополнительный функционал в виде пакетов(оракл)/юдф(ибазе/файрберд)
soleil@mmc вне форума Ответить с цитированием
Старый 12.04.2009, 15:38   #10
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
интересно узнать:
1) какой же расчет происходит по этому полю? ты же его выводишь впрямую - только алиас ему меняешь и все
2) где в этом запросе параметр?
3) а может пересмотреть структуру таблиц и не изобретать велосипеда для хранения чисел в мемо полях? ибо для поиска/сортировки в блобах обычно используют дополнительный функционал в виде пакетов(оракл)/юдф(ибазе/файрберд)
По отрывкам из кода трудно понять назначение программы. Поэтому, постараюсь вкратце описать для чего и почему создается данная программа.
Программа - это база данных электронных книг и справок (ссылок на месторасположение) и быстрый поиск необходимой информации.
Актуальность создания программы: Во-первых набирается очень много различной информации (будь то эл. книги или справоч. материал) и поиск того где же лежит необходимая тебе литература, занимает иногда даже больше времени чем ее прочтение. Создавать ярлыки???(тогда их будет слишком много, а если делать еще примечание...) Заполнить простой word, excel, или txt документ вручную??? тогда может даже всей жизни не хватить.
Поэтому как выход создание автозаполняемой базы данных. Сначала для удобства каждый материал по мере возможности (хотя необязательно) размещается в отдельную папку где в названии автор и название книги.
Потом при запуске программы методом Drag&Drop перенос директории из проводника в программу. При этом происходит занесение в базу данных такой информации как: Путь файла, размер, имя файла. Также происходит сверка на существование данных файлов в базе(если есть то отображаются на добавление, но не отмечаются галкой и выделяются другим цветом строки). Просмотрев и отметив какую инфу внести нажимается на добавление.
Для сетки есть контекстное меню где можно открыть файл или открыть директорию, отметить данный файл как прочитанный, новый и т.д.
Основных таблиц всего три:
DateDobav( kod. DateDobav) - дата добавления файла.
InfoFile(Caption, NameFile, Realname и т.д.) - в целом уникальная не повторяющаяся информация о файлах.
Path (Kod, Path) - существующие пути.
Есть также дополнительная таблица Shablon - для хранения расширений файлов которые могут добавляться в базу и т.п.
Как мне показалось здесь явно присутствует связь многие ко многим.
То есть Дата может быть одинаковой и Путь может быть одинаковым по отношению к таблице InfoFile. Поэтому в InfoFile содержатся поля KodDate и KodPath типа longInt. В которые заносится инфа из Date.Kod и Path.Kod. Делается для того, чтобы избавиться от избыточности.
Вычисляемое поле CalcPath, делается для того, чтобы отображать его в
сетке и зависит оно от индекса в KodPath.
Да, конечно, может в MSSQL или Oracle СУБД реализовать такие отношение полегче, но минус в предварительной установке и размере.
Поэтому как вариант Delphi+Access для созданной локальной и не требующей предварительной установки Субд.

Как только доделаю программу, выставлю в ветке Обсуждение программ.
Для того чтобы было понятнее как примерно выглядит программа выкладываю скриншоты первой черновой рабочей программы,
правда многое придется изменить. А пока в меню Файл возможность сохранять параметры Фильтра, а также загружать. В меню Отчет способность выводить информацию о файле в Word или HTML.
В конечной программе параметры фильтрации будут расширены.

Надеюсь удалось объяснить почему использую вычисляемое поле, для чего оно и почему Access, а также для чего делаю программу... Любым замечаниям и дополнениям, критике буду только рад.
Это было очень краткое объяснение принципа создания данной данной программы, многое осталось за кадром....



Memo используется для Path
Вложения
Тип файла: rar скриншоты черновой программы.rar (41.9 Кб, 25 просмотров)
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ширина полей DBGrid XATAB БД в Delphi 7 28.02.2009 10:54
Сохранение значений вычисляемых полей gimbomba БД в Delphi 6 21.02.2009 19:19
Типы полей ADOTable AnnNet БД в Delphi 2 21.07.2008 16:40
Сортировка после просчета вычисляемых полей azat БД в Delphi 4 19.01.2008 21:09
Возможна сортировка или нет? Constellation БД в Delphi 44 17.11.2007 11:32