none
求救!!關於Interpo ADODB找不到組件的問題 RRS feed

  • 問題

  • 想請問:

    我用VB2008寫好一個程式,別人在使用時會出現錯誤訊息
    【Interpo ADODB...系統找不到檔案】的問題
    我沒有參照adodb.dll
    我是這樣宣告的
    Dim cnn1 As Object = New ADODB.Connection
    ...
    我自己是可以正常使用,但是發行給別人使用卻會出現問題
    請問該怎麼解決??
    謝謝。

    2009年4月29日 上午 09:30

解答

  • .Net 裡面發展了新的 ADO.NET 來取代 ADO ,市面上有專書介紹,書名可能就是 ADO.NET x.x ,並非顯示為 ADO.NET。

    而新增專案預設都有參照這個命名空間,也就是 System.Data ,依照連線字串的需求,ODBC 用 System.Data.Odbc ,Oledb 用 System.Data.Oledb ,其中,SQL Server 、Oracle 有針對效能考量另外包裝,例如:System.Data.Sql、System.Data.Oracle ,部份資料庫在該公司網站也有提供類似的類別,例如:System.Data.Mysql

    而 VSNET 下所有控制項與資料庫的整合均是使用 ADO.NET ,不支援 ADO ,所以說唯一能用到的地方就是舊的 COM 物件。

    重要的差異:ado 是 online 存取,ADO.NET 是 offline 存取。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 Jayce_Lin 2009年5月13日 上午 08:04
    2009年5月6日 上午 09:53
  • 不是,應該是System.Data.OleDb,如果是SQL Server用System.Data.SqlClient。
    • 已標示為解答 Jayce_Lin 2009年5月13日 上午 08:04
    2009年5月6日 上午 09:56
  • 您可以參考 :

    http://eoffice.im.fju.edu.tw/phpbb/viewtopic.php?t=3004

    搭配

    http://msdn.microsoft.com/zh-tw/library/system.data.oledb.aspx



    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已標示為解答 Jayce_Lin 2009年5月13日 上午 08:04
    2009年5月6日 上午 10:40

