0

VBScript を使用して .xls スプレッドシートをクエリしようとしていますが、フィールドをキャストしようとしたときに問題が発生しました。
このようにスプレッドシートに接続します。

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataSource & ";Extended Properties=""Excel 8.0;HDR=No;"";" 

次に、スプ​​レッドシートにクエリを実行しようとします。関心のあるフィールドには 10 進数値が含まれていますが、ワイルドカードとして * を含めることもできます。だから私がやろうとしているのは、フィールドを varchar にキャストして、* をチェックできるようにすることです。

Set objRecordset = CreateObject("ADODB.Recordset")
StrQuery = "SELECT * FROM [Sheet1$] WHERE F1 >= 2.3456 OR CAST(F1 AS VARCHAR) = '*'"
objRecordset.Open StrQuery, objConnection, adOpenDynamic, adLockOptimistic

これにより、未特定のエラー 80004005 が発生します。
注: CONVERT も試しましたが、未定義関数エラーが発生しました。

4

5 に答える 5

1

サーバーの次のレジストリ キーを変更します (もちろんバックアップを取った後)。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\ImportMixedTypes = Text
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows = 0

また、接続文字列を次のように変更します。

Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/PathTo/YourFile/" & Filename) & ";"
If chkUploadFileColumnsFirstRow.Checked Then
  sConnectionString &= "Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"
Else
  sConnectionString &= "Extended Properties='Excel 8.0;IMEX=1'"
End If

これらの基準を設定した後に失敗した場合は、シート名またはクエリ自体に問題があると思います。

于 2009-11-06T14:51:22.667 に答える
0

問題は、Microsoft Jet 4.0 エンジンがこのCAST()関数をサポートしておらず、VARCHARキーワードも (VARCHARデータ型も) 持っていないことです。なぜこの値をキャストする必要があるのですか? 値を処理する必要がありNULLますか?

データ型といえば:

F1 >= 2.3456

値は、固定小数点 10 進数2.3456型のリテラルです。DECIMALExcel にはネイティブの固定 10 進数型がないため、浮動小数点値と固定小数点値を比較する可能性が高くなります。

于 2009-11-06T15:47:34.363 に答える
0

IMEX=1;拡張プロパティに追加しようとすることができます。これにより、JDB は数字、日付、および文字列を組み合わせてテキストとして読み取るようになります。次に、次のことができるはずです。

SELECT * FROM [F1$]

つまり、ifF1が最初のワークシートの名前です。

于 2009-11-06T14:45:53.163 に答える
0

あなたの述語

F1 >= 2.3456 

提案F1は数値データ型です。数値をキャストして結果としてVARCHAR期待できる方法を説明してください*...? 私はそれが自分で起こっているのを見ることができません!

列に数値と*文字が含まれている場合は、型が混在し、Jet 4.0 エンジンは型を選択するかFLOAT(この場合は * 文字が値に置き換えられNULLます)、型を選択するか (この場合は数値) を決定する必要がNVARCHAR(255)あります。値科学表記法に変換される場合があります)。

レジストリ値を使用して結果に影響を与えることができる場合がありますが、データ型が既に選択されているため、SQL コードでそれを行うことは期待できません。

詳細については、「 Excel の毎日の使用: 外部データ -いわゆる専門家による混合データ型」を参照してください :) コメントには多くの詳細が隠されています。

于 2009-11-06T16:32:59.467 に答える