2011-12-16 307 views
7

如何使用ADO中的CAST将Float值转换为字符串?ADO SQL类型强制浮点型转换为字符串(Excel)

我试图

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

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

,并总是得到一个OLE异常(未知的错误)。

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

我使用德尔福2009年ADO和Excel 2010

回答

2

也许使用CStr会的工作,即

SELECT CStr([Field]) FROM... 
+0

的CSTR似乎是一个有效的转换功能。现在它提供了另一个错误:未找到字段“字段”。我猜CSTR函数改变列名和。所以需要一个别名字段名称:SELECT [CString([Field])as [Field]。 Google会提供帮助:) – mjn 2011-12-16 11:50:45

+0

即使在投射后,打开结果集时仍然有错误 - “E_FAIL”。没有其他信息给出。我很喜欢Excel作为数据交换格式:P – mjn 2011-12-16 11:56:28

4

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

ADOQuery.FieldByName('Field').AsString

无法通过SQL语句投放。

this from MSDN约混合数据类型A小心):使用混合数据类型

ADO must guess at the data type for each column in your Excel worksheet or range. (This is not affected by Excel cell formatting settings.) A serious problem can arise if you have numeric values mixed with text values in the same column. Both the Jet and the ODBC Provider return the data of the majority type, but return NULL (empty) values for the minority data type. If the two types are equally mixed in the column, the provider chooses numeric over text.

你需要在的扩展属性部分添加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

尝试

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