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