ADO SQL类型将Float转换为String(Excel)

时间:2011-12-16 10:53:17

标签: sql delphi excel ado

如何在ADO中使用CAST将Float值转换为String?

我试过

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

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

并始终获得OLE异常(未知错误)。

表格列包含混合数字(右对齐)和字母数字(左对齐)值。如果只有字母数字值,则ADO查询字段类型为String。

我正在使用Delphi 2009 ADO和Excel 2010。

3 个答案:

答案 0 :(得分:4)

CAST是SQL-Server表达式。使用SELECT Field FROM...

在delphi中的

ADOQuery.FieldByName('Field').AsString

你不能通过SQL语句强制转换它。

使用混合数据类型时:

阅读this from MSDN关于混合数据类型的注意事项):

  

ADO必须猜测Excel中每列的数据类型   工作表或范围。 (这不受Excel单元格格式的影响   设置。)如果您有数字值,可能会出现严重问题   与同一列中的文本值混合。 Jet和ODBC都有   Provider返回多数类型的数据,但返回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";...

答案 1 :(得分:2)

也许使用CStr会起作用,即

SELECT CStr([Field]) FROM...

答案 2 :(得分:1)

尝试

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