'數組在數據庫操作中的應用實例'

數據庫 跳槽那些事兒 Excel VBA專家 2019-07-17
"

大家好,今日繼續講解《VBA數據庫解決方案》,今日講解第42講內容,把記錄集的數據,如何記入數組。這講的內容涉及到數組在數據庫中的應用,如果大家對數組還有不理解之處也可以參考拙著《工作表數組與VBA數組解決方案》,數組在EXCEL及其接口程序中的應用中有著不可替代的角色,利用好了,可以給自己的工作表處理和VBA數據處理帶來很大的方便。

今日實例:在數據庫中有如下的數據:

"

大家好,今日繼續講解《VBA數據庫解決方案》,今日講解第42講內容,把記錄集的數據,如何記入數組。這講的內容涉及到數組在數據庫中的應用,如果大家對數組還有不理解之處也可以參考拙著《工作表數組與VBA數組解決方案》,數組在EXCEL及其接口程序中的應用中有著不可替代的角色,利用好了,可以給自己的工作表處理和VBA數據處理帶來很大的方便。

今日實例:在數據庫中有如下的數據:

數組在數據庫操作中的應用實例

我們要打開這個數據庫,然後把內容先存到一個數組中,最後在工作表中體現出來。

下面看我給出的代碼:

Sub mynzUpdateRecords_42() '第42將 將數據記錄存入數組的方案

Dim cnADO, rsADO As Object, Fdsarr, Arr

Dim strPath, strTable, strSQL, strMsg As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\\mydata2.accdb"

strTable = "員工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

'彙報給用戶記錄數

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

Fdsarr = Array("員工編號", "姓名", "性別", "民族", "部門", "職務", "電話", "出生日期") '字段名

Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '記錄存入數組

For x = 1 To UBound(Arr)

Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)

Next

rsADO.Close

'釋放內存

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼截圖:

"

大家好,今日繼續講解《VBA數據庫解決方案》,今日講解第42講內容,把記錄集的數據,如何記入數組。這講的內容涉及到數組在數據庫中的應用,如果大家對數組還有不理解之處也可以參考拙著《工作表數組與VBA數組解決方案》,數組在EXCEL及其接口程序中的應用中有著不可替代的角色,利用好了,可以給自己的工作表處理和VBA數據處理帶來很大的方便。

今日實例:在數據庫中有如下的數據:

數組在數據庫操作中的應用實例

我們要打開這個數據庫,然後把內容先存到一個數組中,最後在工作表中體現出來。

下面看我給出的代碼:

Sub mynzUpdateRecords_42() '第42將 將數據記錄存入數組的方案

Dim cnADO, rsADO As Object, Fdsarr, Arr

Dim strPath, strTable, strSQL, strMsg As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\\mydata2.accdb"

strTable = "員工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

'彙報給用戶記錄數

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

Fdsarr = Array("員工編號", "姓名", "性別", "民族", "部門", "職務", "電話", "出生日期") '字段名

Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '記錄存入數組

For x = 1 To UBound(Arr)

Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)

Next

rsADO.Close

'釋放內存

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼截圖:

數組在數據庫操作中的應用實例

代碼講解:

1 Fdsarr = Array("員工編號", "姓名", "性別", "民族", "部門", "職務", "電話", "出生日期") '字段名

Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '記錄存入數組

這裡利用了一個方法:rsADO.GetRows(, 1, Fdsarr)

GetRows方法:此方法傳回一個二維的數組,每一行對應Recordset中的一筆記錄,且每一列對應到記錄中的字段。

此方法的語法如下:varArray = rs.GetRows([Rows], [Start], [Fields])

參數:

①Rows是要讀取記錄的數量;如果想要取得Recordset所有記錄,可用-1或省略此參數。

②Start 是指出第一個被讀取記錄的書籤;也可以是下列列舉常數中的一個:0-adBookmarkCurrent(目前記錄)、1-adBookmarkFirst(第一筆記錄)、或2-adBookmarkLast(最後記錄)。

③Fields 是可選擇的欄位名稱字段,其用來限制要讀取的資料量。(也可指定單一字段名稱、單一欄位索引、或者一個欄位索引陣列)。

2 For x = 1 To UBound(Arr)

Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)

Next

上面的過程中也用到了一個函數Index(Arr, x, 0),是調用工作表函數index。INDEX 返回列表或數組中的元素值,此元素由行序號和列序號的索引值給定。

INDEX 函數有兩種語法形式:數組和引用。數組形式通常返回數值或數值數組,引用形式通常返回引用。

當函數 INDEX 的第一個參數為數組常數時,使用數組形式。

語法:數組形式INDEX(array,row_num,column_num)

參數:

① Array 為單元格區域或數組常量。

② 如果數組只包含一行或一列,則相對應的參數 row_num 或 column_num 為可選。

如果數組有多行和多列,但只使用 row_num 或 column_num,函數 INDEX 返回數組中的整行或整列,且返回值也為數組。

③ Row_num 數組中某行的行序號,函數從該行返回數值。如果省略 row_num,則必須有Column_num。

