Дело в том, что пока всего около 10 пользователей, у каждого есть ряд, не таких же, но оч близких запросов. Запросы, часто меняются/дополняются. Под каждый запрос я не смогу создавать хранимые процедуры. И мне кажется, что проблема в "восприятии" VBA ответа SQL, а не в самом SQL. Т.е. где то в параметрах Recordset или возможно Connection
Дело в том, что пока всего около 10 пользователей, у каждого есть ряд, не таких же, но оч близких запросов. Запросы, часто меняются/дополняются. Под каждый запрос я не смогу создавать хранимые процедуры. И мне кажется, что проблема в "восприятии" VBA ответа SQL, а не в самом SQL. Т.е. где то в параметрах Recordset или возможно ConnectionTD_MElec
И мне кажется, что проблема в "восприятии" VBA ответа SQL
VBA Ничего не "Воспринимает", вся работа по типизации данных в драйвере, как правило драйвер анализирует первые строки полученных данных и подбирает наиболее подходящий тип данных. Частые ошибки возникают при передаче числовых данных, если первые полученные строки удовлетворяют требованиям одних типов, а по факту нужны другие. Я исключал такие ошибки используя дополнительную строку в полученных данных используя union all. Правда это было не с PostgreSQL
И мне кажется, что проблема в "восприятии" VBA ответа SQL
VBA Ничего не "Воспринимает", вся работа по типизации данных в драйвере, как правило драйвер анализирует первые строки полученных данных и подбирает наиболее подходящий тип данных. Частые ошибки возникают при передаче числовых данных, если первые полученные строки удовлетворяют требованиям одних типов, а по факту нужны другие. Я исключал такие ошибки используя дополнительную строку в полученных данных используя union all. Правда это было не с PostgreSQLR_Dmitry
{Skype : RDG_Dmitry} Если программа тебе понятна,значит она уже устарела
select * from temp_table union all select * from temp_table
[/vba] А excel мне вернул "Поставщик данных или другая служба вернули состояние E_FAIL." То с чего собственно данная тема и началась. Dbeaver отработал нормально. И просто union такой же результат
Уже аж смешно. Выполнил запрос: [vba]
Код
select * from temp_table union all select * from temp_table
[/vba] А excel мне вернул "Поставщик данных или другая служба вернули состояние E_FAIL." То с чего собственно данная тема и началась. Dbeaver отработал нормально. И просто union такой же результатTD_MElec
Подскажите какой тип данных в этом поле Если оно вычисляемое и нужно допустим 4 знака после запятой, то произведите умножение на 10 000 и округлите до целого либо просто округлите до нужного количества знаков
Подскажите какой тип данных в этом поле Если оно вычисляемое и нужно допустим 4 знака после запятой, то произведите умножение на 10 000 и округлите до целого либо просто округлите до нужного количества знаковR_Dmitry
{Skype : RDG_Dmitry} Если программа тебе понятна,значит она уже устарела
Сообщение отредактировал R_Dmitry - Вторник, 16.11.2021, 17:25
R_Dmitry, doober, Умножение на 10000 вернуло ошибку "Поставщик данных или другая служба вернули состояние E_FAIL." А вот round(problem_field, 10) - вернуло практически верные значения. В вычисляемых данных разное количество символов, и у некоторых данных отличия excel от Dbeaver на 0,0001 у других на 0,000001. Т.е. где то самая последняя цифра отличается, а где то все совпадает В целом точность достаточная.
problem_field - это же поле временной таблицы, куда я поместил результат основного запроса. Так вот, если в самом основном запросе добавить round(вычисления, 10) к тем самым полям, то всё отрабатывает без ошибок и с включенным oRS.CursorLocation = 3
Думаю, можно сказать: "Ура!" Всем спасибо)
PS round(вычисления, 29) - Выводимые данные начинают искажаться round(вычисления, 37) - Выводятся те же самые неверные данные, что и без функции round из временной таблицы round(вычисления, 38) - Excel возвращает: "Поставщик данных или другая служба вернули состояние E_FAIL." Таким образом, опытным путем, обнаружил, что округлять можно до 28 знаков после запятой включительно.
R_Dmitry, doober, Умножение на 10000 вернуло ошибку "Поставщик данных или другая служба вернули состояние E_FAIL." А вот round(problem_field, 10) - вернуло практически верные значения. В вычисляемых данных разное количество символов, и у некоторых данных отличия excel от Dbeaver на 0,0001 у других на 0,000001. Т.е. где то самая последняя цифра отличается, а где то все совпадает В целом точность достаточная.
problem_field - это же поле временной таблицы, куда я поместил результат основного запроса. Так вот, если в самом основном запросе добавить round(вычисления, 10) к тем самым полям, то всё отрабатывает без ошибок и с включенным oRS.CursorLocation = 3
Думаю, можно сказать: "Ура!" Всем спасибо)
PS round(вычисления, 29) - Выводимые данные начинают искажаться round(вычисления, 37) - Выводятся те же самые неверные данные, что и без функции round из временной таблицы round(вычисления, 38) - Excel возвращает: "Поставщик данных или другая служба вернули состояние E_FAIL." Таким образом, опытным путем, обнаружил, что округлять можно до 28 знаков после запятой включительно.TD_MElec
Сообщение отредактировал TD_MElec - Вторник, 16.11.2021, 18:21
Нашел ещё один вариант решения, лежащий на поверхности и при этом совсем не видимый в вычисляемом поле в SQL запросе, вначале всех вычислений ставим [vba]
Код
1.0 *
[/vba] и всё... ошибки E_FAIL больше нет, проблем с разными данными в бобре и экселе тоже нет. doober, попробуйте в своих запросах в которых у вас возвращалась E_FAIL (без использования временной таблицы)
R_Dmitry, doober, Доброго дня!
Нашел ещё один вариант решения, лежащий на поверхности и при этом совсем не видимый в вычисляемом поле в SQL запросе, вначале всех вычислений ставим [vba]
Код
1.0 *
[/vba] и всё... ошибки E_FAIL больше нет, проблем с разными данными в бобре и экселе тоже нет. doober, попробуйте в своих запросах в которых у вас возвращалась E_FAIL (без использования временной таблицы)TD_MElec