Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длинная строка в sql запросе в BDE (TQuery) [D6, dBase, FoxPro]


_Guest_ ©   (2008-05-14 16:14:00) 

Есть в длинной строке (AnsiString) значения из столбца таблицы (идентификаторы объектов), при использовании BDE:
Query.SQL.Add(строка);
Query.Open;

просле Open возникает ошибка: или обратился по несуществующему адресу или памяти мало. Если передавать не одной строкой, а многими мелкими, все равно ошибка. При использовании ADO (TADOQuery) такой проблемы нет. Можно ли это обойти, кроме как выкатыванием идентификаторов в отдельную таблицу и далее соединением таблиц? Спасибо.


_Guest_   (2008-05-15 11:20:00) [1]


> ЮЮ ©   (15.05.08 10:13) [7]
> > Сколько объектов пользователь выберет неизвестно (1ﭼ?
> > идентификатор — Integer), Крутые у тебя пользователи —
> ручками 100 000 записей отмечать !!! Из миллиона, небось,
>  выбирают? Отдавай им все — коль такие крутые, чего мелочиться

Я не сказал, что пользователи отмечают записи в таблице, если бы это было так, зачем мне понадобился бы запрос через TQuery. Пользователи выбирают объекты в карте: контрол+А вот тебе все объекты на активном слое. Я, конечно, могу сказать "ая-яй, вы выбрали больше полутысячи объектов, поэтому фиг вам а не выборка по базе", но работа с базой реализована, через BDE, ADO, DBISAM и по-моему, еще через что-то еще. И везде работает, а в BDE затыкается. А я по случаю оказался крайним.


ЮЮ   (2008-05-15 10:13:00) [2]

> Сколько объектов пользователь выберет неизвестно (1�
> идентификатор — Integer),


Крутые у тебя пользователи — ручками 100 000 записей отмечать !!! Из миллиона, небось, выбирают? Отдавай им все — коль такие крутые, чего мелочиться


_Guest_   (2008-05-15 10:04:00) [3]


> Loginov Dmitry ©   (14.05.08 22:09) [5]
Страшные вещи рассказываешь! Оно так и говорит "памяти мало"?

Говорит: Access violation at address 4C6217B3 in module 'idsql32.dll'
Если передавать не одной строкой а несколькими, сообщение будет то же, только адрес другой. В каком то еще варианте (мы тут на пару экспериментируем) получили что-то вроде 'out of memory', я сейчас точно не помню, а повторить не удается, может потому что изменили параметры BDE так, как описано в приведенной Вами статье. Т.е. что то улучшилось, но ошибка все равно возникает.

> В BDE достаточно длинные запросы поддерживаются (то-ли 2кб,
>  то-ли 4кб). Если не влазит, меняй логику.

Length(строка)=32874
А с заменой логики, я что-то ничего придумать не могу, кроме описанного в начале использования еще одной таблицы. Есть объекты, у каждого уникальный идентификатор и запись в таблице. Сколько объектов пользователь выберет неизвестно (1..100000 идентификатор - Integer), надо показать соответствующие выбранным объектам строки таблицы. Собственно я из своий программы идентификаторы передаю списком или строкой, а вот далше их надо обработать программой, работающей с БД. Если подскажите идею или хотя бы направление в котором копать, будем очень благодарны.


Loginov Dmitry   (2008-05-14 22:09:00) [4]

> просле Open возникает ошибка: или обратился по несуществующему
> адресу или памяти мало. Если передавать не одной строкой,
> а многими мелкими, все равно ошибка.


Страшные вещи рассказываешь! Оно так и говорит "памяти мало"?


> Проблема именно с длинной строки запроса.


В BDE достаточно длинные запросы поддерживаются (то-ли 2кб, то-ли 4кб). Если не влазит, меняй логику.

По параметрам BDE и прочему - сюда: http://matrix.kladovka.net.ru/index.php?page=bdeproblems


_Guest_   (2008-05-14 16:37:00) [5]


> Виталий Панасенко


Спасибо. А в принципе, это ограничение где-либо прописано? С самим списком SQL  все нормально: после его заполнения, я проверяю - в нем есть все что я туда передал. Значит это где-то дальше. Файл открыт всего один. Проблема именно с длинной строки запроса.


Виталий Панасенко(дом)   (2008-05-14 16:29:00) [6]

ссылку - не помню, но недавно на статью натыкался.. поисковиком порыскай.. в BDEAdminе есть закладка для настройки параметров БДЕ(память, колво открытых файлов)....


_Guest_   (2008-05-14 16:26:00) [7]


> Виталий Панасенко ©   (14.05.08 16:19) [1]
> БДЕ строить не пробовал ? Памяти добавить, PrivateDir Для
> Session указать ?

Нет, спасибо попробую, я в базах чайник. Передаю информацию в другую программу, а там разработчик, видимо, не лучше меня. Пока до 1000 объектов выбирали - все нормально, а больше - ошибка. Если можно, чуть подробнее про "строить БДЕ" или ссылку, что можно почитать по этой теме. Мне глубоко забраться не удасться, у меня другая тема, а вот эту конкретную задачу хотелось бы помочь решить.


Виталий Панасенко   (2008-05-14 16:19:00) [8]

БДЕ строить не пробовал ? Памяти добавить, PrivateDir Для Session указать ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо