2011-02-04 6 views
1

Microsoft Excel Driverを使用してExcel文書をadodb.recordsetにインポートして、重複行を削除してSQL Serverデータベースに格納できるようにしています。odbc excelドライバでデータ型をキャスト

最初の列の値は192,13U、JJJなどですが、何らかの理由でクエリでdouble型としてキャストされ、アルファ値を持つ行がNullに変換されます。これは、マジョリティの種類がテキストではなく数値であるためです。

キャストしようとしましたが、エラーが発生しました。

Function Read_Excel(ByVal sFile As String) As ADODB.Recordset 
    On Error GoTo fix_err 
    Dim rs As ADODB.Recordset 
    rs = New ADODB.Recordset 
    Dim sconn As String 

    rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient 
    rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset 
    rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic 

    sconn = "DRIVER=Microsoft Excel Driver (*.xls); ImportMixedTypes=Text; " & "DBQ=" & sFile & ";Extended Properties='Excel 8.0;HDR=No;IMEX=1';" 
    rs.Open("SELECT Code, Description FROM [sheet1$]", sconn) 
    tot += rs.RecordCount 
    rs.Close() 
    rs.Open("SELECT Distinct * FROM [sheet1$]", sconn) 
    Read_Excel = rs 
    rs = Nothing 
    Exit Function 
fix_err: 
    Debug.Print(Err.Description + " " + _ 
       Err.Source, vbCritical, "Import") 
    Err.Clear() 
End Function 

簡単にテキストとして最初の列を取得する方法があります:

は、ここに私の機能ですか?

EDIT:私は"SELECT cast(RPOCode as varchar(10)), Description FROM [sheet1$]"にしようとしたとき、私はクエリ式でこのエラー
「[Microsoft]の[ODBCエクセルドライバー]構文エラー(演算子がありません)を取得 '(varchar型としてコード)キャストは、' ODBC用のMicrosoft OLE DBプロバイダードライバ "
同じ結果を持つキャストタイプとしてvarchar、varchar(10)およびtextを試しました。

+1

**何がエラーでしたか?!?!私たちは気になる読者ではありません - 私たちに知らせる必要があります! –

+0

"[Microsoft] [ODBC Excel Driver]クエリ式 'cast(Code as varchar)'の構文エラー(演算子がありません)ODBCドライバのMicrosoft OLE DBプロバイダ キャストタイプとしてvarcharとtextを試しました。 – AndyD273

答えて

4

試してみてください。

rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn) 

キャストは、ジェット/ ACE SQLでは使用できません。

+0

それはエラーを取り除きますが、Nullの代わりに、Nullを文字列に変換するような空の文字列を取得します。 – AndyD273

+0

ACEについてのその部分がわかりました。私はhttp://www.connectionstrings.com/excelでそれを見て覚えているが、それを試して考えていない。 – AndyD273

0

Microsoft Excelドライバの代わりにACE接続文字列を試してみました。

sconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";" 

となり、IMEX = 1の部分がそこにあることが確認されました。 Microsoft Excelドライバが拡張プロパティを正しく使用しているとは思わない。

関連する問題