Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Никак не разберусь: мне необходимо выполнить произвольный запрос к БД, проанализировать вернувшиеся поля и в зависимости от их типа считать из них данные. Ну начало понятно - SQLAllocHandle, SQLConnect, SQLExecDirect. Далее - непонятно. SQLGetData требует на входе параметр "тип данных" из перечисления (SQL_C_CHAR, SQL_C_SHORT...) SQLDescribeCol по всем источникам отдает переменную "тип данных" из перечисления: (SQL_CHAR, SQL_SMALLINT...) Они там, частично совпадают, частично нет. В связи с эти вопрос: это действительно так? Эти две функции используют две разные кодировки типов данных? То есть резюме: надо перекодировать типы данных вернувшиеся из SQLDescribeCol перед передачей их SQLGetData? Помогите кто может, кто может, помогите!!! (с)Булычев. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 14:55 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
iMerlin, (SQL_C_CHAR, SQL_C_SHORT...) -- это типы данных полей на клиентской стороне. В программе на С. (SQL_CHAR, SQL_SMALLINT...) -- это типы данных полей в БД, с точки зрения SQL. При бинде ты мапируешь серверный тип (тип БД) на клиетский, оба указываются в вызове соотв. функции. При этом заметь, что некоторым типам данных БД соответствуют 2 и более клиентских типов. Например, SQL_INT может быть получен клиентов в виде целого числа, или в виде преобразованного в символьный вид образа этого числа. Для начала ты можешь для простоты все типы БД преобразовывать в симпольный вид, это может быть немного проще -- не нужно составлять таблицу соответствий типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 15:11 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
Спасибо. Дело в том, что я не биндю, у меня несколько специфическая задача стоит - мне надо именно реализовать все-во-все, и мне проще считать данные SQLGetData, а потом разобраться что куда преобразовать. То есть грубо говоря у меня switch, который раскидывает ветки по типу, возвращенному SQLDescribeCol, в каждом case считывание данных в "родную" для типа колонки переменную (union на все возможные типы и структуры организовал) и затем вложенный switch, раскидывающий ветви уже по тому типу, который нужен пользователю, в каждом case преобразование. В простом варианте - когда я четко знаю тип колонки и тип переменной куда считаю данные - у меня никаких проблем. Проблемы в том, что я не знаю что должна возвращать SQLDescribeCol. Беда такая: я пишу для использования в будущем совместно с SQL server, но сервера пока нет, я пока весь код на Access'e отлаживаю, а у него половины типов данных нет, отладчиком не посмотришь. Прошу все таки раскрыть, по возможности, SQLDescribeCol созвращает C или SQL типы? авторНапример, SQL_INT может быть получен клиентов в виде целого числа, или в виде преобразованного в символьный вид образа этого числа. Как интересно. А я ручками из INT перевожу... То есть можно в SQLGetData числовой колонке подсунуть указатель на буфер и тип данных SQL_C_CHAR и драйвер сам все перекодирует? Спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 17:11 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
MasterZivНапример, SQL_INT может быть получен клиентов в виде целого числа, или в виде преобразованного в символьный вид образа этого числа. Простите, еще такой вопрос: такие страшные типы данных как Decimal и Numeric, я их сейчас как в msdn рекомендовано считываю: структура SQLNumeric на входе, из нее беру строку байт и записываю в double по циклу: n0+n1*256+n2*65536... А что, можно указать что принимаю double и драйвер сам все это сделает? Я бы сам попробовал, но как уже писал самого SQL сервера пока нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 17:20 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
iMerlinПрошу все таки раскрыть, по возможности, SQLDescribeCol созвращает C или SQL типы? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Т.е. это серверный тип данных, тип данных в БД, по стандарту ANSI SQL. iMerlinКак интересно. А я ручками из INT перевожу... То есть можно в SQLGetData числовой колонке подсунуть указатель на буфер и тип данных SQL_C_CHAR и драйвер сам все перекодирует? Да. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Так что пишешь в TargetType SQL_C_CHAR, а в TargetValuePtr -- указатель на символьный буфер (особый гемор с тем, чтобы предварительно посчитать правильно его длину и выделить его). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 17:51 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
Да, там, в документации, на сколько я помню, всё время используются два термина: SQL data type -- это тип в БД C data type -- это тип в клиентской программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 17:56 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
Еще полезно будет посмотреть здесь: http://msdn.microsoft.com/en-us/library/ms716298(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 19:01 |
|
||
|
Параметры функции SQLDescribeCol (ODBC )
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, начало потихоньку проясняться. Теперь понял, для чего та таблица про совместимость - я до этого думал, она показывает что тип В ПРИНЦИПЕ может быть преобразован в другой - ручками, а оно оказывается вот как... Все уже украдено, до нас... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 19:19 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38535663&tid=2019747]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 286ms |
| total: | 436ms |

| 0 / 0 |
