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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2009, 17:24   #11
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от ArtInt Посмотреть сообщение
Поле CalcPath вычисляемое, возможно поэтому по порядковому номеру сортировку выполнять отказывается выводит ошибку List index out of bounds...
То есть насколько я понял именно CalcPath является несуществующим полем, поэтому по такому вычисляемому полю сортировка невозможна на прямую, только по сопоставимому с ним полем Path.Path...
объясни мне плиз, каким образом оно вычисляемое?
в запросе ты ведь просто меняешь алиас и все
Код:
(Path.Path) as CalcPath
а каким образом оно объявлено в БД?
soleil@mmc вне форума Ответить с цитированием
Старый 13.04.2009, 22:05   #12
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
объясни мне плиз, каким образом оно вычисляемое?
в запросе ты ведь просто меняешь алиас и все
Код:
(Path.Path) as CalcPath
а каким образом оно объявлено в БД?
В данном случае поле CalcPath физически просто не существует в базе данных с которой связывается AdoQuery, поэтому оно вычисляемое (в том смысле, что создается в самом запросе), а сортировка возможна только по реальным уже заранее созданным полям.
Даже если сделать через AdoQuery1.OnCalc вычисляемое поле, то все равно будет выводится ошибка только другого вида:
Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру

Но как уже было сказано выше, пока другого выхода не нахожу как производить сортировку по сопоставимому полю. Приведу пример, другого вычисляемого поля, которое у меня есть.
У меня есть реальное созданное в базе Access поле SizeFile в которое заносится размер каждого файла в байтах. Естественно что отображать его в сетке в байтах неразумно (если это не предусмотрено смыслом программы) для простого пользователя. Удобнее, чтобы оно было в килобайтах или мегабайтах или Гигабайтах.
Поэтому создается ( вычисляемое поле в Field Editor можно создать) SizeMb. Потом AdoQuery1.OnCalcFields делаем вычисления для этого поля, то есть переводим байты в мегабайты.
Так вот сортировка по полю SizeMb будет невозможна так как оно вычисляемое, сортируем по полю SizeFile и все будет правильно.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 14.04.2009, 12:19   #13
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

во-первых, а что мешает делать пересчет в самой квере?
Код:
select
....,
SizeFile/1024/1024 SizeMb,
SizeFile/1024/1024/1024 SizeGb,
...
from ...
и эттта
во-вторых, а с чего это оно не существет, если ты его получаешь из реального поля в БД Path.Path?
с каких пор прописка алиаса на существующее поле делает это поле вычисляемым?
Ты либо себя запутываешь, либо меня - так что все-таки ответь на вопрос "а каким образом оно(поле Path в таблице Path) объявлено в БД?"

Последний раз редактировалось soleil@mmc; 14.04.2009 в 12:42.
soleil@mmc вне форума Ответить с цитированием
Старый 14.04.2009, 19:42   #14
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
во-первых, а что мешает делать пересчет в самой квере?
Теперь мне ничего не мешает прописывать расчеты и другие вычисления в самой квере, но раньше действительно из-за определенной недоработки программы приходилось использовать OnCalc.
Возможно по понятию поля SizeMb и CalcPath не являются "вычисляемыми", (если вычисления проходят в квере), да и FieldKind=fkData по умолчанию... Но смущает то, что происходит требование параметра (в ошибке), и даже занесение сразу Parametrs этих полей. А также не выполнение сортировки,например для CalcPath, хотя в действительности там нет вычислений и это просто "присваивание".
Не силен в терминологии, но термин алиас(alias) вроде бы ко всей базе данных применяется, а не к отдельным таблицам из этой базы, хотя какая разница...
В целом, сделал Access базу с тремя таблицу и в Дельфи 7 прописал методы сортировки, которые работают и неработают.
Хоть задачу лично для себя я решил, но вопрос: Есть ли возможность сортировать напрямую по CalcPath? можете просмотреть, если что-то получится выкладывайте обновленный исходник.
Спорить не буду плохое владение у меня базами данных и терминологией наверное тоже, поэтому трудно бывает объяснить суть вопроса.......
Вложения
Тип файла: rar пример.rar (30.8 Кб, 6 просмотров)
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 15.04.2009, 18:35   #15
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от ArtInt Посмотреть сообщение
Но смущает то, что происходит требование параметра (в ошибке), и даже занесение сразу Parametrs этих полей.
ты про этот параметр?
Код:
AdoQuery1.Parameters[0].Value:=0;
AdoQuery1.Parameters[0].Size:=1000;
ну так ты его сам зачем-то указываешь, хотя в самом запросе никакого намека на параметр нет
какие поля ты заносишь в параметерс я не пою, но если уж ты пишешь запрос, то должен хотя бы понимать все его части
и, конечно же, должен понимать кто такие эти параметерс и для чего их применяют
Цитата:
Сообщение от ArtInt Посмотреть сообщение
А также не выполнение сортировки,например для CalcPath, хотя в действительности там нет вычислений и это просто "присваивание".
Не силен в терминологии, но термин алиас(alias) вроде бы ко всей базе данных применяется, а не к отдельным таблицам из этой базы, хотя какая разница...
честно говоря, нет времени смотреть сурсы - проще было бы если бы ты хотя бы в форуме полно расписывал сами таблицы
запрос, который в первом посте этой темы не должен иметь никаких ошибок - только убери оттуда вот это
Код:
AdoQuery1.Parameters[0].Value:=0;
AdoQuery1.Parameters[0].Size:=1000;
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Index List ofbounds (16) Johnson Общие вопросы Delphi 4 17.07.2008 19:54
При запуске ComboBoxEx пишет List index out of bounds -1. dx+ Общие вопросы Delphi 6 12.06.2008 22:32
ошибка при закрытии adoquery Банзай БД в Delphi 7 03.09.2007 19:31
Ошибка при выполнении запроса Elena БД в Delphi 2 25.05.2007 16:19