説明
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