Visual Basic Tips


Jetデータベース(DAO)ダイナセットタイプを使ったテーブルへのアクセス


ダイナセットを使ってJetデータベースのテーブルにアクセスします。修正と削除の所でMoveNextを使って次レコードに移動しています。レコードを移動するには他にMoveFirst(先頭へ移動)MoveLast(最後へ移動)MovePrevious(一つ前のレコードに移動)があります。
レコードを検索するのはFindFirst、FindLast、FindNext、FindPrevious を使用します。

Private Sub JetTblAccess()
  
Dim ws As Workspace
  
Dim db As Database
  
Dim rs As Recordset
  
Dim i As Integer
  
Dim strSql As String

  
'データベースのオープン
  
Set ws = DBEngine.Workspaces(0)
  
Set db = ws.OpenDatabase(App.Path & "\work.mdb", False, False)

  strSql = "SELECT * FROM 新規テーブル"
  
Set rs = db.OpenRecordset(strSql, dbOpenDynaset)

  Debug.Print "0:MoveLast前レコード件数 = " & rs.RecordCount
'ここではレコードにまだアクセスしていないので正しく件数が表示されません
  
If rs.EOF Then
  Else
    rs.
MoveLast
  
End If
  Debug.Print "0:MoveLast後レコード件数 = " & rs.RecordCount
  
If rs.EOF Then
  
Else
    rs.
MoveFirst 'MoveFirstをしておかないと次の削除処理でレコードが存在していてもEOFになってしまいます。
  
End If
 

'削除

  ws.BeginTrans
  
Do Until rs.EOF
    rs.Delete
    rs.
MoveNext
  
Loop
  ws.CommitTrans
'Rollbackすると更新内容はキャンセルされます。
  Debug.Print "1:レコード件数 = " & rs.RecordCount

  
'追加
  ws.BeginTrans
  
For i = 1 To 10
    rs.AddNew
    rs("FieldText") = i & "番目追加"
    rs("FieldInteger") = 100 + i
    rs("FieldLong") = 200 + i
    rs.Update
  
Next
  ws.CommitTrans
'Rollbackすると更新内容はキャンセルされます。
  Debug.Print "2:レコード件数 = " & rs.RecordCount

  
'修正
  i = 0
  ws.BeginTrans
  
Do Until rs.EOF
    i = i + 1
    rs.Edit
    rs("FieldText") = i & "番目更新"
'キーも更新できます!
    rs("FieldInteger") = 1000 + i
'キーも更新できます!
    rs("FieldLong") = 2000 + i
    rs.Update
    rs.
MoveNext
  
Loop
  ws.CommitTrans
'Rollbackすると更新内容はキャンセルされます。
  Debug.Print "3:レコード件数 = " & rs.RecordCount

  db.Close
  ws.Close
End Sub


DownLoad vbtips020.lzh 8KB (VB6.0)