Конференция "Базы" » Длинная строка в sql запросе в BDE (TQuery) [D6, dBase, FoxPro]
 
  • _Guest_ (14.05.08 16:14) [0]
    Есть в длинной строке (AnsiString) значения из столбца таблицы (идентификаторы объектов), при использовании BDE:
    Query.SQL.Add(строка);
    Query.Open;


    просле Open возникает ошибка: или обратился по несуществующему адресу или памяти мало. Если передавать не одной строкой, а многими мелкими, все равно ошибка. При использовании ADO (TADOQuery) такой проблемы нет. Можно ли это обойти, кроме как выкатыванием идентификаторов в отдельную таблицу и далее соединением таблиц? Спасибо.
  • Виталий Панасенко © (14.05.08 16:19) [1]
    БДЕ строить не пробовал ? Памяти добавить, PrivateDir Для Session указать ?
  • _Guest_ (14.05.08 16:26) [2]

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

    Нет, спасибо попробую, я в базах чайник. Передаю информацию в другую программу, а там разработчик, видимо, не лучше меня. Пока до 1000 объектов выбирали - все нормально, а больше - ошибка. Если можно, чуть подробнее про "строить БДЕ" или ссылку, что можно почитать по этой теме. Мне глубоко забраться не удасться, у меня другая тема, а вот эту конкретную задачу хотелось бы помочь решить.
  • Виталий Панасенко(дом) (14.05.08 16:29) [3]
    ссылку - не помню, но недавно на статью натыкался.. поисковиком порыскай.. в BDEAdminе есть закладка для настройки параметров БДЕ(память, колво открытых файлов)....
  • _Guest_ (14.05.08 16:37) [4]

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


    Спасибо. А в принципе, это ограничение где-либо прописано? С самим списком SQL  все нормально: после его заполнения, я проверяю - в нем есть все что я туда передал. Значит это где-то дальше. Файл открыт всего один. Проблема именно с длинной строки запроса.
  • Loginov Dmitry © (14.05.08 22:09) [5]
    > просле Open возникает ошибка: или обратился по несуществующему
    > адресу или памяти мало. Если передавать не одной строкой,
    > а многими мелкими, все равно ошибка.


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


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


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

    По параметрам BDE и прочему - сюда: http://matrix.kladovka.net.ru/index.php?page=bdeproblems
  • _Guest_ (15.05.08 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), надо показать соответствующие выбранным объектам строки таблицы. Собственно я из своий программы идентификаторы передаю списком или строкой, а вот далше их надо обработать программой, работающей с БД. Если подскажите идею или хотя бы направление в котором копать, будем очень благодарны.
  • ЮЮ © (15.05.08 10:13) [7]
    > Сколько объектов пользователь выберет неизвестно (1�
    > идентификатор — Integer),


    Крутые у тебя пользователи — ручками 100 000 записей отмечать !!! Из миллиона, небось, выбирают? Отдавай им все — коль такие крутые, чего мелочиться
  • _Guest_ (15.05.08 11:20) [8]

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

    Я не сказал, что пользователи отмечают записи в таблице, если бы это было так, зачем мне понадобился бы запрос через TQuery. Пользователи выбирают объекты в карте: контрол+А вот тебе все объекты на активном слое. Я, конечно, могу сказать "ая-яй, вы выбрали больше полутысячи объектов, поэтому фиг вам а не выборка по базе", но работа с базой реализована, через BDE, ADO, DBISAM и по-моему, еще через что-то еще. И везде работает, а в BDE затыкается. А я по случаю оказался крайним.
 
Конференция "Базы" » Длинная строка в sql запросе в BDE (TQuery) [D6, dBase, FoxPro]
Есть новые Нет новых   [134434   +30][b:0][p:0.001]