一個做法(about Recordset)(編號:3555)

VB6 + Access97
提供兩個將資料暫存於RecordSet的應用,
Form上佈置Adodc1及DataGrid1,
Adodc1的ConnectionString請先行設定,
adodc1.Recordset("addField") 是自行加入的欄位,不是實際table的field
一:為記錄加上流水號
Private Sub Form_Activate()
Adodc1.CommandType = adCmdText
 Adodc1.CursorLocation = adUseClient
 Adodc1.RecordSource = "select *,0 as addField from geb30 order by sup_code"
 Set DataGrid1.DataSource = Adodc1
 Adodc1.Refresh
 Set Adodc1.Recordset.ActiveConnection = Nothing
 If Adodc1.Recordset.RecordCount > 0 Then
   Adodc1.Recordset.MoveFirst  '這行不加會使第一筆資料無法寫入流水號,原因不詳
   While Not Adodc1.Recordset.EOF
    Adodc1.Recordset("addField") = Adodc1.Recordset.AbsolutePosition
    Adodc1.Recordset.MoveNext
   Wend
   Adodc1.Recordset.MoveFirst
 End If
End Sub
二:做某個欄位的累加(這裡累加Adodc1.Recordset("now_qty")欄位)
Private Sub Form_Activate()
Dim cTotal As Long '記錄累加值
 Adodc1.CommandType = adCmdText
 Adodc1.CursorLocation = adUseClient
 Adodc1.RecordSource = "select *,0 as addField from geb10 order by pro_code"
 Set DataGrid1.DataSource = Adodc1
 Adodc1.Refresh
 Set Adodc1.Recordset.ActiveConnection = Nothing
 cTotal = 0
 If Adodc1.Recordset.RecordCount > 0 Then
   Adodc1.Recordset.MoveFirst
   While Not Adodc1.Recordset.EOF
    cTotal = cTotal + Adodc1.Recordset("now_qty")
    Adodc1.Recordset("addField") = cTotal
    Adodc1.Recordset.MoveNext
   Wend
   Adodc1.Recordset.MoveFirst
 End If
End Sub
1.由於我異動資料都是下SQL直接做,所以DataGrid中的資料是否
可修改就沒試過了
2.DataEnvironment也可用相同方式,若你需結合DataReport使用
,可於show DataReport前先open DataEnvironment.rsCommand
 ,做完流水號or欄位累加的部分再show DataReport,這個方式
 可增加DataReport的實用性
3.若你用於DataEnvironment中,建議你測試一下:
重覆開啟rsCommand是否會當出,因為我有時會遇到一些錯誤訊
 息,但是完全相同的程式碼於其他的專案中卻不一定遇到
4.Set Adodc1.Recordset.ActiveConnection = Nothing
這行指令不是必要的,我記得於cww的VB心得筆記中有相關文章

做法供大家參考指教