天天看點

ADO元件學習知識點整理(建議收藏)

作者:大戰百杠精

1、ADO是什麼,如何使用?

ADO是ActiveX資料對象(ActiveX Data Objects)的縮寫,是一種微軟的技術,用于從網頁通路資料庫¹²。ADO是一個Active-X元件,會随微軟的IIS被自動安裝¹²。ADO是一個通路資料庫中資料的程式設計接口,可以使用不同的語言,如ASP、VB、C#等²³。

使用ADO的一般步驟如下:

  • 建立一個到資料庫的ADO連接配接
  • 打開資料庫連接配接
  • 建立ADO記錄集
  • 從記錄集提取您需要的資料
  • 關閉記錄集
  • 關閉連接配接

具體的代碼示例可以參考³⁴。

(1) ADO 簡介 - w3school. https://www.w3school.com.cn/ado/ado_intro.asp. (2) ADO 簡介 | 菜鳥教程. https://www.runoob.com/ado/ado-intro.html. (3) ADO 教程 | 菜鳥教程. https://www.runoob.com/ado/ado-tutorial.html. (4) ADO是什麼?它的作用是什麼?_百度知道. https://zhidao.baidu.com/question/9003082.html.

2、ado除了excel中還有哪裡能用到

ADO除了Excel中,還可以用于通路其他類型的檔案,如CSV、TSV、xls、mdb等¹²。ADO可以使用不同的語言,如ASP、VB、C#等,來操作這些檔案中的資料²³。ADO可以使用SQL語句來實作資料的過濾、聚合、計算等功能¹⁴。

(1) 如何使用ADO 的方式讀寫EXCEL - 知乎 - 知乎專欄. https://zhuanlan.zhihu.com/p/357675861. (2) 【進階】使用 ADO 操作 Excel 文檔 - 知乎 - 知乎專欄. https://zhuanlan.zhihu.com/p/19767178. (3) 利用ADO連接配接EXCEL,并實作資料的複雜計算 - 知乎. https://zhuanlan.zhihu.com/p/72625633. (4) VBA+ADO+SQL「高效查詢」 - 知乎 - 知乎專欄. https://zhuanlan.zhihu.com/p/350970006.

3、ADO操作CSV檔案示例

ADO操作CSV檔案的例子有很多,這裡給你一個簡單的參考¹。假設你有一個CSV檔案,内容如下:

Name,Number
A,1
B,1
C,2
D,2
E,1
F,1           

你可以使用以下代碼來讀取這個檔案中的資料,并顯示出Number等于2的那些行:

Set cnn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""text;HDR=Yes;FMT=Delimited (,)"";Data Source=" & ThisWorkbook.Path & "\"
SQL = "select * from [test.csv] where Number = 2"
Set rs = cnn.Execute(SQL)
Sheets("結果").Cells.ClearContents
Sheets("結果").Range("a2").CopyFromRecordset rs
For i = 0 To rs.Fields.Count - 1
    Sheets("結果").Cells(1, i + 1) = rs.Fields(i).Name
Next
rs.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
MsgBox "OK"           

(1) 利用VBA快速處理EXCEL、CSV資料---超簡代碼 - 知乎. https://zhuanlan.zhihu.com/p/459235265. (2) Import or update work items in bulk with CSV files - Azure Boards. https://learn.microsoft.com/en-us/azure/devops/boards/queries/import-work-items-from-csv?view=azure-devops. (3) 使用 ADO 導入 CSV 檔案delphi導出csv_pcplayer的部落格-CSDN部落格. https://blog.csdn.net/pcplayer/article/details/115221601. (4) ADO+讀取、彙總CSV檔案ado csv 3f_qq_44390640的部落格-CSDN部落格. https://blog.csdn.net/qq_44390640/article/details/97099399.

4、Open方法講解

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""text;HDR=Yes;FMT=Delimited           

這段代碼是用來打開一個ADO連接配接對象,用于通路CSV檔案的。其中:

  • rovider=Microsoft.ACE.OLEDB.12.0 是指定使用的資料提供者,用于連接配接不同類型的資料源。
  • Extended Properties=""text;HDR=Yes;FMT=Delimited 是指定連接配接的一些屬性,如檔案類型、是否有标題行、分隔符等。
  • Data Source 是指定要通路的檔案的路徑。

