-
Есть в длинной строке (AnsiString) значения из столбца таблицы (идентификаторы объектов), при использовании BDE: Query.SQL.Add(строка);
Query.Open;
просле Open возникает ошибка: или обратился по несуществующему адресу или памяти мало. Если передавать не одной строкой, а многими мелкими, все равно ошибка. При использовании ADO (TADOQuery) такой проблемы нет. Можно ли это обойти, кроме как выкатыванием идентификаторов в отдельную таблицу и далее соединением таблиц? Спасибо.
-
БДЕ строить не пробовал ? Памяти добавить, PrivateDir Для Session указать ?
-
> Виталий Панасенко © (14.05.08 16:19) [1] > БДЕ строить не пробовал ? Памяти добавить, PrivateDir Для > Session указать ?
Нет, спасибо попробую, я в базах чайник. Передаю информацию в другую программу, а там разработчик, видимо, не лучше меня. Пока до 1000 объектов выбирали - все нормально, а больше - ошибка. Если можно, чуть подробнее про "строить БДЕ" или ссылку, что можно почитать по этой теме. Мне глубоко забраться не удасться, у меня другая тема, а вот эту конкретную задачу хотелось бы помочь решить.
-
ссылку - не помню, но недавно на статью натыкался.. поисковиком порыскай.. в BDEAdminе есть закладка для настройки параметров БДЕ(память, колво открытых файлов)....
-
> Виталий Панасенко
Спасибо. А в принципе, это ограничение где-либо прописано? С самим списком SQL все нормально: после его заполнения, я проверяю - в нем есть все что я туда передал. Значит это где-то дальше. Файл открыт всего один. Проблема именно с длинной строки запроса.
-
> просле Open возникает ошибка: или обратился по несуществующему > адресу или памяти мало. Если передавать не одной строкой, > а многими мелкими, все равно ошибка.
Страшные вещи рассказываешь! Оно так и говорит "памяти мало"? > Проблема именно с длинной строки запроса.
В BDE достаточно длинные запросы поддерживаются (то-ли 2кб, то-ли 4кб). Если не влазит, меняй логику. По параметрам BDE и прочему - сюда: http://matrix.kladovka.net.ru/index.php?page=bdeproblems
-
> 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), надо показать соответствующие выбранным объектам строки таблицы. Собственно я из своий программы идентификаторы передаю списком или строкой, а вот далше их надо обработать программой, работающей с БД. Если подскажите идею или хотя бы направление в котором копать, будем очень благодарны.
-
> Сколько объектов пользователь выберет неизвестно (1 > идентификатор Integer),
Крутые у тебя пользователи ручками 100 000 записей отмечать !!! Из миллиона, небось, выбирают? Отдавай им все коль такие крутые, чего мелочиться
-
> ЮЮ © (15.05.08 10:13) [7] > > Сколько объектов пользователь выберет неизвестно (1ﭼ? > > идентификатор — Integer), Крутые у тебя пользователи — > ручками 100 000 записей отмечать !!! Из миллиона, небось, > выбирают? Отдавай им все — коль такие крутые, чего мелочиться
Я не сказал, что пользователи отмечают записи в таблице, если бы это было так, зачем мне понадобился бы запрос через TQuery. Пользователи выбирают объекты в карте: контрол+А вот тебе все объекты на активном слое. Я, конечно, могу сказать "ая-яй, вы выбрали больше полутысячи объектов, поэтому фиг вам а не выборка по базе", но работа с базой реализована, через BDE, ADO, DBISAM и по-моему, еще через что-то еще. И везде работает, а в BDE затыкается. А я по случаю оказался крайним.
|