Автор / Author
Тема / Topic: Запись значений типа FLOAT(REAL) в Access в примере (и не только) не работает.
SpacePremier
Junior Member / Новичок
Участник № / Member № 8053
отправлено / posted 06.06.2019 10:54
Загрузил пример проекта про базу рецептор в 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 и установлены.
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
АдАстра. Техподдержка
Administrator
Участник № / Member № 4
отправлено / posted 06.06.2019 11:45
Надо посмотреть в протокол трассировщика "Администратора источников ODBC". Там должны быть сообщения об ошибках. Возможно, в используемой Вами таблице БД в этом столбце задан целочисленный тип данных.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
SpacePremier
Junior Member / Новичок
Участник № / Member № 8053
отправлено / posted 06.06.2019 12:11
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
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
АдАстра. Техподдержка
Administrator
Участник № / Member № 4
отправлено / posted 06.06.2019 14:26
В протоколе трассировщика в явном виде имеется сообщение о несоответствии типов данных “DIAG [22005] [Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в выражении условия отбора. (-3030) ” Проверьте, пожалуйста, настройку разделителя в формате представления чисел с плавающей точкой (точка или запятая) в настройках ОС. Должна быть “точка”. Поскольку проект, который Вы взяли в форуме, несколько устарел, я предлал Вам его реализацию в текущем релизе. В прилагаемой БД последние 4 записи выполнены в этом проекте сегодня. В прилагаемом протоколе трассировщика ошибок нет.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
SpacePremier
Junior Member / Новичок
Участник № / Member № 8053
отправлено / posted 06.06.2019 14:45
Спасибо за ответ. В каком месте "Справки" написано, что для записи значений в Access, необходимо изменить настройки ОС?
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
АдАстра. Техподдержка
Administrator
Участник № / Member № 4
отправлено / posted 06.06.2019 15:17
“Введение/Системные требования”: “Настройка MS Windows Чтобы обеспечить корректную работу TRACE MODE 6 со значениями с плавающей запятой, в качестве разделителя дробной части числа в региональных настройках Windows должна быть установлена точка. ”
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |