Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/E_Fail при получении ответа SQL в oRS.RecordCount - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » E_Fail при получении ответа SQL в oRS.RecordCount (Макросы/Sub)
E_Fail при получении ответа SQL в oRS.RecordCount
doober Дата: Вторник, 16.11.2021, 13:53 | Сообщение № 21
Группа: Друзья
Ранг: Ветеран
Сообщений: 836
Репутация: 303 ±
Замечаний: 0% ±

Excel 2010
Попробуйте создать хранимую процедуру, которая будет создавать эту таблицу.
Думаю, что проблема исчезнет


 
Ответить
СообщениеПопробуйте создать хранимую процедуру, которая будет создавать эту таблицу.
Думаю, что проблема исчезнет

Автор - doober
Дата добавления - 16.11.2021 в 13:53
TD_MElec Дата: Вторник, 16.11.2021, 14:17 | Сообщение № 22
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Дело в том, что пока всего около 10 пользователей, у каждого есть ряд, не таких же, но оч близких запросов. Запросы, часто меняются/дополняются. Под каждый запрос я не смогу создавать хранимые процедуры.
И мне кажется, что проблема в "восприятии" VBA ответа SQL, а не в самом SQL. Т.е. где то в параметрах Recordset или возможно Connection
 
Ответить
СообщениеДело в том, что пока всего около 10 пользователей, у каждого есть ряд, не таких же, но оч близких запросов. Запросы, часто меняются/дополняются. Под каждый запрос я не смогу создавать хранимые процедуры.
И мне кажется, что проблема в "восприятии" VBA ответа SQL, а не в самом SQL. Т.е. где то в параметрах Recordset или возможно Connection

Автор - TD_MElec
Дата добавления - 16.11.2021 в 14:17
R_Dmitry Дата: Вторник, 16.11.2021, 14:57 | Сообщение № 23
Группа: Друзья
Ранг: Участник
Сообщений: 70
Репутация: 34 ±
Замечаний: 0% ±

2010
И мне кажется, что проблема в "восприятии" VBA ответа SQL

VBA Ничего не "Воспринимает", вся работа по типизации данных в драйвере, как правило драйвер анализирует первые строки полученных данных и подбирает наиболее подходящий тип данных.
Частые ошибки возникают при передаче числовых данных, если первые полученные строки удовлетворяют требованиям одних типов, а по факту нужны другие.
Я исключал такие ошибки используя дополнительную строку в полученных данных используя union all.
Правда это было не с PostgreSQL


{Skype : RDG_Dmitry} Если программа тебе понятна,значит она уже устарела
 
Ответить
Сообщение
И мне кажется, что проблема в "восприятии" VBA ответа SQL

VBA Ничего не "Воспринимает", вся работа по типизации данных в драйвере, как правило драйвер анализирует первые строки полученных данных и подбирает наиболее подходящий тип данных.
Частые ошибки возникают при передаче числовых данных, если первые полученные строки удовлетворяют требованиям одних типов, а по факту нужны другие.
Я исключал такие ошибки используя дополнительную строку в полученных данных используя union all.
Правда это было не с PostgreSQL

Автор - R_Dmitry
Дата добавления - 16.11.2021 в 14:57
TD_MElec Дата: Вторник, 16.11.2021, 15:41 | Сообщение № 24
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Уже аж смешно.
Выполнил запрос:
[vba]
Код
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
Дата добавления - 16.11.2021 в 15:41
R_Dmitry Дата: Вторник, 16.11.2021, 16:10 | Сообщение № 25
Группа: Друзья
Ранг: Участник
Сообщений: 70
Репутация: 34 ±
Замечаний: 0% ±

2010
Вы первую строку типизируйте
[vba]
Код
select 1, 'hhh',5.00000025789654, 12, 'hfhfhf' from DUAL
union all
select * from temp_table
[/vba]
ну и количество столбцов должно совпадать


{Skype : RDG_Dmitry} Если программа тебе понятна,значит она уже устарела
 
Ответить
СообщениеВы первую строку типизируйте
[vba]
Код
select 1, 'hhh',5.00000025789654, 12, 'hfhfhf' from DUAL
union all
select * from temp_table
[/vba]
ну и количество столбцов должно совпадать

Автор - R_Dmitry
Дата добавления - 16.11.2021 в 16:10
TD_MElec Дата: Вторник, 16.11.2021, 16:26 | Сообщение № 26
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
R_Dmitry, понял Вас.

В выборке 29 полей, пишу запрос на вывод только проблемного поля:
[vba]
Код
select 5.0055
union all
select problem_field
from temp_table
[/vba]Опять возвращает тот же самый "Поставщик данных или другая служба вернули состояние E_FAIL."
PS В Dbeaver запрос проверил - отработал


Сообщение отредактировал TD_MElec - Вторник, 16.11.2021, 16:27
 
Ответить
СообщениеR_Dmitry, понял Вас.

В выборке 29 полей, пишу запрос на вывод только проблемного поля:
[vba]
Код
select 5.0055
union all
select problem_field
from temp_table
[/vba]Опять возвращает тот же самый "Поставщик данных или другая служба вернули состояние E_FAIL."
PS В Dbeaver запрос проверил - отработал

Автор - TD_MElec
Дата добавления - 16.11.2021 в 16:26
R_Dmitry Дата: Вторник, 16.11.2021, 17:23 | Сообщение № 27
Группа: Друзья
Ранг: Участник
Сообщений: 70
Репутация: 34 ±
Замечаний: 0% ±

2010
Подскажите какой тип данных в этом поле
Если оно вычисляемое и нужно допустим 4 знака после запятой, то произведите умножение на 10 000 и округлите до целого
либо просто округлите до нужного количества знаков


{Skype : RDG_Dmitry} Если программа тебе понятна,значит она уже устарела

Сообщение отредактировал R_Dmitry - Вторник, 16.11.2021, 17:25
 
Ответить
СообщениеПодскажите какой тип данных в этом поле
Если оно вычисляемое и нужно допустим 4 знака после запятой, то произведите умножение на 10 000 и округлите до целого
либо просто округлите до нужного количества знаков

Автор - R_Dmitry
Дата добавления - 16.11.2021 в 17:23
TD_MElec Дата: Вторник, 16.11.2021, 18:21 | Сообщение № 28
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
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 - Вторник, 16.11.2021, 18:21
 
Ответить
Сообщение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
Дата добавления - 16.11.2021 в 18:21
TD_MElec Дата: Понедельник, 29.11.2021, 11:46 | Сообщение № 29
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
R_Dmitry, doober, Доброго дня!

Нашел ещё один вариант решения, лежащий на поверхности и при этом совсем не видимый :)
в вычисляемом поле в 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
Дата добавления - 29.11.2021 в 11:46
doober Дата: Понедельник, 29.11.2021, 16:38 | Сообщение № 30
Группа: Друзья
Ранг: Ветеран
Сообщений: 836
Репутация: 303 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.[offtop]
(без использования временной таблицы)
То был лишь пример.Обычно я все стараюсь делать в процедурах.


 
Ответить
СообщениеЗдравствуйте.[offtop]
(без использования временной таблицы)
То был лишь пример.Обычно я все стараюсь делать в процедурах.

Автор - doober
Дата добавления - 29.11.2021 в 16:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » E_Fail при получении ответа SQL в oRS.RecordCount (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования Jobsora jooble
© 2010-2021 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!