Я создаю приложение, которое должно импортировать файлы 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, так как он очень дорогой.
Номер кода города извлекается как значение с плавающей запятой*, и форматом по умолчанию для чисел с плавающей запятой является (очевидно) научная нотация, т.е.
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.
Других решений пока нет …