大家好,,今日我們繼續(xù)講解VBA數(shù)據(jù)庫解決方案的第23講:利用VBA如何向一個已有的數(shù)據(jù)表中添加記錄,。在上一講中我們講了如何把工作表的數(shù)據(jù)保存到新建的數(shù)據(jù)表中方案,這是非常好的方法,希望讀者能在實際的工作中多加利用。和《VBA代碼解決方案》一樣,,讀者可以在我的資料中感覺到很多我們實際工作中問題的影子,我曾經(jīng)不止一次的講過,VBA的實用性非常高,,好好利用,可以大大提高我們的工作效率,。 今天我們要講的是:對于一個已經(jīng)存在的數(shù)據(jù)表,我們要向其中添加記錄的方案,。其實這也是最普通的應(yīng)用了,在我們的工作中隨處可以見到。我們的代碼該如何做到呢? 實例:在上一講的講解中,我們利用VBA代碼把之前的銷售資料做了備份,如下面的截圖: 到了第三個月,我們要把第三個月的數(shù)據(jù)追加進去,下面是3月的銷售記錄: 其實,,這些都是來源于工作的實際,,也是工作中確實存在的問題,讀者在學習的時候可以把這些代碼作為一個實例來利用,下面看我們的解決方案代碼: Sub mynzCreateDataTable_1() '將工作表的數(shù)據(jù)添加到數(shù)據(jù)表中 第23講 Dim cnADO As New ADODB.Connection Dim rsADO As ADODB.Recordset Dim strPath, strSQL, strTable As String strPath = ThisWorkbook.Path & '\mydata2.accdb' strTable = '19年銷售情況' cnADO.Open 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' & strPath strSQL = 'SELECT * FROM ' & strTable Set rsADO = New ADODB.Recordset rsADO.Open strSQL, cnADO, 1, 3 '匯報給用戶記錄數(shù) MsgBox '添加前記錄數(shù)為:' & rsADO.RecordCount Sheets('Sheet4').Select '添加記錄 t = 2 Do While Cells(t, 1) <> '' rsADO.MoveLast rsADO.addnew For i = 0 To rsADO.Fields.Count - 1 rsADO.Fields(i) = Sheets('Sheet4').Cells(t, i + 1) Next i rsADO.Update t = t + 1 Loop '匯報給用戶最后的記錄數(shù) MsgBox '添加后記錄數(shù)為:' & rsADO.RecordCount rsADO.Close cnADO.Close Set rsADO = Nothing Set cnADO = Nothing End Sub 代碼截圖: 代碼講解: 1 Dim cnADO As New ADODB.Connection Dim rsADO As ADODB.Recordset Dim strPath, strSQL, strTable As String strPath = ThisWorkbook.Path & '\mydata2.accdb' strTable = '19年銷售情況' cnADO.Open 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' & strPath strSQL = 'SELECT * FROM ' & strTable Set rsADO = New ADODB.Recordset rsADO.Open strSQL, cnADO, 1, 3 以上的代碼我用了前期綁定的方法創(chuàng)建的ADO, 并打開了數(shù)據(jù)表的集合 2 '添加記錄 t = 2 Do While Cells(t, 1) <> '' rsADO.MoveLast rsADO.addnew For i = 0 To rsADO.Fields.Count - 1 rsADO.Fields(i) = Sheets('Sheet4').Cells(t, i + 1) Next i rsADO.Update t = t + 1 Loop 上述代碼是把工作表中的數(shù)據(jù)添加到數(shù)據(jù)表中. 這里需要講解的是: rsADO.addnew 和 rsADO.Update 語句,這兩條語句的作用是是向記錄集中添加記錄,和寫入記錄. .addnew 告訴記錄集,,我們要添加一行 .update 通知記錄集,,我們要把準備好的這個行寫入數(shù)據(jù)庫了. 3 為了達到人機對話的目的,我在兩處有了代碼如下: '匯報給用戶記錄數(shù) MsgBox '添加前記錄數(shù)為:' & rsADO.RecordCount '匯報給用戶最后的記錄數(shù) MsgBox '添加后記錄數(shù)為:' & rsADO.RecordCount 運行的過程如下:首先顯示添加前的記錄: 運行完成后顯示添加后的記錄數(shù): 最后看看我們運行完,添加好數(shù)據(jù)之后的數(shù)據(jù)庫截圖: 今日內(nèi)容回向: 1 如何向已經(jīng)有的數(shù)據(jù)記錄集中添加數(shù)據(jù)? 2 ADDNWE 和Update的作用是什么? |
|