Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.30;
Скачать: CL | DM;

Вниз

Длинная строка в sql запросе в BDE (TQuery)   Найти похожие ветки 

 
_Guest_   (2008-05-14 16:14) [0]

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

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


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

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


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


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

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


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

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


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


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


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


 
Loginov Dmitry ©   (2008-05-14 22:09) [5]

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


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


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


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

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


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


> 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), надо показать соответствующие выбранным объектам строки таблицы. Собственно я из своий программы идентификаторы передаю списком или строкой, а вот далше их надо обработать программой, работающей с БД. Если подскажите идею или хотя бы направление в котором копать, будем очень благодарны.


 
ЮЮ ©   (2008-05-15 10:13) [7]

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


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


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


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

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



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

Текущий архив: 2008.11.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
15-1222511662
Игорь Шевченко
2008-09-27 14:34
2008.11.30
Предлагается звукотехника


4-1201263223
BBCHa
2008-01-25 15:13
2008.11.30
Com-порт и CLX


2-1224589591
SkyN
2008-10-21 15:46
2008.11.30
как правильно освобождать память от динамического массива?


11-1195733927
Юрий_К
2007-11-22 15:18
2008.11.30
Про TrayIcon


3-1210660109
Михаил
2008-05-13 10:28
2008.11.30
Диапазон типа DATE у FB2.03