ADO SQLtypes强制转换为string(Excel)

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

我试过了

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

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

总是得到一个OLEexception(未知的错误)。

表格列包含混合数字(右alignment)和字母数字(左alignment)值。 如果只有字母数字值,ADO查询字段types是string。

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

CAST是SQL-Serverexpression式。 使用SELECT Field FROM...

在delphi中: ADOQuery.FieldByName('Field').AsString

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

当使用混合数据types时

请阅读MSDN ( 关于混合数据types的注意事项 ):

ADO必须猜测Excel工作表或范围中每个列的数据types。 (这不受Excel单元格格式设置的影响。)如果在同一列中将数值与文本值混合,则会出现严重问题。 Jet和ODBC提供程序都返回多数types的数据,但为less数数据types返回NULL(空)值。 如果这两种types在列中均匀混合,提供者将在文本上select数字。

您需要在连接string的扩展属性部分添加IMEX=1 。 持久字段将是TWideStringField。

连接string应该看起来像这样:

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";...

也许使用CStr会工作,即

 SELECT CStr([Field]) FROM... 

尝试

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