This is topic Запись значений типа FLOAT(REAL) в Access в примере (и не только) не работает. in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001633.html

Posted by SpacePremier (Участник № / Member № 8053) on :
 
Загрузил пример проекта про базу рецептор в Access (Recept_base.prj). Создал драйвер к файлу Access, проверка подключения осуществляется успешно.
В профайлере чтение всех строк из mdb файла, идущего в комплекте с примером, происходит успешно. Запись новых строк в файл mdb - двояко. Если в качестве значений использовать целые числа, то запись происходит. А если использовать числа с ненулевой дробной частью (например: 125.152), то нет.
Почему не записываются дробные числа?

Trace Mode 6.10.1
Windows 10 x64
Office 2016 x32
драйверы ODBC скачаны с https://www.microsoft.com/en-us/download/details.aspx?id=54920 и установлены.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Надо посмотреть в протокол трассировщика "Администратора источников ODBC". Там должны быть сообщения об ошибках.
Возможно, в используемой Вами таблице БД в этом столбце задан целочисленный тип данных.
 
Posted by SpacePremier (Участник № / Member № 8053) on :
 
Я использую файл из примера
 
Posted by SpacePremier (Участник № / Member № 8053) on :
 
Recept_base_0 1484-418 ENTER SQLAllocHandle
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x00000000
SQLHANDLE * 0x0823EE50

Recept_base_0 1484-418 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x00000000
SQLHANDLE * 0x0823EE50 ( 0x0FED1160)

Recept_base_0 1484-418 ENTER SQLSetEnvAttr
SQLHENV 0x0FED1160
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 2 <SQL_OV_ODBC2>
SQLINTEGER -5

Recept_base_0 1484-418 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x0FED1160
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 2 <SQL_OV_ODBC2>
SQLINTEGER -5

Recept_base_0 1484-418 ENTER SQLAllocHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x0FED1160
SQLHANDLE * 0x0823EE54

Recept_base_0 1484-418 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x0FED1160
SQLHANDLE * 0x0823EE54 ( 0x0FED3140)

Recept_base_0 1484-418 ENTER SQLDriverConnectW
HDBC 0x0FED3140
HWND 0x00000000
WCHAR * 0x736E2354 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x736E2354
SWORD -3
SWORD * 0x00000000
UWORD 0 <SQL_DRIVER_NOPROMPT>

Recept_base_0 1484-418 EXIT SQLDriverConnectW with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
HWND 0x00000000
WCHAR * 0x736E2354 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x736E2354 <Invalid buffer length!> [-3]
SWORD -3
SWORD * 0x00000000
UWORD 0 <SQL_DRIVER_NOPROMPT>

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 8
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 8
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 43
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 43
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 40
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 40
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 1014
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 1014
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 1011
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 1011
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 11
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 11
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 45
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 45
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 54
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 54
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 18
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 18
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetFunctions
HDBC 0x0FED3140
UWORD 20
UWORD * 0x0FC4F41C

Recept_base_0 1484-418 EXIT SQLGetFunctions with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 20
UWORD * 0x0FC4F41C (1)

Recept_base_0 1484-418 ENTER SQLGetInfoW
HDBC 0x0FED3140
UWORD 56 <SQL_CONVERT_CHAR>
PTR 0x0FC4F428
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 56 <SQL_CONVERT_CHAR>
PTR 0x0FC4F428 ( 0x008001FA)
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 ENTER SQLGetInfoW
HDBC 0x0FED3140
UWORD 70 <SQL_CONVERT_VARCHAR>
PTR 0x0FC4F428
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 70 <SQL_CONVERT_VARCHAR>
PTR 0x0FC4F428 ( 0x008001FA)
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 ENTER SQLGetInfoW
HDBC 0x0FED3140
UWORD 62 <SQL_CONVERT_LONGVARCHAR>
PTR 0x0FC4F428
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 62 <SQL_CONVERT_LONGVARCHAR>
PTR 0x0FC4F428 ( 0x008001FA)
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 ENTER SQLGetInfoW
HDBC 0x0FED3140
UWORD 91 <SQL_OWNER_USAGE>
PTR 0x0FC4F428
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-418 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 0x0FED3140
UWORD 91 <SQL_OWNER_USAGE>
PTR 0x0FC4F428 ( 0x00000000)
SWORD 4
SWORD * 0x00000000

Recept_base_0 1484-2818 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x0FED3140
SQLHANDLE * 0x0823EDE0

Recept_base_0 1484-2818 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x0FED3140
SQLHANDLE * 0x0823EDE0 ( 0x0FED3488)

Recept_base_0 1484-2818 ENTER SQLSetStmtAttrW
SQLHSTMT 0x0FED3488
SQLINTEGER 6 <SQL_ATTR_CURSOR_TYPE>
SQLPOINTER 3 <SQL_CURSOR_STATIC>
SQLINTEGER -5

Recept_base_0 1484-2818 EXIT SQLSetStmtAttrW with return code 0 (SQL_SUCCESS)
SQLHSTMT 0x0FED3488
SQLINTEGER 6 <SQL_ATTR_CURSOR_TYPE>
SQLPOINTER 3 <SQL_CURSOR_STATIC>
SQLINTEGER -5

