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