Тип ADO SQL приведен с плавающей точкой в ​​строку (Excel) - PullRequest
7 голосов
/ 16 декабря 2011

Как использовать CAST в ADO для преобразования значений с плавающей точкой в ​​строку?

Я пытался

SELECT CAST([Field] AS VARCHAR(20)) FROM ...

и

SELECT CAST([Field] AS STRING) FROM ...

и всегда получал OLEИсключение (неизвестная ошибка).

Столбец таблицы содержит смешанные числовые (по правому краю) и буквенно-цифровые (по левому краю) значения.Если имеются только буквенно-цифровые значения, тип поля запроса ADO - Строка.

Я использую Delphi 2009 ADO и Excel 2010.

Ответы [ 3 ]

4 голосов
/ 16 декабря 2011

CAST - это выражение SQL-Server.используйте SELECT Field FROM...

в delphi: ADOQuery.FieldByName('Field').AsString

вы не можете привести его с помощью оператора SQL.

при использовании смешанных типов данных :

Чтение это из MSDN ( Предупреждение о смешанных типах данных ):

ADO должен угадать тип данных для каждого столбца в вашемЛист Excel или диапазон.(Это не зависит от настроек форматирования ячеек Excel.) Серьезная проблема может возникнуть, если в одном столбце смешаны числовые значения с текстовыми значениями.И Jet, и поставщик ODBC возвращают данные типа большинства, но возвращают значения NULL (пустые) для типа данных меньшинства.Если два типа одинаково смешаны в столбце, поставщик выбирает числовое значение поверх текста.

, вам необходимо добавить IMEX=1 в разделе расширенных свойств строки подключения.,постоянное поле будет TWideStringField.

Строка подключения должна выглядеть примерно так:

Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\MyFile.xls;Mode=Share Deny None;Extended Properties="Excel 8.0;IMEX=1";...

2 голосов
/ 16 декабря 2011

Возможно, с использованием CStr будет работать, т.е.

1 голос
/ 16 декабря 2011

Попробуйте

SELECT IIF([Field] IS NULL, NULL, CSTR([Field])) AS [Field]
  FROM ...
...