初音 玲 HATSUNE, Akira
| MDACって何だ!? |
|---|

| ADOって何だ!? |
|---|

| ADO MDって何だ!? |
|---|
| OLE DBって何だ!? |
|---|

| ADOを使う〜前準備〜 |
|---|
osql -u "sa" -i imp.sqlのように投入する。このときパスワードを聞いてくるが、インストール直後ならば、saのパスワードは「なし」なので、そのときは[Enter]キーをタイプする。
| ADOを使う〜プログラミング〜 |
|---|

Private Sub Form_Load()
Show
Me.MousePointer = vbHourglass
Me.Refresh
' Connectionオブジェクトの生成
Set mcnMSDE = New ADODB.Connection
' MSDEとの接続
mcnMSDE.ConnectionString = "Provider=SQLOLEDB.1;" & _
"Persist Security Info=False;" & _
"User ID=sa;" & _
"Initial Catalog=VB04MSDESQL"
mcnMSDE.Open
' Recordsetオブジェクトの生成
Set mrsMSDE = New ADODB.Recordset
Me.MousePointer = vbDefault
End Sub
|
Private Sub cmdSearch_Click()
Dim strWhere As String
Dim blnRet As Boolean
Dim strSQL As String
Me.MousePointer = vbHourglass
Me.Refresh
blnRet = False
Call frmSamp208a.psubDataSet(Me)
frmSamp208a.Show vbModal, Me
If frmSamp208a.pblnDataGet(strWhere) Then
Me.MousePointer = vbHourglass
Me.Refresh
' レコードセットを作り直す
If mrsMSDE.Fields.Count > 0 Then
mrsMSDE.Close
End If
strSQL = "SELECT ISBN,書名,発行日,価格,ページ数,備考 " & _
"FROM ISBN "
If strWhere <> "" Then
strSQL = strSQL & "WHERE " & strWhere
End If
strSQL = strSQL & " ORDER BY ISBN"
mrsMSDE.Open strSQL, mcnMSDE, adOpenDynamic, _
adLockOptimistic
Call cmdFirst_Click
' コマンドボタンを使用可能にする
blnRet = True
cmdFirst.Enabled = True
cmdPrev.Enabled = True
cmdNext.Enabled = True
cmdLast.Enabled = True
cmdAddNew.Enabled = True
cmdUpdate.Enabled = True
cmdDelete.Enabled = True
End If
If Not blnRet Then
' コマンドボタンを使用不可にする
cmdFirst.Enabled = False
cmdPrev.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
cmdAddNew.Enabled = False
cmdUpdate.Enabled = False
cmdDelete.Enabled = False
End If
Me.MousePointer = vbDefault
End Sub
|
If mrsMSDE.State <> adStateClosedとしているのは、ADOレコードセットのCloseメソッドの実行が必要かを判断するためだ。この判断なしで闇雲にCloseメソッドを発行するとプログラム起動直後に[検索]ボタンを左クリックしたときには、ADOレコードセットオブジェクトは、当然生成されただけなのでCloseメソッドでエラーが発生してしまうからだ。
Private Sub subDispSet()
Dim iintloop As Integer
For iintloop = 0 To 5
If IsNull(mrsMSDE.Fields(iintloop)) Then
txtISBN(iintloop).Text = ""
Else
txtISBN(iintloop).Text = _
mrsMSDE.Fields(iintloop).Value
End If
Next
End Sub
|
Private Sub cmdAddNew_Click()
Dim iintloop As Integer
On Error GoTo errClick:
Me.MousePointer = vbHourglass
Me.Refresh
mrsMSDE.AddNew
For iintloop = 0 To 5
If Trim$(txtISBN(iintloop).Text) <> "" Then
mrsMSDE.Fields(iintloop).Value = _
Trim$(txtISBN(iintloop).Text)
Else
mrsMSDE.Fields(iintloop).Value = Null
End If
Next
mrsMSDE.Update
exitClick:
On Error Resume Next
Me.MousePointer = vbDefault
Exit Sub
errClick:
MsgBox Error$, vbOKOnly + vbExclamation, _
App.Title
Resume exitClick:
End Sub
|
Private Sub cmdUpdate_Click()
Dim iintloop As Integer
On Error GoTo errClick:
Me.MousePointer = vbHourglass
Me.Refresh
For iintloop = 0 To 5
If Trim$(txtISBN(iintloop).Text) <> "" Then
mrsMSDE.Fields(iintloop).Value = _
Trim$(txtISBN(iintloop).Text)
Else
mrsMSDE.Fields(iintloop).Value = Null
End If
Next
mrsMSDE.Update
exitClick:
On Error Resume Next
Me.MousePointer = vbDefault
Exit Sub
errClick:
MsgBox Error$, vbOKOnly + vbExclamation, _
App.Title
Resume exitClick:
End Sub
|
Private Sub cmdDelete_Click()
On Error GoTo errClick:
Me.MousePointer = vbHourglass
Me.Refresh
mrsMSDE.Delete
mrsMSDE.MoveNext
If mrsMSDE.EOF Then
mrsMSDE.MovePrevious
End If
Call subDispSet
exitClick:
On Error Resume Next
Me.MousePointer = vbDefault
Exit Sub
errClick:
MsgBox Error$, vbOKOnly + vbExclamation, _
App.Title
Resume exitClick:
Resume Next
End Sub
|
| Data Environmentって何!? |
|---|
| Data Environmentを定義する |
|---|




