![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длинная строка в 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 указать ?