2011-12-16 306 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 ...