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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 23:19   #1
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию Ошибка List index out of bounds(0) при использовании запроса AdoQuery

Выводится ошибка List index out of bounds(0) при использовании запроса AdoQuery. Запрос прописывается на TitleGrid:
фрагмент кода
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 InfoFile.Kod Desc');
AdoQuery1.Parameters[0].Value:=0;
AdoQuery1.Parameters[0].Size:=1000;
AdoQuery1.Open;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 13.04.2009, 00:42   #2
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

запрос у тебя не совсем корректный, а ругается на параметры, ты им присваиваешь значения, хотя ни одного параметра в запросе нет, ты опиши, какое поле что значит, я тебе скину правильный образец
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 13.04.2009, 01:23   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от koma_grusha Посмотреть сообщение
запрос у тебя не совсем корректный, а ругается на параметры, ты им присваиваешь значения, хотя ни одного параметра в запросе нет, ты опиши, какое поле что значит, я тебе скину правильный образец
Да действительно, что то с параметрами не то, присвоение данное сделал потому что как видно из запроса CalcPath - вычисляемое поле и вылетала ошибка Параметр CalcPath не имеет значения по умолчанию...
А примерная структура над чем ведется работа описана в данной же ветке http://programmersforum.ru/showthread.php?t=45211, но наверное ты уже знаешь(увидел твой ответ когда ссылку копировал).
ошибка вылетает по этому запросу
Код:
 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');
Наверное логичный вопрос, может и глупый, как присвоить правильно значение по умолчанию...
Кстати спасибо за подсазки
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 13.04.2009, 01:40   #4
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
Радость

ты опиши каким полям хочешь присвоить значение, если из бд, то легче залезть в бд и там в свойстве поля задать defaultvalue? можно в случае Null использовать функцию ISNULL, ну например...

Код:
ISNULL(Path.Path, 0) AS CalcPath
там по умолчанию будет 0 возвращаться,

а если это внешнее какое-то значение, то используй дельфиевскую функцию для работы с переменными в строке, например..

Код:
str = Format('SELECT (''%s'') AS CalcPath FROM..', [Memo.Text])
query.SQL.Text := sql
ну типа того
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 13.04.2009, 02:59   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Все таки в AdoQuery CalcPath автоматически записывается как параметр, можно проверить если вставить в SQL
Код:
select InfoFile.Kod,Caption, NameFile, Realname,( Path.Path) as CalcPath from InfoFile, Path
where Path.Kod=InfoFile.KodPath
 order by CalcPath Desc
то в Paramers автоматически запишется параметр CalcPath.

А так как мы закрываем, очищаем, а потом снова запускаем, то приходится прописывать вручную
Код:
 AdoQuery1.Parameters[0].Value:='';
Но что удивило так это результат сортировки в сетке по полю CalcPath
Код:
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');
причем независимо ASC или Desc результат один и тот же отсортированный по непонятной логике....
если написать сортировку по полю Path.Path то сортировка выводится абсолютно правильно
Код:
AdoQuery1.SQL.Add('select InfoFile.Kod, Caption, NameFile, Realname,( Path.Path) as CalcPath from InfoFile, Path where Path.Kod=InfoFile.KodPath order by Path.Path Desc');
по ASC и Desc.
Так как в Path.Path записаны пути файлов(например: С:\elucheb\Delphi\), то видно по первой букве правильность сортировки.
Интересно, почему сортировка по CalcPath выводит неправильный результат ведь это практически копия Path.Path
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 13.04.2009, 03:07   #6
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
Вопрос

кажись нельзя сортировать по несущесвующему полю
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 13.04.2009, 03:25   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от koma_grusha Посмотреть сообщение
кажись нельзя сортировать по несущесвующему полю
Наверное это действительно так, потому что часто встречал рекомендации в этом случае создания временных таблиц. Только вот временные таблицы могут очень сильно увеличить объем базы.
Ну да ладно, нельзя так нельзя будем отображать в сетке вычисляемое поле, а сортировать по другому сопоставимому с этим полем...

Наверное, в основом по этому вопросу разобрались.
Но если есть какие то дополнения вносите...
И еще раз всем большое спасибо за обсуждение данной темы
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 13.04.2009, 11:47   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

какому еще несуществующему полю?

просто пиши так
Код:
order by 5 desc
естественно, тебе придется следить за тем, чтобы поле Path.path было 5м по порядку в запросе
soleil@mmc вне форума Ответить с цитированием
Старый 13.04.2009, 13:57   #9
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
какому еще несуществующему полю?

просто пиши так
Код:
order by 5 desc
естественно, тебе придется следить за тем, чтобы поле Path.path было 5м по порядку в запросе
Поле CalcPath вычисляемое, возможно поэтому по порядковому номеру сортировку выполнять отказывается выводит ошибку List index out of bounds...
То есть насколько я понял именно CalcPath является несуществующим полем, поэтому по такому вычисляемому полю сортировка невозможна на прямую, только по сопоставимому с ним полем Path.Path...
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 13.04.2009, 14:00   #10
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
Восклицание

про CalcPath и была речь
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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