5、ConnectionString和open後面得參數有關聯麼?

是的,ConnectionString和open後面的參數有關聯。ConnectionString是一個屬性,用于存儲連接配接字元串,也就是open後面的參數。你可以先給ConnectionString指派,然後再調用open方法,也可以直接在open方法中傳入連接配接字元串。兩種方式是等效的。例如:

'方式一:先給ConnectionString指派,再調用open
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""text;HDR=Yes;FMT=Delimited (,)"";Data Source=" & ThisWorkbook.Path & "\"
cnn.Open

'方式二:直接在open方法中傳入連接配接字元串
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""text;HDR=Yes;FMT=Delimited (,)"";Data Source=" & ThisWorkbook.Path & "\"           

6、open 必須要填寫那些參數

open方法有四個參數,分别是ConnectionString, UserID, Password, Options。其中,隻有ConnectionString是必須要填寫的,其他三個參數都是可選的。ConnectionString是指定要連接配接的資料源的字元串,UserID和Password是指定連接配接時的身份驗證資訊,Options是指定連接配接的一些選項,如隻讀、異步等。例如:

'隻填寫ConnectionString
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""text;HDR=Yes;FMT=Delimited (,)"";Data Source=" & ThisWorkbook.Path & "\"

'填寫ConnectionString和UserID
cnn.Open "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDatabase", "MyUser"

'填寫ConnectionString和Options
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""text;HDR=Yes;FMT=Delimited (,)"";Data Source=" & ThisWorkbook.Path & "\", , , adModeRead

'填寫所有參數
cnn.Open "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDatabase", "MyUser", "MyPassword", adAsyncConnect           

7、Provider 參數都有哪些可選值?

Provider參數是指定連接配接字元串中的一個參數,用來表示連接配接到資料源所使用的提供程式¹²。不同的提供程式可以支援不同的資料源,例如SQL Server、Access、Oracle、Excel等。Provider參數的可選值取決于你安裝了哪些提供程式,以及你想要連接配接到哪種資料源。一些常見的Provider參數的可選值有³⁴:

  • Provider=SQLOLEDB:表示使用Microsoft OLE DB Provider for SQL Server,可以連接配接到SQL Server資料庫。
  • Provider=Microsoft.ACE.OLEDB.12.0:表示使用Microsoft Office 12.0 Access Database Engine OLE DB Provider,可以連接配接到Access、Excel等Office檔案。
  • Provider=MSDAORA:表示使用Microsoft OLE DB Provider for Oracle,可以連接配接到Oracle資料庫。
  • Provider=Microsoft.Jet.OLEDB.4.0:表示使用Microsoft Jet 4.0 OLE DB Provider,可以連接配接到Access、Excel等Office檔案。

你可以參考了解更多關于Provider參數的資訊。

(1) 命名參數和可選參數 - C# 程式設計指南 | Microsoft Learn. https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments. (2) 【vue-plugin-hiprint】使用-參數篇 - 掘金 - 稀土掘金. https://juejin.cn/post/7211745375920111677. (3) 可選參數 - Visual Basic | Microsoft Learn. https://learn.microsoft.com/zh-cn/dotnet/visual-basic/programming-guide/language-features/procedures/optional-parameters. (4) 二十四種設計模式:提供者模式(Provider Pattern) - Richfiter - 部落格園. https://www.cnblogs.com/taotaodetuer/p/6182743.html.

8、Options參數都有哪些可選值?

Options參數是用來指定一些連接配接的選項,如隻讀、異步等。它可以是一個或多個 CommandTypeEnum 或 ExecuteOptionEnum 值,這些值可與位 AND 運算符結合使用。例如:

  • adCmdTable:指定 Source 參數是一個表名稱。
  • adCmdText:指定 Source 參數是一個 SQL 語句或存儲過程。
  • adCmdStoredProc:指定 Source 參數是一個存儲過程名稱。
  • adCmdUnknown:指定 Source 參數的類型未知。
  • adCmdFile:指定 Source 參數是一個包含永久存儲 Recordset 的檔案或 Stream 對象的名稱。
  • adCmdTableDirect:指定 Source 參數是一個表名稱,且提供對表的直接通路。
  • adAsyncExecute:指定連接配接以異步方式執行指令。
  • adAsyncFetch:指定 Recordset 對象以異步方式提取記錄。
  • adAsyncFetchNonBlocking:指定 Recordset 對象以非阻塞方式提取記錄。
  • adExecuteNoRecords:指定指令不傳回記錄集。
  • adExecuteStream:指定指令傳回一個 Stream 對象,而不是一個 Recordset 對象。
  • adExecuteRecord:指定指令傳回一個 Record 對象,而不是一個 Recordset 對象。

