Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

Translate Error. Value out of bounds.   Найти похожие ветки 

 
koks   (2003-12-15 11:25) [0]

Уважаемые мастера - подскажите. Вот
SQL-запрос (компанент TQuery).

SELECT MS.ID AS MASID, MS.DATA AS ADATE, MS.COMMENTS AS COMMENTS, SUM(MD.KHT) AS PSTONES, SUM(MD.MSK) AS PWEIGHT,
SUM(MD.SYMMA) AS PPRICE, SUM(MD.MSKS) AS RWEIGHT,
SUM(MD.SYMMAS) AS RPRICE
FROM MDATA MD, MASSIVES MS
WHERE (MD.MASID = MS.ID)
GROUP BY MS.ID, MS.DATA, MS.COMMENTS
ORDER BY MS.ID

Все работает хорошо до тех пор пока он возвращает хоть оду запись. Если его применить к пустым таблицам - возникает указанная ошибка - подскажите в чем секрет...

Заранее спасибо.


 
Плохиш_   (2003-12-15 11:34) [1]

>koks (15.12.03 11:25)

Ты пытаешься использовать данные из пустого набора данных
Ошибка в 17й строке


 
Sandman25   (2003-12-15 11:34) [2]

Есть обращения к Fields[...] или FieldByName(...)?


 
koks   (2003-12-15 12:25) [3]

Про 17-ю строку не понял...

Переношу Copy-Paste данный запрос в SQL-explorer - запускаю там - то же самое... (в случае пучтых таблиц)

FieldByName() и Fields[] не использую...


 
koks   (2003-12-15 14:24) [4]

нече не понимаю....


 
sniknik   (2003-12-15 14:49) [5]

проверь одно дикое предположение
SELECT MS.ID AS MASID, MS.DATA ....
замени на чтонибудь другое, например на Field1. (???)


 
koks   (2003-12-15 16:04) [6]

SELECT MS.ID AS FIELD1, MS.DATA AS ADATE, MS.COMMENTS AS COMMENTS, SUM(MD.KHT) AS PSTONES, SUM(MD.MSK) AS PWEIGHT,
SUM(MD.SYMMA) AS PPRICE, SUM(MD.MSKS) AS RWEIGHT,
SUM(MD.SYMMAS) AS RPRICE
FROM MDATA MD, MASSIVES MS
WHERE (MD.MASID = MS.ID)
GROUP BY MS.ID, MS.DATA, MS.COMMENTS
ORDER BY MS.ID

То же самое...

Вот что я еще заметил - может это натолкнет на мысль.
1 меня QuantumGrid45 -> DataSource1 -> Query1. (последний - с злополучной строкой).

Если разорвать связь, т.е. сделать DataSource1.DataSet := nil; (время дизайна), то опять же во время дизайна запрос открывается без ошибок.

то же самое если не разрывать связь, но сделать DataSource1.Enable := false; (в дизайне). В рантайме все равно выводит ошибку....

Изменил алгоритм -

DataSource1.Enabled := false;
if Query1.Active then Close;
Query1.Open;
if Query1.RecordCount > 0 then DataSource1.Enabled := true;

опять ошибка - запустил трассировку - при пустом запросе Query1.RecordCout выдает 1 !!!!

Совсем запутался...

Не, ну я вообще-то грешил бы на QG4. Но вот что происходит - если скопировать запрос в SQL Explorer и ВСЕ остальное закрыть, включая среду, программу, даже TotalCommander ;) и запустить запрос - Translate Error...

Ниче не понимаю


 
Sandman25   (2003-12-15 16:20) [7]

[6] koks (15.12.03 16:04)

Такое ощущение, что Вы пытаетесь сделать SUM по текстовому полю.


 
sniknik   (2003-12-15 16:36) [8]

> Ниче не понимаю
аналогично ...
я то на основе
> Переношу Copy-Paste данный запрос в SQL-explorer - запускаю там - то же самое... (в случае пучтых таблиц)
решил, что дело в запросе (поле и алиас поля одноименные дают ошибку)
а тут оказывается что
> Если разорвать связь
то работает, а SQL-explorer значится глючит, причем с одноименной ошибкой как и у тебя но когда связь установлена. так?
бред какойто. либо в SQL-explorer-е всетаки запрос отрабатывает а ошибка тогда в 17-й строке.


 
sniknik   (2003-12-15 16:39) [9]

