適用対象
説明
FindClauseに一致する指定行をダイナセットで検索します。FindClauseは、有効なWHERE句で、WHEREのないものを指定できます。現在のFindClauseが、前回の検索操作の最後の条件句と一致している場合、現在のFindClauseは再解析されません。
これらのメソッドは、一致する行に到達している場合を除いて、アドバイス・オブジェクトをコールすることなく、一致する行に現在の行を直接移動します。一致する行が見つからない場合、NoMatchプロパティはTRUEに設定され、現在の行はそのままになります。
使用方法
oradynaset.FindFirst FindClause oradynaset.FindLast FindClause oradynaset.FindNext FindClause oradynaset.FindPrevious FindClause
備考
FindClauseには、次の種類の式が使用できます。
単純な問合せ。例: "deptno = 20"。
複雑な式を含む問合せ。例: "sal + 100 > 1000"。
SQLファンクション・コール。例: "UPPER(ename) = 'SCOTT' "または"NVL(comm, 0) = 0"。
副問合せ。例: "deptno in (select deptno from dept)"。
SQLのLIKE演算子は、複数バイト言語では機能しません。ユーザーのスキーマには、DUALという表またはシノニムが必要です。日付値は、「コントロールパネル」で指定された書式であるVisual Basic書式で取り出され、比較されます。したがって、デフォルトのOracle書式「DD-MON-YYYY」などの他の書式が使用されている場合は、日付の比較は失敗します。
SQLファンクションTO_CHAR (date, fmt)は、使用できません。1つ目の引数はネイティブのOracle形式の日付値であることが必要ですが、OO4Oでは文字列の日付のみが処理されるためです。
SQLファンクションTO_DATEでは、文字列が日付に変換されますが、前述のとおり、OO4OによってVisual Basic形式の文字列に再変換されるため、比較はやはり失敗します。
NO_CACHEダイナセットのFindPreviousおよびFindLastメソッドは機能しません。NoMatchはTRUEに設定されます。
注意: エラーを回避するには、Findメソッドのコール前にEOFまたはBOFをチェックします。
例
この例では、FindFirst、FindNext、FindPreviousメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load ()
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraFields As OraFields
Dim FindClause As String
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "SCOTT/TIGER", 0&)
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where empno" & _
">= 7654 and empno <= 7844 ", ORADYN_NO_BLANKSTRIP)
Set OraFields = OraDynaset.Fields
OraDynaset.MoveFirst
'FindClause for job as MANAGER
FindClause = "job LIKE '%GER'"
OraDynaset.FindFirst FindClause
'NoMatch property set to true , if no rows found
If OraDynaset.NoMatch Then
MsgBox "Couldn't find rows "
else
MsgBox OraFields("ename").Value ' Should display BLAKE
OraDynaset.FindNext FindClause
MsgBox OraFields("ename").Value ' Should display CLARK
OraDynaset.FindPrevious FindClause
MsgBox OraFields("ename").Value ' Should display BLAKE
endif
End Sub