Recept_base_0 1484-2818 ENTER SQLExecDirectW
HSTMT 0x0FED3488
WCHAR * 0x082736F0 [ 161] "INSERT INTO Table1\ a(\ a\ 9Nomer,\ a\ 9Parametr1,\ a\ 9Parametr2,\ a\ 9Parametr3,\ a\ 9Parametr4,\ a\ 9Parametr5\ a)\ aVALUES\ a(\ a\ 9'10',\ a\ 9'\ff\ff\ff\ff\ff\ff',\ a\ 9'125.233',\ a\ 9'175485',\ a\ 9'-155.36',\ a\ 9'-456'\ a)"
SDWORD 161

Recept_base_0 1484-2818 EXIT SQLExecDirectW with return code -1 (SQL_ERROR)
HSTMT 0x0FED3488
WCHAR * 0x082736F0 [ 161] "INSERT INTO Table1\ a(\ a\ 9Nomer,\ a\ 9Parametr1,\ a\ 9Parametr2,\ a\ 9Parametr3,\ a\ 9Parametr4,\ a\ 9Parametr5\ a)\ aVALUES\ a(\ a\ 9'10',\ a\ 9'\ff\ff\ff\ff\ff\ff',\ a\ 9'125.233',\ a\ 9'175485',\ a\ 9'-155.36',\ a\ 9'-456'\ a)"
SDWORD 161

DIAG [22005] [Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в выражении условия отбора. (-3030)

Recept_base_0 1484-2818 ENTER SQLGetDiagRecW
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x0FED3488
SQLSMALLINT 1
SQLWCHAR * 0x2084FDC0
SQLINTEGER * 0x2084FDCC
SQLWCHAR * 0x2084F9C0
SQLSMALLINT 511
SQLSMALLINT * 0x2084FDD2

Recept_base_0 1484-2818 EXIT SQLGetDiagRecW with return code 0 (SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x0FED3488
SQLSMALLINT 1
SQLWCHAR * 0x2084FDC0 [ 5] "22005"
SQLINTEGER * 0x2084FDCC (-3030)
SQLWCHAR * 0x2084F9C0 [ 98] "[Microsoft][\ff\ff\ff\ff\ff\ff\ff ODBC Microsoft Access] \ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff \ff\ff\ff\ff\ff \ff\ff\ff\ff\ff\ff \ff \ff\ff\ff\ff\ff\ff\ff\ff\ff \ff\ff\ff\ff\ff\ff\ff \ff\ff\ff\ff\ff\ff."
SQLSMALLINT 511
SQLSMALLINT * 0x2084FDD2 (98)

Recept_base_0 1484-2818 ENTER SQLGetDiagRecW
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x0FED3140
SQLSMALLINT 1
SQLWCHAR * 0x2084FDB8
SQLINTEGER * 0x2084FDC4
SQLWCHAR * 0x2084F9B8
SQLSMALLINT 511
SQLSMALLINT * 0x2084FDCA

Recept_base_0 1484-2818 EXIT SQLGetDiagRecW with return code 100 (SQL_NO_DATA_FOUND)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x0FED3140
SQLSMALLINT 1
SQLWCHAR * 0x2084FDB8
SQLINTEGER * 0x2084FDC4
SQLWCHAR * 0x2084F9B8
SQLSMALLINT 511
SQLSMALLINT * 0x2084FDCA

Recept_base_0 1484-2818 ENTER SQLGetDiagRecW
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x0FED1160
SQLSMALLINT 1
SQLWCHAR * 0x2084FDB0
SQLINTEGER * 0x2084FDBC
SQLWCHAR * 0x2084F9B0
SQLSMALLINT 511
SQLSMALLINT * 0x2084FDC2

Recept_base_0 1484-2818 EXIT SQLGetDiagRecW with return code 100 (SQL_NO_DATA_FOUND)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x0FED1160
SQLSMALLINT 1
SQLWCHAR * 0x2084FDB0
SQLINTEGER * 0x2084FDBC
SQLWCHAR * 0x2084F9B0
SQLSMALLINT 511
SQLSMALLINT * 0x2084FDC2
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В протоколе трассировщика в явном виде имеется сообщение о несоответствии типов данных
“DIAG [22005] [Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в выражении условия отбора. (-3030) ”

Проверьте, пожалуйста, настройку разделителя в формате представления чисел с плавающей точкой (точка или запятая) в настройках ОС.
Должна быть “точка”.

Поскольку проект, который Вы взяли в форуме, несколько устарел, я предлал Вам его реализацию в текущем релизе.
В прилагаемой БД последние 4 записи выполнены в этом проекте сегодня.
В прилагаемом протоколе трассировщика ошибок нет.
 
Posted by SpacePremier (Участник № / Member № 8053) on :
 
Спасибо за ответ.
В каком месте "Справки" написано, что для записи значений в Access, необходимо изменить настройки ОС?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
“Введение/Системные требования”:
“Настройка MS Windows
Чтобы обеспечить корректную работу TRACE MODE 6 со значениями с плавающей запятой, в качестве разделителя дробной части числа в региональных настройках Windows должна быть установлена точка. ”
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2