所有回覆

  • 您好 :
    看連這兩次的發文好像都是相關的問題 -->自己的系統上可以用 , 發行的檔案別人就無法用???
    您是使用安裝精靈來發行的嗎 ?
    在必要條件上是否有不當的設定呢
    另外在程式輸出的設定上是不是正確呢

    2009年4月29日 上午 09:35
  • 剛剛爬文才發現原來標題不能用"求救"這種字眼
    真是抱歉。

    第一份文章的程式(有關excel找不到組件的問題),有些人可以正常使用
    有些人無法正常使用,我也找不出什麼辦法可以解決
    有些人更新office後就可以正常使用,有些人卻還是不行。
    這個找不到ADODB的程式我只找了三個人幫我試用,出現的結果都是一樣。
    發行的方式我是直接在VB2008裡
    建置→發行,來做的
    輸出的設定上,我不曉得還要設定什麼??
    有什麼特別要注意的地方嗎?
    謝謝解答。
    2009年4月30日 上午 02:05
  • 求救是無所謂,只是不要像某些人等沒多久就在板上開罵,這種人才是不受歡迎的。

    看你使用的是 ClickOnce,建議你使用安裝專案來開發部署的功能。
    因為有些核心檔案 (Office PIAs 也是) 用 ClickOnce 是無法部署的。
    小人物一枚。
    2009年4月30日 上午 02:27
    版主
  • 好,我會試試看。
    謝謝。
    2009年4月30日 上午 03:23
  • 在 ASP.NET 回過你了:
    沒有參照 Adodb.dll 就不能用 New ADODB.Connection ,因為根本沒這個東西。
    使用延後連結是透過 CreateObject 來建立物件。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月30日 上午 06:27
  • 這是我的code:
                Dim command As Object = CreateObject("ADODB.Command")
                Dim rs As Object = CreateObject("ADODB.Recordset")
                '  cnnl = New ADODB.Connection
                Dim adOpenKeyset As Object = CreateObject("ADODB.CursorTypeEnum.adOpenKeyset")
    執行到這一行會出現無法建立"Active X元件"的錯誤訊息請問該怎麼去修正?

                Dim adLockOptimistic As Object = CreateObject("ADODB.LockTypeEnum.adLockOptimistic")

                cnnl.ConnectionString = "DSN=CIS;DATABASE=CIS;UID=cis;PWD=cis"
                cnnl.ConnectionTimeout = 5      ' 逾時時間
                cnnl.Open()
                XlsBok2 = XlsApp.Workbooks.Open("\\tperdfs1\CIS\download_code\Link CIS_Error.xls")
                For x2 = 2 To AllRow
                    XlsSheet1.Activate()
                    PN = XlsSheet1.Range("F" & x2).Value
                    If Strings.Len(PN) = 11 Then
                        sqlstr = "select * From CIS Where ([Part Number] = '" & PN & "') "
                        ' rs = New ADODB.Recordset
                        rs.Open(sqlstr, cnnl, adOpenKeyset, adLockOptimistic)
    對不起,code有點亂...請見諒!!

    2009年4月30日 上午 09:19
  • 並不是所有物件都能透過 CreateObject 建立,只有公開的根物件才能建立。

    此外所有常數都不能建立,OWC 是將所有常數包裝成一個物件 Constansts 對外公開。

    因此微軟對此提供了一個宣告好的檔案,只要去下載來引用即可,但檔案是針對 vb6/vba/vbscript ,到了 vbnet 需要調整。
    請搜尋 "adovbs.inc"

    裡面有你要的參數宣告:
    '---- LockTypeEnum Values ----
    Const adLockReadOnly = 1
    Const adLockPessimistic = 2
    Const adLockOptimistic = 3
    Const adLockBatchOptimistic = 4

    從你貼的程式碼中,看不出需要在 VBNET 中使用 ADO 的原因,請改用 ADO.NET 。

    在 VBNET 中要使用 ADO 的情形,多半是把 recordset 指給 OWC 這種使用 ado 的舊 COM 物件,你的程式碼中並沒有這種情形需要處理。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月30日 上午 09:49
  • 好~謝謝。
    我會試試看...感恩。

    2009年5月5日 上午 12:42
  • 我參考ADO.NET後
                Dim queryString As String = "DSN=CIS;DATABASE=CIS;UID=cis;PWD=cis"
                Dim command As Object = CreateObject("ADODB.Command")
                Dim rs As Object = CreateObject("ADODB.Recordset")
    Dim cnnl As Object = CreateObject("ADODB.Connection")

                cnnl.ConnectionString = "DSN=CIS;DATABASE=CIS;UID=cis;PWD=cis"
                cnnl.ConnectionTimeout = 5      ' 逾時時間
                cnnl.Open()
                XlsBok2 = XlsApp.Workbooks.Open("\\tperdfs1\CIS\download_code\Link CIS_Error.xls")
                For x2 = 2 To AllRow
                    XlsSheet1.Activate()
                    PN = XlsSheet1.Range("F" & x2).Value
                    If Strings.Len(PN) = 11 Then
                        sqlstr = "select * From CIS Where ([Part Number] = '" & PN & "') "
                        rs.Open(sqlstr, cnnl, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
    執行到這行會出現"當物件開啟時不允許操作",是不是我開啟的方式不對呢?
    謝謝解答。

    2009年5月6日 上午 02:49
  • 參考 ADO.NET 後幹嘛用 ADO 存取?你寫的很矛盾喔~

    你把你 DSN 中取名為 CIS 的東西拿出來說看看,是不是這個 Excel 檔,還是其他?比如說 Access 檔?

    你的錯誤訊息是說,你這個資料庫被鎖住,不能開,每種資料庫被鎖住的情況不同,要看資料庫本身才能猜可能發生的狀況,例如:
    1. 被獨佔權限鎖住
    2. Excel 檔同時之間只能有一個程式存取。
    3. Access 檔處於設計模式下。

    另外你用這個:ADODB.CursorTypeEnum.adOpenKeyset,表示你還在使用 ADODB 的參照,則你仍未使用到延後連結,除非你有在其他地方宣告常數,而沒貼出來。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年5月6日 上午 06:11
  • 對不起,問一個笨問題
    我在加入參考的視窗裡.NET的視窗
    只有看到adodb,我是參考這個
    跟你說的ADO.NET不一樣嗎?
    因為我沒看到這個選項
    對不起麻煩你再回答一下,謝謝。

    2009年5月6日 上午 09:38
  • .Net 裡面發展了新的 ADO.NET 來取代 ADO ,市面上有專書介紹,書名可能就是 ADO.NET x.x ,並非顯示為 ADO.NET。

    而新增專案預設都有參照這個命名空間,也就是 System.Data ,依照連線字串的需求,ODBC 用 System.Data.Odbc ,Oledb 用 System.Data.Oledb ,其中,SQL Server 、Oracle 有針對效能考量另外包裝,例如:System.Data.Sql、System.Data.Oracle ,部份資料庫在該公司網站也有提供類似的類別,例如:System.Data.Mysql

    而 VSNET 下所有控制項與資料庫的整合均是使用 ADO.NET ,不支援 ADO ,所以說唯一能用到的地方就是舊的 COM 物件。

    重要的差異:ado 是 online 存取,ADO.NET 是 offline 存取。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 Jayce_Lin 2009年5月13日 上午 08:04
    2009年5月6日 上午 09:53
  • 不是,應該是System.Data.OleDb,如果是SQL Server用System.Data.SqlClient。
    • 已標示為解答 Jayce_Lin 2009年5月13日 上午 08:04
    2009年5月6日 上午 09:56
  • 您可以參考 :

    http://eoffice.im.fju.edu.tw/phpbb/viewtopic.php?t=3004

    搭配

    http://msdn.microsoft.com/zh-tw/library/system.data.oledb.aspx



    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已標示為解答 Jayce_Lin 2009年5月13日 上午 08:04
    2009年5月6日 上午 10:40
  • 了解~感恩!!!

    2009年5月13日 上午 08:05