你可以參考¹²³了解更多關于 Options 參數的資訊。

(1) Open Method (ADO Connection) - ActiveX Data Objects (ADO). https://learn.microsoft.com/en-us/sql/ado/reference/ado-api/open-method-ado-connection?view=sql-server-ver16. (2) Open 方法(ADO 記錄集) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/open-method-ado-recordset. (3) Open Method (ADO Recordset) - ActiveX Data Objects (ADO). https://learn.microsoft.com/en-us/sql/ado/reference/ado-api/open-method-ado-recordset?view=sql-server-ver16. (4) Open method (ADO Recordset) | Microsoft Learn. https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/open-method-ado-recordset.

9、介紹一下recordset對象

Recordset對象是用來表示一個資料庫表中的記錄集,或者一個查詢的結果集,或者一個以前儲存的Recordset¹²。你可以使用Recordset對象來操作資料庫中的資料,例如添加、修改、删除、查找、排序等¹²。Recordset對象由記錄和字段組成,你可以使用Fields集合來通路每個字段的值¹²。你還可以使用不同類型的遊标來控制Recordset對象的行為,例如動态遊标、靜态遊标、僅向前遊标等¹²。Recordset對象有很多屬性和方法,你可以參考³⁴了解更多細節。

(1) Recordset 對象 (DAO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/recordset-object-dao. (2) ADO Recordset 對象 | 菜鳥教程. https://www.runoob.com/ado/ado-ref-recordset.html. (3) 記錄集對象 (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/recordset-object-ado. (4) ADO Recordset 對象 - w3school. https://www.w3school.com.cn/ado/ado_ref_recordset.asp.

10、使用Recordset對象的示例嗎

好的,這裡有一個使用Recordset對象的示例¹。假設你有一個資料庫,其中有一個名為Customers的表,包含以下字段:

ID Name Phone
1 Alice 123456
2 Bob 234567
3 Carol 345678

你可以使用以下代碼來打開一個Recordset對象,通路Customers表中的資料,并顯示每個客戶的姓名和電話:

Dim cnn As ADODB.Connection '定義一個連接配接對象
Dim rst As ADODB.Recordset '定義一個記錄集對象
Set cnn = New ADODB.Connection '建立連接配接對象
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyDatabase.accdb" '打開資料庫連接配接
Set rst = New ADODB.Recordset '建立記錄集對象
rst.Open "Customers", cnn, adOpenStatic, adLockOptimistic '打開Customers表的記錄集
Do While Not rst.EOF '循環周遊記錄集
    MsgBox "Name: " & rst("Name") & vbCrLf & "Phone: " & rst("Phone") '顯示每個客戶的姓名和電話
    rst.MoveNext '移動到下一條記錄
Loop
rst.Close '關閉記錄集
cnn.Close '關閉連接配接
Set rst = Nothing '釋放記錄集對象
Set cnn = Nothing '釋放連接配接對象           

(1) Recordset object (DAO) | Microsoft Learn. https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-object-dao. (2) Recordset 對象 (DAO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/recordset-object-dao. (3) Recordset 屬性 - Microsoft 支援. https://support.microsoft.com/zh-cn/office/recordset-%E5%B1%9E%E6%80%A7-753d8ef0-6ad9-4731-b116-1788e3276600.

11、定義了連結對象為何還需要使用NEW關鍵字建立一個新的對象?

使用Dim關鍵字隻是聲明了一個連接配接對象的變量,但并沒有建立實際的對象。使用New關鍵字才能建立一個新的連接配接對象,并将其配置設定給變量。你也可以使用Set關鍵字和CreateObject函數來建立一個新的連接配接對象,例如:

Dim cnn As ADODB.Connection '聲明一個連接配接對象的變量
Set cnn = CreateObject("ADODB.Connection") '建立一個新的連接配接對象,并将其配置設定給變量           

12、其他示例中,在定義變量後就直接使用了,并未使用new關鍵字建立新的對象,這種使用方法可以麼?

這種使用方法也可以,但是要注意一點,如果你在定義變量時就使用了New關鍵字,例如:

Dim cnn As New ADODB.Connection '聲明并建立一個連接配接對象的變量           

那麼你就不能再使用Set關鍵字和CreateObject函數來建立一個新的連接配接對象,否則會發生錯誤。你隻能直接使用這個變量來打開連接配接,例如:

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyDatabase.accdb" '打開資料庫連接配接           

13、那麼哪種方法更好呢?

這個問題沒有一個确定的答案,不同的方法有不同的優缺點。使用New關鍵字在定義變量時就建立對象的方法可以節省一些代碼,但是也有一些缺點,例如:

  • 如果你不需要使用這個對象,或者隻需要在某個條件下使用這個對象,那麼你就浪費了記憶體空間和資源來建立一個不必要的對象。
  • 如果你在程式中多次使用New關鍵字來建立同一個對象,那麼你就可能造成記憶體洩漏,因為每次都會建立一個新的對象,而舊的對象沒有被釋放。
  • 如果你想在程式中使用多個不同的對象,那麼你就不能使用New關鍵字來建立對象,因為它隻能建立一個預設的對象。

使用Set關鍵字和CreateObject函數來建立對象的方法可以避免上述的缺點,但是也有一些缺點,例如:

  • 你需要多寫一些代碼來建立對象,并且要記住使用Set關鍵字,否則會發生錯誤。
  • 你需要知道對象的ProgID(程式辨別符),例如"ADODB.Connection",并且要保證拼寫正确,否則會發生錯誤。
  • 你需要在不需要使用對象時,顯式地将其設定為Nothing(在Visual Basic中)或NULL(在其他語言中),以便釋放記憶體空間和資源。

是以,你可以根據自己的需求和喜好來選擇合适的方法來建立對象。

14、請介紹一下這段代碼

rst.Open "Customers", cnn, adOpenStatic, adLockOptimistic

這段代碼是使用Open方法來打開一個Recordset對象,其中:

  • rst是一個Recordset對象的變量,已經用New關鍵字建立了。
  • "Customers"是一個字元串值,表示Recordset對象的資料源,這裡是一個表的名稱。
  • cnn是一個Connection對象的變量,表示打開Recordset對象的連接配接。
  • adOpenStatic是一個CursorTypeEnum值,表示Recordset對象的遊标類型,這裡是靜态遊标,即一個記錄集的靜态副本。
  • adLockOptimistic是一個LockTypeEnum值,表示Recordset對象的鎖定類型,這裡是樂觀鎖定,即在更新記錄時不鎖定資料源。

你可以參考了解更多關于Open方法的資訊。

15、Recordset對象的open方法和connection得open方法有什麼差別? 它需要接收那些參數?最少應該接收那些參數?

Recordset對象的Open方法和Connection對象的Open方法的差別是:

  • Recordset對象的Open方法是用來打開一個記錄集對象,表示一個資料庫表中的記錄集,或者一個查詢的結果集,或者一個以前儲存的Recordset¹²。Connection對象的Open方法是用來打開一個連接配接對象,表示與資料源的連接配接³⁴。
  • Recordset對象的Open方法需要接收以下參數¹²:
    • Source:指定Recordset對象的資料源,可以是一個表名、查詢名、SQL語句或Command對象。
    • ActiveConnection:指定Recordset對象的活動連接配接,可以是一個連接配接字元串、Connection對象或Nothing。
    • CursorType:指定Recordset對象的遊标類型,可以是adOpenForwardOnly、adOpenKeyset、adOpenDynamic或adOpenStatic。
    • LockType:指定Recordset對象的鎖定類型,可以是adLockReadOnly、adLockPessimistic、adLockOptimistic或adLockBatchOptimistic。
    • Options:指定Recordset對象的其他選項,可以是adCmdText、adCmdTable、adCmdStoredProc等。
  • Connection對象的Open方法需要接收以下參數³⁴:
    • ConnectionString:指定連接配接字元串,包含用于建立連接配接所需的資訊,如提供程式名稱、資料源名稱、使用者ID、密碼等。
    • UserID:指定連接配接到資料源所需的使用者ID,如果已包含在連接配接字元串中,則可以省略。
    • Password:指定連接配接到資料源所需的密碼,如果已包含在連接配接字元串中,則可以省略。
    • Options:指定連接配接選項,可以是adConnectUnspecified、adAsyncConnect或adPrompt。
  • Recordset對象的Open方法最少應該接收Source和ActiveConnection兩個參數¹²。Connection對象的Open方法最少應該接收ConnectionString一個參數³⁴。

(1) 打開 ADO 連接配接和記錄集對象 - SQL Server | Microsoft Learn. https://learn.microsoft.com/zh-cn/troubleshoot/sql/connect/open-ado-connection-recordset-objects. (2) ADO Recordset 對象 | 菜鳥教程. https://www.runoob.com/ado/ado-ref-recordset.html. (3) Recordset 對象 (DAO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/recordset-object-dao. (4) 開啟 ADO 連接和 Recordset 物件 - SQL Server | Microsoft Learn. https://learn.microsoft.com/zh-tw/troubleshoot/sql/connect/open-ado-connection-recordset-objects.

16、請為我示範指定Recordset對象的資料源的不同方法

指定Recordset對象的資料源的不同方法有以下幾種:

  • 使用一個表名、查詢名或SQL語句作為Source參數,例如:
rst.Open "Customers", cnn '使用表名
rst.Open "SELECT * FROM Customers", cnn '使用SQL語句
rst.Open "qryCustomers", cnn '使用查詢名           
  • 使用一個Command對象作為Source參數,例如:
Set cmd = New ADODB.Command '建立一個Command對象
cmd.ActiveConnection = cnn '指定活動連接配接
cmd.CommandText = "SELECT * FROM Customers" '指定指令文本
Set rst = New ADODB.Recordset '建立一個Recordset對象
rst.Open cmd '使用Command對象作為資料源           
  • 使用一個已儲存的Recordset檔案作為Source參數,例如:
Set rst = New ADODB.Recordset '建立一個Recordset對象
rst.Open "C:\MyRecordset.rst" '使用已儲存的Recordset檔案作為資料源           

17、command對象

Command對象是用來執行面向資料庫的一次簡單查詢的對象¹²。你可以使用Command對象來執行SQL語句或存儲過程,以及定義參數化的查詢和存儲過程參數¹²。Command對象的主要特性是有能力使用存儲查詢和帶有參數的存儲過程³⁴。

Command對象有以下屬性¹²:

  • ActiveConnection:設定或傳回包含了定義連接配接或Connection對象的字元串。
  • CommandText:設定或傳回包含提供者指令(如SQL語句、表格名稱或存儲的過程調用)的字元串值。
  • CommandTimeout:設定或傳回等待指令執行的時間(機關為秒)。
  • CommandType:設定或傳回一個Command對象的類型,如adCmdText、adCmdTable、adCmdStoredProc等。
  • Name:設定或傳回一個Command對象的名稱。
  • Prepared:訓示執行前是否儲存指令的編譯版本(已經準備好的版本)。
  • State:傳回一個值,此值可描述該Command對象處于打開、關閉、連接配接、執行還是取回資料的狀态。

Command對象有以下方法¹²:

  • Cancel:取消一個方法的一次執行。
  • CreateParameter:建立一個新的Parameter對象。
  • Execute:執行CommandText屬性中的查詢、SQL語句或存儲過程。

Command對象有以下集合¹²:

  • Parameters:包含一個Command對象的所有Parameter對象。
  • Properties:包含一個Command對象的所有Property對象。

(1) Command 對象概述 | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/command-object-overview. (2) ADO Command 對象 | 菜鳥教程. https://www.runoob.com/ado/ado-command.html. (3) Command對象_百度百科. https://baike.baidu.com/item/Command%E5%AF%B9%E8%B1%A1/8058465. (4) 設計模式之美:Command(指令) - sangmado - 部落格園. https://www.cnblogs.com/gaochundong/p/design_pattern_command.html.

18、command對象和connection以及recordset對象有什麼差別?

Command對象、Connection對象和Recordset對象都是ADO(ActiveX Data Objects)的核心對象,用于通路和操作資料源 。它們之間的差別是:

  • Connection對象表示與資料源的連接配接,可以使用Open方法打開連接配接,使用Close方法關閉連接配接,使用Execute方法執行SQL語句或存儲過程 。
  • Command對象表示要執行的指令,可以使用CommandText屬性定義指令的可執行文本(如SQL語句或存儲過程),使用Parameter對象和Parameters集合定義參數化的查詢和存儲過程參數,使用Execute方法執行指令并傳回Recordset對象(如果适用) 。
  • Recordset對象表示一個記錄集,可以是一個資料庫表中的記錄集,或者一個查詢的結果集,或者一個以前儲存的Recordset 。可以使用Open方法打開一個Recordset對象,使用Close方法關閉一個Recordset對象,使用Move系列方法在Recordset對象中移動記錄指針,使用AddNew、Delete、Update等方法對Recordset對象中的資料進行操作 。

簡單來說,Connection對象是用來建立和管理與資料源的連接配接,Command對象是用來定義和執行對資料源的指令,Recordset對象是用來容納和操作從資料源擷取的資料。

19、Connection對象、Command對象和Recordset對象的示例

假設你想要連接配接到一個SQL Server資料庫,并執行一個帶有參數的存儲過程,然後周遊傳回的記錄集,你可以使用以下代碼:

'建立一個Connection對象
Dim cnn As New ADODB.Connection
'設定連接配接字元串,指定提供程式、資料源、使用者ID、密碼等資訊
cnn.ConnectionString = "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDatabase;User ID=MyUser;Password=MyPassword;"
'打開連接配接
cnn.Open
'建立一個Command對象
Dim cmd As New ADODB.Command
'設定活動連接配接為Connection對象
cmd.ActiveConnection = cnn
'設定指令文本為存儲過程的名稱
cmd.CommandText = "spGetCustomerByID"
'設定指令類型為存儲過程
cmd.CommandType = adCmdStoredProc
'建立一個Parameter對象,指定參數的名稱、類型、方向、大小和值
Dim param As New ADODB.Parameter
param.Name = "@CustomerID"
param.Type = adInteger
param.Direction = adParamInput
param.Size = 4
param.Value = 1234 '假設要查詢的客戶ID為1234
'将Parameter對象添加到Command對象的Parameters集合中
cmd.Parameters.Append param
'建立一個Recordset對象
Dim rst As New ADODB.Recordset
'使用Command對象的Execute方法執行存儲過程,并傳回Recordset對象
Set rst = cmd.Execute
'判斷Recordset對象是否為空
If Not rst.EOF And Not rst.BOF Then
  '周遊Recordset對象中的每一條記錄,列印字段的值
  Do While Not rst.EOF
    '假設存儲過程傳回了客戶的姓名和電話号碼兩個字段,分别命名為Name和Phone
    Debug.Print "Name: " & rst("Name") & ", Phone: " & rst("Phone")
    '移動到下一條記錄
    rst.MoveNext
  Loop
End If
'關閉Recordset對象和Connection對象,釋放資源
rst.Close
cnn.Close
           

20、Command對象、Connection對象和Recordset對象 除了這三種還有其他對象麼?

Command對象、Connection對象和Recordset對象是 ADO 中的三個核心對象,用于連接配接資料庫、執行指令和處理資料¹²。除了這三種對象,ADO 中還有其他對象,例如 Error 對象、Field 對象、Parameter 對象、Property 對象、Record 對象和 Stream 對象¹。這些對象有不同的屬性和方法,用于實作不同的功能。可以參考 ADO 程式員參考¹ 來了解更多細節。

(1) 記錄集對象 (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/recordset-object-ado.

(2) 如何正确了解和使用Command、Connection和 Recordset三個對象? - 憶言 - 部落格園. https://www.cnblogs.com/yybk/archive/2012/03/25/2416648.html.

(3) ADO中有三個核心對象connection對象,command對象,recordset對象,為什麼是三個對象而不是三個類名????. https://www.zhihu.com/question/23007424.

(4) Recordset 對象 (DAO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/recordset-object-dao.

(5) ActiveConnection 屬性 (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/activeconnection-property-ado.

(6) C#連接配接資料庫之Connection、Command、DataReader用法總結. https://blog.csdn.net/promsing/article/details/107973777.

21、Field對象

Field對象是 ADO 中的一個對象,用于表示 Recordset 中的一個列¹。使用 Field 對象的 Value 屬性可以設定或傳回目前記錄的資料¹。取決于提供程式所公開的功能, Field 對象的某些集合、方法或屬性可能不可用¹。使用 Name 屬性傳回字段的名稱¹。使用 Value 屬性檢視或更改字段中的資料¹。使用 Type 屬性傳回字段的資料類型¹。使用 AppendChunk 和 GetChunk 方法處理二進制資料和長文本資料¹。使用 Properties 集合通路提供程式特定的屬性¹。

(1) 字段對象 - ActiveX Data Objects (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/sql/ado/guide/data/the-field-object?view=sql-server-ver16. (2) Work item fields and attributes in Azure Boards. https://learn.microsoft.com/en-us/azure/devops/boards/work-items/work-item-fields?view=azure-devops. (3) Field 對象 - ActiveX 資料對象 (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/field-object-ado.

22、Field 對象的示例代碼

Field 對象的示例代碼。以下是一個用 Visual Basic 編寫的 ADO 代碼示例,用于周遊一個 Recordset 對象,并列印每個 Field 對象的名稱和值¹:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI;"

Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM Customers", cn, adOpenStatic, adLockReadOnly

' Loop through the Fields collection and print the name and value of each field.
For Each fld In rs.Fields
    Debug.Print fld.Name & " = " & fld.Value
Next

rs.Close
cn.Close           

(1) 字段對象 - ActiveX Data Objects (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/sql/ado/guide/data/the-field-object?view=sql-server-ver16. (2) ADO Field 對象 | 菜鳥教程. https://www.runoob.com/ado/ado-ref-field.html. (3) Visual C++ ADO 程式設計 | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/visual-c-ado-programming. (4) Field 對象 - 資料通路對象 (DAO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/field-object-dao.

23、connection對象中有一個model參數,它有那些可選值?應用于那些場景?

Connection對象中的mode參數用于設定provider的通路權限¹。它有以下幾種可選值¹:

  • adModeUnknown:預設值,表示未設定通路權限。
  • adModeRead:隻讀通路。
  • adModeWrite:隻寫通路。
  • adModeReadWrite:讀寫通路。
  • adModeShareDenyRead:阻止其他使用者讀取資料源。
  • adModeShareDenyWrite:阻止其他使用者寫入資料源。
  • adModeShareExclusive:阻止其他使用者通路資料源。
  • adModeShareDenyNone:允許其他使用者共享資料源。

這些值可以組合使用,例如,adModeReadWrite | adModeShareDenyNone 表示允許讀寫通路,并且允許其他使用者共享資料源。

mode參數應用于需要控制對資料源的并發通路的場景,例如,當多個使用者需要同時操作同一個資料庫時,可以通過設定不同的mode參數來避免資料沖突或保護資料安全²。

(1) Spring Boot + RabbitMQ 配置參數解釋 - 一葉落知天下秋 - 部落格園. https://www.cnblogs.com/qts-hope/p/11242559.html. (2) ADO Connection 對象 - w3school. https://www.w3school.com.cn/ado/ado_ref_connection.asp. (3) Fetch API 的 mode 參數是用來幹什麼的? - 知乎. https://www.zhihu.com/question/417556981. (4) Wi-Fi 庫 - ESP32 - — ESP-IDF 程式設計指南 latest 文檔 - Espressif. https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/network/esp_wifi.html.

24、ADO 對象 實戰示例 recordset 增删查改

ADO 對象的實戰示例,着重講解一下如何對 Recordset 對象的資料進行增删查改。以下是一個用 VBScript 編寫的 ADO 代碼示例,用于連接配接到一個 Access 資料庫,并對 Customers 表進行操作²:

' 建立 Connection 對象并打開連接配接
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb"

' 建立 Recordset 對象并打開 Customers 表
Dim rs
Set rs = CreateObject("ADODB.Recordset")
rs.Open "Customers", cn, 3, 3 ' 3 表示 adOpenStatic 遊标類型,3 表示 adLockOptimistic 鎖定類型

' 查找 CustomerID 為 ALFKI 的記錄
rs.Find "CustomerID='ALFKI'"
If Not rs.EOF Then ' 如果找到了
    WScript.Echo "Company name: " & rs("CompanyName") ' 列印公司名稱
End If

' 添加一條新記錄
rs.AddNew ' 建立新記錄
rs("CustomerID") = "ZHIHU" ' 設定字段值
rs("CompanyName") = "知乎" 
rs.Update ' 儲存更改

' 修改一條記錄
rs.MoveFirst ' 移動到第一條記錄
rs("CompanyName") = "知乎有限公司" ' 修改字段值
rs.Update ' 儲存更改

' 删除一條記錄
rs.MoveLast ' 移動到最後一條記錄
rs.Delete ' 删除記錄

' 關閉 Recordset 和 Connection 對象
rs.Close
cn.Close

' 釋放對象
Set rs = Nothing
Set cn = Nothing           

(1) ADO Recordset 對象 | 菜鳥教程. https://www.runoob.com/ado/ado-ref-recordset.html. (2) 字段對象 - ActiveX Data Objects (ADO) | Microsoft Learn. https://learn.microsoft.com/zh-cn/sql/ado/guide/data/the-field-object?view=sql-server-ver16. (3) 利用ADO.NET簡單實作資料庫的增删改查 - CSDN部落格. https://blog.csdn.net/weixin_45768308/article/details/107098334. (4) Excel 及WPS VBA ADO Recordset記錄集的Find方法與Seek方法的差別,别傻傻地分不清。 - 知乎. https://zhuanlan.zhihu.com/p/461144273.

25、結合field對象來對大量資料進行增删查改

使用 Field 對象來對大量資料進行增删查改的示例。根據我的搜尋結果,以下是一個用 VBScript 編寫的 ADO 代碼示例,用于連接配接到一個 Access 資料庫,并對 Products 表進行操作¹:

' 建立 Connection 對象并打開連接配接
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb"

' 建立 Recordset 對象并打開 Products 表
Dim rs
Set rs = CreateObject("ADODB.Recordset")
rs.Open "Products", cn, 3, 3 ' 3 表示 adOpenStatic 遊标類型,3 表示 adLockOptimistic 鎖定類型

' 使用 Field 對象的 Value 屬性來擷取或設定字段的值
' 查找 ProductID 為 1 的記錄
rs.Find "ProductID=1"
If Not rs.EOF Then ' 如果找到了
    WScript.Echo "Product name: " & rs("ProductName").Value ' 列印産品名稱
End If

' 添加一條新記錄
rs.AddNew ' 建立新記錄
rs("ProductID").Value = 78 ' 設定字段值
rs("ProductName").Value = "知乎茶"
rs.Update ' 儲存更改

' 修改一條記錄
rs.MoveFirst ' 移動到第一條記錄
rs("ProductName").Value = "知乎茶葉" ' 修改字段值
rs.Update ' 儲存更改

' 删除一條記錄
rs.MoveLast ' 移動到最後一條記錄
rs.Delete ' 删除記錄

' 關閉 Recordset 和 Connection 對象
rs.Close
cn.Close

' 釋放對象
Set rs = Nothing
Set cn = Nothing           

(1) Element-ui架構實作對資料庫的增删改查 - CSDN部落格. https://blog.csdn.net/xYY_X_xYY/article/details/110846176. (2) MySQL基礎操作(增删查改) ——實用篇_pylemon的部落格-CSDN部落格. https://blog.csdn.net/qq_27648991/article/details/80412395. (3) 增删查改 - 維基百科,自由的百科全書. https://zh.wikipedia.org/zh-cn/%E5%A2%9E%E5%88%AA%E6%9F%A5%E6%94%B9. (4) 增刪查改 - 維基百科,自由的百科全書. https://zh.wikipedia.org/wiki/%E5%A2%9E%E5%88%AA%E6%9F%A5%E6%94%B9.

26、關于 ADO 對象的一些建議:

  • 在打開 Recordset 對象時,盡量指定遊标類型和鎖定類型,以提高性能和安全性。
  • 在使用 Find 或 Seek 方法查找記錄時,盡量使用索引字段,以提高查找速度。
  • 在使用 AddNew 或 Update 方法添加或修改記錄時,盡量使用 Field 對象的 Value 屬性,以避免類型轉換的錯誤。
  • 在使用 Delete 方法删除記錄時,盡量先移動到要删除的記錄,以避免删除錯誤的記錄。
  • 在使用 GetRows 或 GetString 方法擷取資料時,盡量指定要擷取的字段和記錄數,以節省記憶體空間。

繼續閱讀