Board logo

標題: 如何擷取出Recordset的Table Name [打印本頁]

作者: clio    時間: 2018-2-5 09:39     標題: 如何擷取出Recordset的Table Name

請教各位大大
不知道是如有辨法由ADODB內的Connection或是Recordset來取得他原先連線的Table Name為何呢?
作者: GBKEE    時間: 2018-2-5 13:14

回復 1# clio
試試看
工具-設定引用項目,選中 "Microsoft DAO3.6 Object Library”
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Da As DAO.Database, ta As DAO.TableDef
  4.     Set Da = DAO.OpenDatabase("路徑\Database.mdb")
  5.     For Each ta In Da.TableDefs
  6.         If InStr(ta.Name, "MSys") = 0 Then Debug.Print ta.Name
  7.     Next
  8.     Da.Close
  9. End Sub
複製代碼

作者: clio    時間: 2018-2-5 14:29

回復 2# GBKEE

Hi GBKEE,
我在載入Microsoft DAO 3.6 Object Libaray時發生錯誤,不知道有方法可以解嗎?
作者: c_c_lai    時間: 2018-2-7 06:57

本帖最後由 c_c_lai 於 2018-2-7 07:00 編輯

回復 1# clio
回復 2# GBKEE
GBKEE 版大,新年快樂!
步驟一:
在你的 C:\Program Files (x86)\Common Files\microsoft shared\DAO  找找看是否有 DAO 目錄 ? 且內有 Dao360.dll ?
[attach]28337[/attach]
步驟二:
將該 DAO 目錄整個複製到 C:\Program Files\Common Files\microsoft shared 內 (假設你電腦是 64 位元)
[attach]28338[/attach]
[尚未註冊]
Type the following command: regsvr32 /u dao360.dll.
Hit ENTER. This will UN-REGISTER your file.

[重新註冊]
Type the following command: regsvr32 /i dao360.dll.
Hit ENTER. This will RE-REGISTER your file.

步驟三:
關閉命令提示字元,再測試你的問題。
Close the command prompt window.
作者: c_c_lai    時間: 2018-2-7 07:11

回復 3# clio
[attach]28339[/attach]
作者: clio    時間: 2018-2-7 09:21

回復 4# c_c_lai

感謝c_clai
經過您的告知檔案路徑後,我直接在Excel裡面指定路徑的方式就能抓取了,感謝您的協助。
作者: clio    時間: 2018-2-7 09:33

回復 2# GBKEE

Hi GBKEE,
感謝您的協助,我也試過了,這個是否是給Access使用,因為那個路徑我不清楚,所以試不出來,
我是用Excel裡面的VBA去抓SQL或是ORACLE等多個Database,一開始是把連線到的資料轉回Recordset,再使用Recordset來做後續找搜比對的工作,
因為有新增一個工能,需要作代有萬用字元的比對,所以無法使用Recordset.Find的方法來完成,只好需要重新連結SQL或ORACLE,然後從Recordset的資訊,好像又無法快速得到Table Name
才想請教大大,是否有更好的方法,還是我只能從Recordset.Source的字串資訊來擷取嗎?
對不起由於我對這方面不是很了解,或許會問了很奇怪的問題,還請見諒,感謝您。
作者: GBKEE    時間: 2018-2-7 11:02

本帖最後由 GBKEE 於 2018-2-7 11:04 編輯

回復 7# clio
  1. Option Explicit
  2. '引用:Microsoft Ado Ext.2.x For DDL And Security
  3. Sub Ex_Ado()
  4.     Dim myCat As New ADOX.Catalog, myBook As String, i As Integer
  5.     Dim strUser As String, strPWD As String, Msg As String
  6.     myBook = "d:\excel\資料庫.xlsx"  '指定要查詢的工作簿完整名稱
  7.     Msg = UCase(Split(myBook, ".")(UBound(Split(myBook, "."))))
  8.     Select Case Msg  '建立與指定工作薄的連接
  9.         Case "XLS"
  10.             myCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
  11.             & "Extended Properties=Excel 8.0;" & "Data Source=" & myBook
  12.         Case Is = "XLSM", Is = "XLSX"
  13.             myCat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
  14.             & "Extended Properties=""Excel 12.0 xml"";" & "Data Source=" & myBook
  15.          Case "MDB"
  16.             myCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myBook & _
  17.             ";User ID=" & strUser & ";Jet OLEDB:Database Password=""" & strPWD & """;"
  18.     End Select
  19.     Cells.Clear
  20.     Range("A1:B1") = Array("查詢出的名稱", "處理後的名稱")
  21.     With myCat.Tables
  22.         For i = 0 To .Count - 1
  23.             Cells(i + 2, 1) = .Item(i).Name
  24.           If Msg <> "MDB" Then Cells(i + 2, 2) = Mid(.Item(i).Name, 1, Len(.Item(i).Name) - 1)
  25.         Next
  26.     End With
  27. End Sub
複製代碼

作者: clio    時間: 2018-2-8 09:56

回復 8# GBKEE

感謝GBKEE大大的解答,完全符合我的需求,讓我解決了這個問題,另一個問題是想請教一下
引用:Microsoft Ado Ext.2.x For DDL And Security
我裡面有看到有二個選擇
Microsoft Ado Ext. 2.8 For DDL And Security
Microsoft Ado Ext. 6.0 For DDL And Security
不知道這二者的差異在那邊呢?
作者: c_c_lai    時間: 2018-2-8 11:22

回復 9# clio
請參考:
https://www.google.com.tw/search ... grc=jNigEDSJFz8OfM:
作者: clio    時間: 2018-2-9 09:13

回復 10# c_c_lai

感謝c_c_lai,的幫忙,:)
作者: clio    時間: 2018-2-9 09:15

回復 10# c_c_lai

感謝c_c_lai的熱心協助,我大約知道了,萬分感謝您




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)