④ Column_num 數組中某列的列序號,函數從該列返回數值。如果省略 column_num,則必須有 row_num。

特別說明:

①如果同時使用 row_num 和 column_num,函數 INDEX 返回 row_num 和 column_num 交叉處的單元格的數值。

②如果將 row_num 或 column_num 設置為 0,函數 INDEX 則分別返回整個列或行的數組數值。Row_num 和 column_num 必須指向 array 中的某一單元格;否則,函數 INDEX 返回錯誤值 #REF!。

例:=INDEX(A2:B3,2,2) 返回單元格區域的第二行和第二列交叉處的值

=INDEX(A2:B3,2,1) 返回單元格區域的第二行和第一列交叉處的值

下面看我們程序的運行結果:

"

大家好,今日繼續講解《VBA數據庫解決方案》,今日講解第42講內容,把記錄集的數據,如何記入數組。這講的內容涉及到數組在數據庫中的應用,如果大家對數組還有不理解之處也可以參考拙著《工作表數組與VBA數組解決方案》,數組在EXCEL及其接口程序中的應用中有著不可替代的角色,利用好了,可以給自己的工作表處理和VBA數據處理帶來很大的方便。

今日實例:在數據庫中有如下的數據:

數組在數據庫操作中的應用實例

我們要打開這個數據庫,然後把內容先存到一個數組中,最後在工作表中體現出來。

下面看我給出的代碼:

Sub mynzUpdateRecords_42() '第42將 將數據記錄存入數組的方案

Dim cnADO, rsADO As Object, Fdsarr, Arr

Dim strPath, strTable, strSQL, strMsg As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\\mydata2.accdb"

strTable = "員工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

'彙報給用戶記錄數

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

Fdsarr = Array("員工編號", "姓名", "性別", "民族", "部門", "職務", "電話", "出生日期") '字段名

Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '記錄存入數組

For x = 1 To UBound(Arr)

Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)

Next

rsADO.Close

'釋放內存

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼截圖:

數組在數據庫操作中的應用實例

代碼講解:

1 Fdsarr = Array("員工編號", "姓名", "性別", "民族", "部門", "職務", "電話", "出生日期") '字段名

Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '記錄存入數組

這裡利用了一個方法:rsADO.GetRows(, 1, Fdsarr)

GetRows方法:此方法傳回一個二維的數組,每一行對應Recordset中的一筆記錄,且每一列對應到記錄中的字段。

此方法的語法如下:varArray = rs.GetRows([Rows], [Start], [Fields])

參數:

①Rows是要讀取記錄的數量;如果想要取得Recordset所有記錄,可用-1或省略此參數。

②Start 是指出第一個被讀取記錄的書籤;也可以是下列列舉常數中的一個:0-adBookmarkCurrent(目前記錄)、1-adBookmarkFirst(第一筆記錄)、或2-adBookmarkLast(最後記錄)。

③Fields 是可選擇的欄位名稱字段,其用來限制要讀取的資料量。(也可指定單一字段名稱、單一欄位索引、或者一個欄位索引陣列)。

2 For x = 1 To UBound(Arr)

Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)

Next

上面的過程中也用到了一個函數Index(Arr, x, 0),是調用工作表函數index。INDEX 返回列表或數組中的元素值,此元素由行序號和列序號的索引值給定。

INDEX 函數有兩種語法形式:數組和引用。數組形式通常返回數值或數值數組,引用形式通常返回引用。

當函數 INDEX 的第一個參數為數組常數時,使用數組形式。

語法:數組形式INDEX(array,row_num,column_num)

參數:

① Array 為單元格區域或數組常量。

② 如果數組只包含一行或一列,則相對應的參數 row_num 或 column_num 為可選。

如果數組有多行和多列,但只使用 row_num 或 column_num,函數 INDEX 返回數組中的整行或整列,且返回值也為數組。

③ Row_num 數組中某行的行序號,函數從該行返回數值。如果省略 row_num,則必須有Column_num。

④ Column_num 數組中某列的列序號,函數從該列返回數值。如果省略 column_num,則必須有 row_num。

特別說明:

①如果同時使用 row_num 和 column_num,函數 INDEX 返回 row_num 和 column_num 交叉處的單元格的數值。

②如果將 row_num 或 column_num 設置為 0,函數 INDEX 則分別返回整個列或行的數組數值。Row_num 和 column_num 必須指向 array 中的某一單元格;否則,函數 INDEX 返回錯誤值 #REF!。

例:=INDEX(A2:B3,2,2) 返回單元格區域的第二行和第二列交叉處的值

=INDEX(A2:B3,2,1) 返回單元格區域的第二行和第一列交叉處的值

下面看我們程序的運行結果:

數組在數據庫操作中的應用實例

今日內容迴向:

1 如何把記錄集傳遞給數組?

2 GetRows 和 INDEX 是否理解呢?

備註:《VBA數據庫數據庫解決方案》第一冊到此講結束,明天開始第二冊內容的講解。

"

相關推薦

推薦中...