Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, имеется следующий код: SQLBindParameter(hstnt1,pCnt,SQL_PARAM_INPUT,SQL_C_TIMESTAMP,SQL_TIMESTAMP,sizeof(SQL_IMESTAMP_STRUCT),0,&ts,sizeof(SQL_TIMESTAMP_STRUCT),NULL); При использовании ODBC второй версии: SQLSetEnvAttr(henv1,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC2,0); Код отрабатывает нормально. Когда переключаюсь на третью версию ODBC: SQLSetEnvAttr(henv1,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); При исполнении SQLExecDirect возникает следующая ошибка: "Переполнение поля даты и времени". Замена SQL_C_TIMESTAMP на SQL_C_TYPE_TIMESTAMP и SQL_TIMESTAMP на SQL_TYPE_TIMESTAMP результата не дает. Подскажите пожалуйста, в какую сторону посмотреть. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 19:03 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
max950Подскажите пожалуйста, в какую сторону посмотреть.В сторону опечаток. Описание действий по апгрейду правильное. А насколько тщательно это все произведено - неизвестно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 19:41 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
Может быть кому-то будет интересно: Методом научного тыка понял, что если обнулить секунды, то запрос выполняется нормально. После этого стал смотреть в сторону размерных параметров. Помогла вот эта статья: http://msdn.microsoft.com/en-us/library/windows/desktop/ms711786%28v=vs.85%29.aspx в частности вот это: ===================================== SQL_TYPE_TIMESTAMP 16 (the number of characters in the yyyy-mm-dd hh:mm format) 19 (the number of characters in the yyyy-mm-dd hh:mm:ss format) or 20 + s (the number of characters in the yyyy-mm-dd hh:mm:ss[.fff...] format, where s is the seconds precision). ====================================== в моем коде: SQLBindParameter(hstnt1,pCnt,SQL_PARAM_INPUT,SQL_C_TIMESTAMP,SQL_TIMESTAMP,sizeof(SQL_IMESTAMP_STRUCT),0,&ts,sizeof(SQL_TIMESTAMP_STRUCT),NULL); sizeof(SQL_IMESTAMP_STRUCT) или sizeof(ts) дает 16 Предполагаю, что в ODBC3 заложены более жесткие условия проверки переменных на "правильность". Вот в таком виде: SQLBindParameter(hstnt1,pCnt,SQL_PARAM_INPUT,SQL_C_TYPE_TIMESTAMP,SQL_TYPE_TIMESTAMP,23,3,&ts,NULL,NULL); код отрабатывает. Есть вопросы по двум последним параметрам, но это отдельный вопрос. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 12:50 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
Должно быть SQL_C_TYPE_TIMESTAMP Ну и параметры --- Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 13:35 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
стал смотреть в сторону размерных параметров. Ты разве используешь векторные параметры ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 13:36 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
1. sizeof(SQL_IMESTAMP_STRUCT) ошибся при копировании, должно быть: sizeof(SQL_TIMESTAMP_STRUCT) 2. pCnt, // это указатель на соединение ? А должен быть номер параметра по порядку. в оригинале paramCnt, т.е. счетчик параметров - число. 4. Речь идет про переход с ODBC2 на ODBC3, соответственно сначала было SQL_C_TIMESTAMP потом SQL_C_TYPE_TIMESTAMP 3. стал смотреть в сторону размерных параметров. Ты разве используешь векторные параметры ? Нет. Возможно использовал не тот термин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 14:05 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
5. sizeof(SQL_IMESTAMP_STRUCT), // это тип фиксированной длины, должен быть 0. Судя по нижеуказанному, не похоже, чтобы это было так: =============== SQLRETURN SQLBindParameter( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN ColumnSize, SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr, SQLLEN BufferLength, SQLLEN * StrLen_or_IndPtr); =============== Column Size For the time, timestamp, and all interval data types, this is the number of characters in the character representation of this data SQL_TYPE_TIMESTAMP 16 (the number of characters in the yyyy-mm-dd hh:mm format) 19 (the number of characters in the yyyy-mm-dd hh:mm:ss format) or 20 + s (the number of characters in the yyyy-mm-dd hh:mm:ss[.fff...] format, where s is the seconds precision). http://msdn.microsoft.com/en-us/library/windows/desktop/ms711786%28v=vs.85%29.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 14:15 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
max9505. sizeof(SQL_IMESTAMP_STRUCT), // это тип фиксированной длины, должен быть 0. Судя по нижеуказанному, не похоже, чтобы это было так: Column Size For the time, timestamp, and all interval data types, this is the number of characters in the character representation of this data SQL_TYPE_TIMESTAMP Это про SQL_TYPE - про тип данных в БД. Это про тот случай, когда ты при биндинге преобразуешь данные из SQL_TYPE_TIMESTAMP в текстовый вид. Ты же биндишь на структуру, представляющую TIMESTAMP в памяти, она фиксированного и заранее предопределённого (спецификацией ODBC и заголовком, описывающим структуру) формата и размера, поэтому не нужно там никакого размера, но параметр в этом случае просто должен игнорироваться, т.е. это не страшно, если ты там что-то укажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 17:35 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
Сейчас попробовал поставить 0 в "Colomn size". Получаю ошибку "Неверное поле COUNT или ошибка синтаксиса". Еще раз, чтобы была ясность, это происходит, когда я принудительно включаю ODBC3: SQLSetEnvAttr(henv1,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); Независимо от того, использую я SQL_TIMESTAMP или SQL_TYPE_TIMESTAMP. Скорее всего спецификация ODBC3 более "жесткая" к параметрам, чем ODBC2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 11:02 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
max950, Ну найди то место, где она более жёсткая... Я думаю, что скорее всего у тебя программа была некорректной и до, и после 3.0, только в 3.0 это проявляется в силу каких=то его особеностей, другой реализации, а в 2.0 -- нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 12:38 |
|
||
|
SQL_OV_ODBC3 и SQL_TIMESTAMP
|
|||
|---|---|---|---|
|
#18+
max950, Мы делаем так, но у нас не используется odbc3.0. рабоатет с TimesTen & Postgresql Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 22:33 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=81&tid=2020336]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 288ms |
| total: | 431ms |

| 0 / 0 |
