Access ODBC: неверное значение, возвращаемое для числовых (целочисленных) полей

Я создаю приложение, которое должно импортировать файлы Microsoft Access. Приложение написано на php, и следуйте следующему руководству по настройке среды. (https://gist.github.com/amirkdv/9672857)

Скачал драйвер ODBC libmdbodbc1 и не смог получить числовые значения. Думая, что проблема может быть в драйвере, затем скачал пробный драйвер, предоставленный Easysoft, и, к моему удивлению, у меня возникла та же проблема. (http://www.easysoft.com/products/data_access/odbc-access-driver/index.html#section=tab-1)

В файле, который я использую, у меня есть следующая структура:

введите описание изображения здесь

Когда я запускаю запрос в базе данных, он возвращает мне следующий результат:

введите описание изображения здесь

Я запускаю запрос непосредственно из командной строки через mb -tools, потому что сначала я подумал, что это может быть проблема с PHP

Я перепробовал все мыслимые, так как прослеживал каждый шаг, и обе командной строки, так как по PHP получают одинаковый результат. Уже проверено и на другой машине.

Примечание: я попытался сделать запрос с другими файлами и получил ту же ошибку, но я думаю, что проблема не в файле.

Примечание 2: я решил проблему. Возвращаемое значение — это значение в двойном формате. Вероятно, драйвер был написан на C, который удваивается таким образом. Используя драйвер EasySoft с PHP, я получил правильное представление. Вскоре проблема была с libmdbodbc1 Я буду искать альтернативу водителю EasySoft, так как он очень дорогой.

2

Решение

Номер кода города извлекается как значение с плавающей запятой*, и форматом по умолчанию для чисел с плавающей запятой является (очевидно) научная нотация, т.е.

201 = 2.01 times 10 to the power of 2 --> 2.01000e+02

Если ваш драйвер ODBC (MDB Tools?) Поддерживает CInt() функция для преобразования значения в целое число, то вы могли бы использовать

SELECT CInt(area_code) AS areacode ...

Или, если это не сработает, вы можете попробовать использовать CONVERT() Функция ODBC

SELECT { fn CONVERT(area_code, SQL_INTEGER) } AS areacode ...

В противном случае вы можете просто преобразовать значение в целое число после того, как получите его с помощью функции PHP, например intval ().

* Один из распространенных способов для этого — импортировать числовые значения из Excel в Access. По умолчанию числовые значения импортируются в Access как Doubleдаже если они на самом деле просто целые числа в документе Excel.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]