Sub ado12()
Dim Con1 As Object
Set Con1 = CreateObject("ADODB.Connection")
MsgBox Con1.Version
Set Con1 = Nothing
End Sub
Sub ado13()
Dim Source As String, Con As String
Dim Con1 As Object, Rs1 As Object
Dim FieA As Object, a As String
a = ""
Source = "Select * From Table1"
Con = "DSN=db1;"
Set Con1 = CreateObject("ADODB.Connection")
Con1.ConnectionString = Con
Con1.Open
Set Rs1 = Con1.Execute(Source)
If Not Rs1.EOF Then
For Each FieA In Rs1.Fields
a = a & "<" & FieA.Name & ">" & FieA.Value
Next FieA
End If
Rs1.Close
Set Rs1 = Nothing
Con1.Close
Set Con1 = Nothing
MsgBox a
End Sub
Execute の結果は Recordset を返します。ただし ADO Recordset とは異なり、カーソルの種類を指定することはできません。得られる Recordset は常に、前方スクロール型の静的カーソルです。
Sub ado14()
' ADO Connection で データを更新する。
Dim Source As String, Con As String
Dim Con1 As Object
Dim FieA As Object
Source = "Insert Into Table1(Namae) Select '五右衛門'"
Con = "DSN=db1;"
Set Con1 = CreateObject("ADODB.Connection")
Con1.ConnectionString = Con
Con1.Open
Con1.Execute Source
Con1.Close
Set Con1 = Nothing
End Sub
' 挿入
Source = "Insert Into Table1(Namae) Select '五右衛門'"
' 削除
Source = "Delete From Table1 Where Namae = '五右衛門'"
' 更新
Source = "Update Table1 Set Namae = '五右衛門' Where ID = 5"
Const adExecuteNoRecords = &H80
Dim i As Long
Con1.Execute Source, i, adExecuteNoRecords
MsgBox i
Sub ado15(Source As String)
Dim Con As String
Dim Con1 As Object, Rs1 As Object
Dim FieA As Object, a As String, i As Long
a = ""
Con = "DSN=db1;"
Set Con1 = CreateObject("ADODB.Connection")
Con1.ConnectionString = Con
Con1.Open
Set Rs1 = Con1.Execute(Source, i)
If i > 0 Then
a = i & " 件のレコードが更新されました。"
ElseIf Rs1.EOF Then
a = "該当するデータはありません。"
Rs1.Close
Else
For Each FieA In Rs1.Fields
a = a & "<" & FieA.Name & ">" & FieA.Value
Next FieA
Rs1.Close
End If
Set Rs1 = Nothing
Con1.Close
Set Con1 = Nothing
MsgBox a
End Sub
この関数は、引数として与えられた SQL 文を実行します。 Select 文でも Update や Delete 等でも実行できます。更新型の SQL 実行時でも、 Execute メソッドは、厳密には何も返さないのではなく、閉じた Recordset を返しています。また、第二引数には、 Select 文の場合 -1 が格納されます。これを利用して動作を切り替えています。
Sub ado16()
ado15 "select * from Table1 where id=1"
ado15 "select * from Table1 where id=0"
ado15 "Insert Into Table1(Namae) Select '五右衛門'"
End Sub
データベースを効率的に使うという観点では、このサンプルは失格です。同じデータベースに続けてアクセスするなら、都度、接続を切るべきではありません。連続して SQL 文を実行する上手な方法については、トランザクションのところで解説します。