Share(File) по ODBC

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Geydar
Посетитель
Сообщения: 32
Зарегистрирован: 15 Март 2006, 19:47
Откуда: Москва

Share(File) по ODBC

Сообщение Geydar »

Cla 6 не ABC, Firebird 2.1 через ODBC.

В Firebird 2.1 появились таблички мониторинга базы - коннекты, запросы и пр.
И что я увидел (о, ужас) !!!
Стандартная функция SHARE (File) (или OPEN - все едино) генерирует запрос "SELECT * FROM File WHERE 0 = 1" - а это чтение всей таблицы - я проверял !
Это ж какая нагрузка на базу лишняя.

Кто подскажет, как уйти от этого?
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Re: Share(File) по ODBC

Сообщение StillZero »

чтение всей таблицы - я проверял !
как проверял... логи, картинки и иные доказательства?
Все сайты закрыты...
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Share(File) по ODBC

Сообщение Admin »

Geydar писал(а):Cla 6 не ABC, Firebird 2.1 через ODBC.

В Firebird 2.1 появились таблички мониторинга базы - коннекты, запросы и пр.
И что я увидел (о, ужас) !!!
Стандартная функция SHARE (File) (или OPEN - все едино) генерирует запрос "SELECT * FROM File WHERE 0 = 1" - а это чтение всей таблицы - я проверял !
Это ж какая нагрузка на базу лишняя.

Кто подскажет, как уйти от этого?
(0=1) = FALSE
т.е. запрос никогда не выполнится, т.е. всегда вернет 0 записей.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Re: Share(File) по ODBC

Сообщение Дед Пахом »

Admin писал(а): (0=1) = FALSE
т.е. запрос никогда не выполнится, т.е. всегда вернет 0 записей.
Он как раз-таки выполнится, но вернёт 0 записей :D Стандартный способ получить структуру таблицы.
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Share(File) по ODBC

Сообщение Admin »

Дед Пахом писал(а):Он как раз-таки выполнится, но вернёт 0 записей :D Стандартный способ получить структуру таблицы.
Я это и имел в виду.
Спасибо.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Geydar
Посетитель
Сообщения: 32
Зарегистрирован: 15 Март 2006, 19:47
Откуда: Москва

Re: Share(File) по ODBC

Сообщение Geydar »

Всё вы правильно говорите - записей возвращает 0, но читает всю таблицу - это видно по статистике выполнения запроса в Ibexpert.
Вот это и плохо.
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Re: Share(File) по ODBC

Сообщение StillZero »

бл... хотел уже на коньяк спорить, но похоже Geydar прав.
Спросил на форуме firebird, люди говорят:
- в FB 1.5, 2.1 и 2.5 это так, увы
- Тому, кто использует такой запрос для получения всех полей таблицы, надо отрывать руки по самую задницу

я так понял это Legacy, стд клашин доступ... решения соответственно нет, кроме как уходить либо на какой то другой "доступ", либо на другой сервак, в MS SQL такого нет, к примеру. А другой способ доступа... альтернатив MAV нет, а там тоже самое...
в ADO по другому... на поверхности, как реально происходит я хз, не смотрел

а... фишка есть, в MS SQL есть команда SET ROWCOUNT <число>, устанавливает количество читаемых записей для запроса, MAV это использует и перед такого рода запросами выставляет в 1 или 0, не помню точно, т.е. это решает проблему. Посмотри есть ли подобное в firebird, но ... все равно, как встроить в стд клашины вызовы... MAV попробуй, вроде где то была беслатная тестовая сборка...
Все сайты закрыты...
Geydar
Посетитель
Сообщения: 32
Зарегистрирован: 15 Март 2006, 19:47
Откуда: Москва

Re: Share(File) по ODBC

Сообщение Geydar »

В firebird тоже есть ограничение колва читаемых записей, но ваша правда - как встроить...
А вот такая бредовая идея: может, как-то перенаправить файл перед OPENFILES куда-нибудь на пустую таблицу аналогичной структуры, а после вернуть на боевую?
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Re: Share(File) по ODBC

Сообщение StillZero »

зацепило меня конечно, что говорить, готов уже ставить FB и мониторить

я согласен с утверждением, что запрос SELECT * FROM File WHERE 0 = 1 читает всю таблицу
но, полагаю, что это не все... я практически уверен, что перед выполнением запроса, а используется ODBC API, устанавливаются параметры курсора
примерно так

Код: Выделить всё

   SELF.RetCode = SQLSetStmtAttr(SELF.hstmt, SQL_ATTR_MAX_ROWS,SELF.MaxRow,SQL_IS_UINTEGER)
где SELF.MaxRow = 1, тем самым решая проблему чтения всей таблицы!

Geydar проверь еще раз, не знаю как там в FB, смотри до выполнения что происходит!
Все сайты закрыты...
Geydar
Посетитель
Сообщения: 32
Зарегистрирован: 15 Март 2006, 19:47
Откуда: Москва

Re: Share(File) по ODBC

Сообщение Geydar »

StillZero, честно говоря не знаю, где это посмотреть. Посмотрел трассировку ODBC - там ничего похожего не обнаружил.
Ответить