Share(File) по ODBC
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Share(File) по ODBC
Cla 6 не ABC, Firebird 2.1 через ODBC.
В Firebird 2.1 появились таблички мониторинга базы - коннекты, запросы и пр.
И что я увидел (о, ужас) !!!
Стандартная функция SHARE (File) (или OPEN - все едино) генерирует запрос "SELECT * FROM File WHERE 0 = 1" - а это чтение всей таблицы - я проверял !
Это ж какая нагрузка на базу лишняя.
Кто подскажет, как уйти от этого?
В Firebird 2.1 появились таблички мониторинга базы - коннекты, запросы и пр.
И что я увидел (о, ужас) !!!
Стандартная функция SHARE (File) (или OPEN - все едино) генерирует запрос "SELECT * FROM File WHERE 0 = 1" - а это чтение всей таблицы - я проверял !
Это ж какая нагрузка на базу лишняя.
Кто подскажет, как уйти от этого?
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
Re: Share(File) по ODBC
как проверял... логи, картинки и иные доказательства?чтение всей таблицы - я проверял !
Все сайты закрыты...
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Share(File) по ODBC
(0=1) = FALSEGeydar писал(а):Cla 6 не ABC, Firebird 2.1 через ODBC.
В Firebird 2.1 появились таблички мониторинга базы - коннекты, запросы и пр.
И что я увидел (о, ужас) !!!
Стандартная функция SHARE (File) (или OPEN - все едино) генерирует запрос "SELECT * FROM File WHERE 0 = 1" - а это чтение всей таблицы - я проверял !
Это ж какая нагрузка на базу лишняя.
Кто подскажет, как уйти от этого?
т.е. запрос никогда не выполнится, т.е. всегда вернет 0 записей.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Re: Share(File) по ODBC
Он как раз-таки выполнится, но вернёт 0 записей Стандартный способ получить структуру таблицы.Admin писал(а): (0=1) = FALSE
т.е. запрос никогда не выполнится, т.е. всегда вернет 0 записей.
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Share(File) по ODBC
Я это и имел в виду.Дед Пахом писал(а):Он как раз-таки выполнится, но вернёт 0 записей Стандартный способ получить структуру таблицы.
Спасибо.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Share(File) по ODBC
Всё вы правильно говорите - записей возвращает 0, но читает всю таблицу - это видно по статистике выполнения запроса в Ibexpert.
Вот это и плохо.
Вот это и плохо.
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
Re: Share(File) по ODBC
бл... хотел уже на коньяк спорить, но похоже Geydar прав.
Спросил на форуме firebird, люди говорят:
- в FB 1.5, 2.1 и 2.5 это так, увы
- Тому, кто использует такой запрос для получения всех полей таблицы, надо отрывать руки по самую задницу
я так понял это Legacy, стд клашин доступ... решения соответственно нет, кроме как уходить либо на какой то другой "доступ", либо на другой сервак, в MS SQL такого нет, к примеру. А другой способ доступа... альтернатив MAV нет, а там тоже самое...
в ADO по другому... на поверхности, как реально происходит я хз, не смотрел
а... фишка есть, в MS SQL есть команда SET ROWCOUNT <число>, устанавливает количество читаемых записей для запроса, MAV это использует и перед такого рода запросами выставляет в 1 или 0, не помню точно, т.е. это решает проблему. Посмотри есть ли подобное в firebird, но ... все равно, как встроить в стд клашины вызовы... MAV попробуй, вроде где то была беслатная тестовая сборка...
Спросил на форуме firebird, люди говорят:
- в FB 1.5, 2.1 и 2.5 это так, увы
- Тому, кто использует такой запрос для получения всех полей таблицы, надо отрывать руки по самую задницу
я так понял это Legacy, стд клашин доступ... решения соответственно нет, кроме как уходить либо на какой то другой "доступ", либо на другой сервак, в MS SQL такого нет, к примеру. А другой способ доступа... альтернатив MAV нет, а там тоже самое...
в ADO по другому... на поверхности, как реально происходит я хз, не смотрел
а... фишка есть, в MS SQL есть команда SET ROWCOUNT <число>, устанавливает количество читаемых записей для запроса, MAV это использует и перед такого рода запросами выставляет в 1 или 0, не помню точно, т.е. это решает проблему. Посмотри есть ли подобное в firebird, но ... все равно, как встроить в стд клашины вызовы... MAV попробуй, вроде где то была беслатная тестовая сборка...
Все сайты закрыты...
Re: Share(File) по ODBC
В firebird тоже есть ограничение колва читаемых записей, но ваша правда - как встроить...
А вот такая бредовая идея: может, как-то перенаправить файл перед OPENFILES куда-нибудь на пустую таблицу аналогичной структуры, а после вернуть на боевую?
А вот такая бредовая идея: может, как-то перенаправить файл перед OPENFILES куда-нибудь на пустую таблицу аналогичной структуры, а после вернуть на боевую?
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
Re: Share(File) по ODBC
зацепило меня конечно, что говорить, готов уже ставить FB и мониторить
я согласен с утверждением, что запрос SELECT * FROM File WHERE 0 = 1 читает всю таблицу
но, полагаю, что это не все... я практически уверен, что перед выполнением запроса, а используется ODBC API, устанавливаются параметры курсора
примерно так
где SELF.MaxRow = 1, тем самым решая проблему чтения всей таблицы!
Geydar проверь еще раз, не знаю как там в FB, смотри до выполнения что происходит!
я согласен с утверждением, что запрос SELECT * FROM File WHERE 0 = 1 читает всю таблицу
но, полагаю, что это не все... я практически уверен, что перед выполнением запроса, а используется ODBC API, устанавливаются параметры курсора
примерно так
Код: Выделить всё
SELF.RetCode = SQLSetStmtAttr(SELF.hstmt, SQL_ATTR_MAX_ROWS,SELF.MaxRow,SQL_IS_UINTEGER)
Geydar проверь еще раз, не знаю как там в FB, смотри до выполнения что происходит!
Все сайты закрыты...
Re: Share(File) по ODBC
StillZero, честно говоря не знаю, где это посмотреть. Посмотрел трассировку ODBC - там ничего похожего не обнаружил.