2011-12-16 25 views
7

ADOでCASTを使用してFloat値をStringに変換するにはどうすればよいですか?ADO SQL型キャストFloat to String(Excel)

私は

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

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

を試してみましたが、常にOLE例外(不明なエラー)を取得します。

テーブルの列には、数値(右揃え)と英数字(左揃え)の値が混在しています。英数字の値のみがある場合、ADOクエリフィールドの型はStringです。私は2010年

答えて

2

はおそらくCStrを使用するとうまくいくのDelphi 2009 ADOやExcelを使用しています

は、すなわち

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

を試してみてください。今度は別のエラーが表示されます:フィールド "フィールド"が見つかりません。私は、CSTR関数が列名と列を変更すると思います。したがって、別名フィールド名が必要です:SELECT CStr([Field])as [Field]。 Googleに助けてもらいますか? – mjn

+0

キャストした後でも、結果セット「E_FAIL」を開いている間にエラーが発生します。その他の情報はありません。私はExcelをデータ交換フォーマットとして愛しています:P – mjn

+0

フィールドがすでに文字列である場合、おそらくCSTRが失敗しますか? 'SELECT iif(fieldType([field])<>文字列、CStr([field])、[field])FROM'のように、フィールドに文字列型の値を持たない行だけをキャストしてみてください。私は頭の上から正しい構文がわからないが、あなたは考えを得る... – ain

4

CASTは、SQL-Serverの式です。 DelphiでSELECT Field FROM...

を使用:ADOQuery.FieldByName('Field').AsString

あなたは、SQL文を経由して、それをキャストすることはできません。

混在データ型を使用して:

読むthis from MSDN混在データ型に関する注意事項):

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

+0

Delphiアプリケーションでは永続フィールドが使用されるため、結果セットを開くときにエラーが発生します。これは、Openが既に失敗しているために.AsStringを使用できないことを意味します。 – mjn

+0

単純な選択を使用しても失敗しますか?すなわち: "select * from $ sheet1"(キャストなし)?「永続的なフィールド」とはどういう意味ですか? – kobik

+0

"永続フィールド"は、テーブルの各列に対して、型、サイズ、精度、キャプションなどのプロパティを格納するコンポーネントと似ています。簡単なselect *が機能します。しかし、特別な要件がある場合、これらのフィールドコンポーネントが存在し、実際のデータ型と一致しない型を持つ場合、Delphi ADOコンポーネントは例外を発生させ、発生させます。 – mjn

1

は、CSTRが有効な変換関数であるように思わ

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