> Не, ну я вообще-то грешил бы на QG4. Но вот что происходит - если скопировать запрос в SQL Explorer и ВСЕ остальное закрыть, включая среду, программу, даже TotalCommander ;) и запустить запрос - Translate Error...
вышли таблички. если данные не секретные конечно. (причем оба варианта дающие полный и пустой запрос, могу конечно сам таблички обнулить но для чистоты эксперимента...)


 
Sandman25   (2003-12-15 16:40) [10]

[8] sniknik © (15.12.03 16:36)

+ либо в SQL Explorer идет работа с другой БД...


 
kaif   (2003-12-15 16:47) [11]

Я думаю, что ошибка вообще с запросом никак не связана. Такая ошибка возникает, когда происходит обращение за пределы индекса списка или массива. Скорее всего у тебя висит какой-нибудь обработчик, который после открытия запроса что-то должен делать, например, обращаться к массиву или TList. Может, к массиву закладок (bookmarks). И образуется индекс, выходящий за пределы длины массива.
Например. такую ошибку вызовет такой код:

var
L: TList;
P: Pointer;
begin
L := TList.Create;
try
P := L[1];
finally
L.Free;
end;
end;


И SQL не нужен.
Запрос здесь вообще не причем. Запрос правильный. Ищи в другом месте. Какие еще процедуры у тебя работают после открытия запроса и как они зависят от кол-ва записей в наборе?


 
kaif   (2003-12-15 16:50) [12]

Более точное сообщение Index out of bounds. У тебя Value out of bounds. Возможно, я неправ.


 
koks   (2003-12-16 09:23) [13]

Друзья, списибо за отклики..
sniknik - высылаю таблички.

kaif - но ведь ошибка выдается в SQL-xplorere когда все закрыто.... База локальная.

В том-то все и дело, когда таблички наполнены - все работает на ура. Поэтому запрос правильный. А как только таблички пусты - ошибка.... а индексы не используются вообще. приведенный Kaif-ом код действительно выдает ошибку, но общую, а не DBEngineError..


 
sniknik   (2003-12-16 12:06) [14]

у меня ошибки нет, что на пустых что на полных.
это если через ADO - Jet, также BDE - ODBC - Microsoft dBase driver, VFP driver (ADO/BDE)

а вот в BDE Standart dBase/Foxpro (и только!!!) действительно возникает, причем зависит от поля MS.DATA в группировке, если убрать его из групировки проходит нормально, также если убрать суммы и/или присоеденение второй таблици. т.е. если нет присоедененной то оно в группе не мешает (если убрать суммы, а они из другой таблици, присоеденения тоже нет).
в общем вот такая вот гремучая смесь BDE + Дата в группе + присоеденение таблици, дает этот глюк.
довольно странно, надо будет еще попробовать на других таблицах (но это вечером), посмотреть что получится.

решить уже можно, сменой драйвера/доступа (ну попробуй например тоже самое и там же, с использованием ODBC алиаса dBASE Files, наверняка ведь есть), если необходимо оставить то что есть то нужно дальше разбиратся.


 
koks   (2003-12-17 15:55) [15]

2 sniknik - огромное спасибо....
Короче понятно шо гремучая смесь. Я вышел из положения так - убрал присоединение и использую lookup-поля (из табл. massives на masid). Все работает....



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
3-37511
пустойчайник
2003-12-16 12:25
2004.01.13
Странное поведение программы (DBGrid)


1-37757
Kuku
2003-12-30 00:38
2004.01.13
case of не работает для строк


7-37958
Артем
2003-10-30 11:41
2004.01.13
Работа с регистром


1-37604
kullibin
2003-12-31 11:08
2004.01.13
Слежка


6-37821
inc-vizitor
2003-10-22 22:39
2004.01.13
mailslots, названия каналов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский