none
使用 Microsoft Jet OLE DB Provider連接EXCEL無法正常連接 RRS feed

  • 問題

  • 各位前輩

    小弟是剛寫程式的人,目前使用VB2005搭配Office2003,我按照網路上所找到的連接EXCEL的方法:

    使用 Microsoft Jet OLE DB Provider

    Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
    "Extended Properties=Excel 8.0;"
    結果卻跑出

    無效的 SQL 陳述式;預期為'DELETE'、'INSERT'、'PROCEDURE'、'SELECT' 或 'UPDATE' 。
    請問這是什麼意思阿?

     

     

    另外請問各位前輩,連結excel目前市面上有書可以學習嗎,還是只能在網路上找尋相關知識來學習呢

    2007年4月20日 上午 04:20

解答

  • ...

    你不是沒講清楚,是差很多...

    VBNET 用的是 ADONET ,與 SpreadSheet 用的 ADO 差很多,一般說 VB2005 是會當成用 ADO.NET ...

     

    你的要直接把連線字串指給 SpreadSheet 。

     

    例如:

    程式碼
    With Spreadsheet1.ActiveSheet
       .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"
       .CommandText = "Select * From TableName"
    End With

     

    藍色稱為連線字串

    綠色稱為查詢字串,也就是你的 SQL 語法。

     

    你也沒提供你如何把連線字串指給 SpreadSheet ,根本不知道你問題在哪裡。

    2007年4月20日 下午 01:34
    版主
  • 1. 你短缺引號,造成無法辨識,引號必是成對的,請數一下,見紅色粗體是你短缺的,藍色粗體應與紅色粗體成對:

    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\EXCEL1.xls;Mode=Share Deny None;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"

     

    2. TableName 在 Excel 是下方的頁籤。若是你下方的頁籤叫做 Sheet1 請用 Sheet1 取代,若有特殊符號或中文,建議包成 [Sheet1$] 這種形式。

    2007年4月22日 下午 04:28
    版主

所有回覆

  • Hi,下面是我自己讀取Excel用的程式碼片段,參考看看

    Code Snippet

     

    Dim CN_Excel As OleDb.OleDbConnection
     Dim DA_Excel As OleDb.OleDbDataAdapter
     Dim DS_Excel As DataSet

     

    CN_Excel = New OleDb.OleDbConnection( _
                    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dlgOpenFile.FileName & _
                    "; Extended Properties=Excel 8.0;")
     DA_Excel = New OleDb.OleDbDataAdapter( _
                    "select * from [" & txtSheetName.Text & "$]", _
                    CN_Excel)
     DS_Excel = New DataSet
     DA_Excel.Fill(DS_Excel)

     

    2007年4月20日 上午 05:10
    版主
  • 你把你的 SQL 語法輸出來才能除錯,你這邊指有連線字串,沒有查詢字串。
    2007年4月20日 上午 10:20
    版主
  •  璉璉 寫信:
    你把你的 SQL 語法輸出來才能除錯,你這邊指有連線字串,沒有查詢字串。

     

     

    不好意思,

    各位前輩,我沒有把問題講的很清楚

    在補充一下好了

    我是用Axspreadsheet顯示出一個EXCEL的畫面,

    然後運用它內部的資料連接要去聯繫一個EXCEL檔案,讓那個資料夾的內容可以直接秀在Axspreadsheet上面

    在聯繫資料時候會發生我這篇文章發問的那個問題,請問有哪位前輩可以教導我要怎麼連接

     

    "璉璉"前輩,我不太了解您上面所敘訴的意思,可以請您在解釋一下嗎

     

                                        謝謝!!!

    2007年4月20日 下午 12:32
  • ...

    你不是沒講清楚,是差很多...

    VBNET 用的是 ADONET ,與 SpreadSheet 用的 ADO 差很多,一般說 VB2005 是會當成用 ADO.NET ...

     

    你的要直接把連線字串指給 SpreadSheet 。

     

    例如:

    程式碼
    With Spreadsheet1.ActiveSheet
       .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"
       .CommandText = "Select * From TableName"
    End With

     

    藍色稱為連線字串

    綠色稱為查詢字串,也就是你的 SQL 語法。

     

    你也沒提供你如何把連線字串指給 SpreadSheet ,根本不知道你問題在哪裡。

    2007年4月20日 下午 01:34
    版主
  •  

     "璉璉前輩"你所指的是這個程式碼嗎?

    我目前依照這樣下去執行,他結果會產生

    引述中可能發生類型錯誤,超過可接受的定義範圍,或與其他引述發生衝突

     

    Code Snippet
    Private Sub AxSpreadsheet1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxSpreadsheet1.Enter
            With AxSpreadsheet1.ActiveSheet
                .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\EXCEL1.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"
                .CommandText = "Select * From TableName"
            End With
        End Sub

     

    希望不會再誤會您的意思了,謝謝您的幫忙唷

    謝謝

    2007年4月22日 下午 03:13
  • 1. 裡面一堆可省略的參數,建議你省略簡化問題。

    2. 請注意字串引號起、迄、相連的意義。

    2007年4月22日 下午 03:25
    版主
  • 不好意思,又來問問題了

    "璉璉前輩",我把程式碼改成

     

    Code Snippet
    With AxSpreadsheet1.ActiveSheet
                .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\EXCEL1.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1';"
                .CommandText = "Select * From TableName"
            End With
        End Sub

     執行結果卻跑出

    找不到可安裝的ISAM

    的Excel是2003板的,那還可以設為Excel 8.0嗎?還是要更改為其他的阿

    還是我有其他地方出現錯誤呢

    2007年4月22日 下午 04:02
  • 1. 你短缺引號,造成無法辨識,引號必是成對的,請數一下,見紅色粗體是你短缺的,藍色粗體應與紅色粗體成對:

    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\EXCEL1.xls;Mode=Share Deny None;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"

     

    2. TableName 在 Excel 是下方的頁籤。若是你下方的頁籤叫做 Sheet1 請用 Sheet1 取代,若有特殊符號或中文,建議包成 [Sheet1$] 這種形式。

    2007年4月22日 下午 04:28
    版主
  • 感謝"璉璉前輩"

    已經可以執行了

    萬分的感謝!!!!!!

     

    另外想問下,建議包成 [Sheet1$]的意義是什麼意思呢?

    一開始我只使用Sheet1他是無法執行的,

     

    2007年4月22日 下午 04:46
  • Excel 並非為真正資料庫,當資料庫使用時,正規來說,表格名應該使用 [SheetName$]

    少數情況下,可以省略,直接使用 SheetName。

     

    另,Excel 並不是設計為資料庫使用,所以無法多人同時存取,開啟時會被鎖定。

    2007年4月22日 下午 04:54
    版主
  • 再度請問前輩一個問題,

    我試著把它檔案的路徑改成

    C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\excel\excel.xls

    只有這個地方改變,其他地方我都跟之前設定一樣

     

    為什麼測試連線的結果會顯示:

     

    因為初始化提供者時遭遇錯誤,測試連線失敗,外部資料表不是預期的格式

     

    謝謝指導!!
    2007年4月22日 下午 05:28
  • 從你目前提供的資訊無法判定。

    請確認該目錄是否有足夠的權限存取。

    2007年4月23日 上午 02:19
    版主