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