| Data Environmentを使う |
|---|
Private Sub cmdSearch_Click()
Dim strWhere As String
Dim blnRet As Boolean
Dim strSQL As String
Me.MousePointer = vbHourglass
Me.Refresh
blnRet = False
Call frmSamp208a.psubDataSet(Me)
frmSamp208a.Show vbModal, Me
If frmSamp208a.pblnDataGet(strWhere) Then
Me.MousePointer = vbHourglass
Me.Refresh
' レコードセットを作り直す
If denvMSDE.rsdcmdMSDE.State <> adStateClosed Then
denvMSDE.rsdcmdMSDE.Close
End If
strSQL = "SELECT ISBN,書名,発行日,価格,ページ数,備考 " & _
"FROM ISBN "
If strWhere <> "" Then
strSQL = strSQL & "WHERE " & strWhere
End If
strSQL = strSQL & " ORDER BY ISBN"
denvMSDE.rsdcmdMSDE.Open strSQL, , adOpenDynamic, _
adLockOptimistic
Call cmdFirst_Click
' コマンドボタンを使用可能にする
blnRet = True
cmdFirst.Enabled = True
cmdPrev.Enabled = True
cmdNext.Enabled = True
cmdLast.Enabled = True
cmdAddNew.Enabled = True
cmdUpdate.Enabled = True
cmdDelete.Enabled = True
End If
If Not blnRet Then
' コマンドボタンを使用不可にする
cmdFirst.Enabled = False
cmdPrev.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
cmdAddNew.Enabled = False
cmdUpdate.Enabled = False
cmdDelete.Enabled = False
End If
Me.MousePointer = vbDefault
End Sub
|
Private Sub cmdFirst_Click()
On Error GoTo errClick:
Me.MousePointer = vbHourglass
Me.Refresh
denvMSDE.rsdcmdMSDE.MoveFirst
If Not denvMSDE.rsdcmdMSDE.BOF Then
Call subDispSet
End If
exitClick:
On Error Resume Next
Me.MousePointer = vbDefault
Exit Sub
errClick:
MsgBox Error$, vbOKOnly + vbExclamation, App.Title
Resume exitClick:
End Sub
|
Private Sub cmdAddNew_Click()
Dim iintloop As Integer
On Error GoTo errClick:
Me.MousePointer = vbHourglass
Me.Refresh
denvMSDE.rsdcmdMSDE.AddNew
For iintloop = 0 To 5
If Trim$(txtISBN(iintloop).Text) <> "" Then
denvMSDE.rsdcmdMSDE.Fields(iintloop).Value = _
Trim$(txtISBN(iintloop).Text)
Else
denvMSDE.rsdcmdMSDE.Fields(iintloop).Value = Null
End If
Next
denvMSDE.rsdcmdMSDE.Update
exitClick:
On Error Resume Next
Me.MousePointer = vbDefault
Exit Sub
errClick:
MsgBox Error$, vbOKOnly + vbExclamation, App.Title
Resume exitClick:
End Sub
|
| ADOとData Environment |
|---|


| Data Environmentをデータコントロールとして活用する |
|---|



Public Sub psubFind(ByRef rrsRec As ADODB.Recordset,
ByRef rstrWhere As String)
rrsRec.MoveFirst
rrsRec.Filter = rstrWhere
End Sub
|
| さいごに |
|---|
■動作確認環境 ThinkPad 240 2609-31J Windows 98 SE 4.10.2222A IE5 5.00.2614.3500 Office 2000 Developer Visual Basic 6.0 (SP3)