ヘッダーをスキップ
Oracle® Objects for OLE開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B58887-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

FindFirst、FindLast、FindNextおよびFindPreviousメソッド

説明

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メソッドは機能しません。NoMatchTRUEに設定されます。

注意: エラーを回避するには、Findメソッドのコール前にEOFまたはBOFをチェックします。

この例では、FindFirstFindNextFindPreviousメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[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