oo4o と ADO では Move 系メソッドは大きな違いはありませんが、Find 系メソッドは大きく異なります。
サンプルコードはOracle® Objects for OLE開発者ガイドの FindFirst、FindLast、FindNextおよびFindPreviousメソッド の例を書き換えたものです。
ADO
Sub Form_Load()
' Dim OraSession As OraSession
' Dim OraDatabase As OraDatabase
Dim cnn As ADODB.Connection
' Dim OraDynaset As OraDynaset
Dim rst As ADODB.Recordset
' Dim OraFields As OraFields
Dim flds As ADODB.Fields
Dim FindClause As String
' Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set cnn = CreateObject("ADODB.Connection")
' Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "SCOTT/TIGER", 0&)
cnn.Open "Provider=OraOLEDB.Oracle;Data Source=ExampleDb;User ID=scott;Password=tiger"
' Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where empno >= 7654 and empno <= 7844 ", ORADYN_NO_BLANKSTRIP)
Set rst = CreateObject("ADODB.Recordset")
rst.CursorLocation = adUseClient
rst.Open "select * from emp where empno >= 7654 and empno <= 7844 ", cnn, adOpenStatic, adLockOptimistic, adCommandText
' Set OraFields = OraDynaset.Fields
Set flds = rst.Fields
' OraDynaset.MoveFirst
rst.MoveFirst
'FindClause for job as MANAGER
' FindClause = "job LIKE '%GER'"
FindClause = "job LIKE '*GER*'"
' OraDynaset.FindFirst FindClause
rst.Find FindClause
'NoMatch property set to true , if no rows found
' If OraDynaset.NoMatch Then
If rst.EOF Then
MsgBox "Couldn't find rows "
Else
' MsgBox OraFields("ename").Value ' Should display BLAKE
MsgBox flds("ename").Value
' OraDynaset.FindNext FindClause
rst.Find FindClause, 1, adSearchForward
' MsgBox OraFields("ename").Value ' Should display CLARK
MsgBox flds("ename").Value
' OraDynaset.FindPrevious FindClause
rst.Find FindClause, 1, adSearchBackward
' MsgBox OraFields("ename").Value ' Should display BLAKE
MsgBox flds("ename").Value
End If
End Sub
- 本筋ではありませんが、oo4o の
CreateDynasetはデフォルトで(ORADYN_NO_BLANKSTRIPを指定しないと)、右側のスペースを削除しますが、ADO のRecordsetでは削除されません。(RTRIMが必要) - oo4o の OraDynaset には
FindFirst、FindLast、FindNext、FindPreviousの4つのメソッドがありますが、ADO のRecordset ではFindメソッドのみでオプションを利用します。 - ADO Recordset には
NOMATCHプロパティがありませんので、EOF(またはBOF)プロパティで判定します。 - ADO では検索文字列のワイルドカード
%の代わりに*を使います。また、後方一致検索LIKE '*GER'は使用できませんのでLIKE '*GER*'(中間一致)にする必要があります。 IS演算子も使用できません。IS NULL,IS NOT NULLの代わりに= NULL,<> NULLを使用する必要があります。
No comments:
Post a Comment