ms-access
  • access-vba
  • 2011-07-22 39 views 22 likes 
    22

    レコードセットが空であるかどうかをテストするにはどうすればよいですか?VBAにアクセスする:recordSetが空であるかどうかをテストするにはどうすればよいですか?無効である?

     Dim temp_rst1 As Recordset 
         Dim temp_rst2 As Recordset 
    
         Set temp_rst1 = db.OpenRecordset("SELECT * FROM ORDER_DATA WHERE SKUS_ORDERED = '" & curSKU1 & "' AND [ORDER] = " & curOrder) 
         Set temp_rst2 = db.OpenRecordset("SELECT * FROM ORDER_DATA WHERE SKUS_ORDERED = '" & curSKU2 & "' AND [ORDER] = " & curOrder) 
    
         If IsNull(temp_rst1) Or IsNull(temp_rst2) Then MsgBox "null" 
    

    私はselect文に基づいていくつかのレコードセットを開きます。レコードがない場合、IsNullはtrueを返しますか?

    +0

    あなたの質問に回答されている場合は、適切にあなたが答えの左側に緑のチェックマークをクリックして使用することが好ましい答えをチェックすることを忘れないでください。 –

    答えて

    33

    私は "エンドファイルの" フラグをチェックします:

    If temp_rst1.EOF Or temp_rst2.EOF Then MsgBox "null" 
    
    +1

    ありがとうございます! – Shubham

    +11

    recordSetを開く方法によっては、レコードセットの先頭と末尾(つまり、空)の場合にも試してみることができます。次に、recordSet.EOFとrecordSet.BOFをテストします。 –

    +1

    RecordSetが1行のデータを返す場合、BOFとEOFの両方が真となるでしょうか?私は以下の@ tom-studeeのアドバイスに従っており、代わりに 'RecordCount> 0'をチェックします。 –

    9

    RecordCountは使いたいものです。

    If Not temp_rst1.RecordCount > 0 ... 
    
    +0

    合意。これにより、照会の試行から返されたレコードを知ることに基づいて処理を変更できるので、処理を適宜変更することができます。 +1 – Mohgeroth

    +0

    ありがとうございます! – Shubham

    +4

    この場合、RecordCountは正確な総レコード数を提供していない可能性があることに注意してください。正確なカウントを取得するには.MoveLastを実行する必要があります(レコードセット内を移動する場合は.MoveFirst)。つまり、* any *レコードがあれば0より大きくなります。要するに、この回答は機能しますが、.RecordCountの特異性を認識する必要があります。 – mwolfe02

    0

    ないtemp_rst1はその後何もない場合は...

    +0

    それは動作しません。 temp_rst1は、この行では2行前に設定されるため、**何も**なることはありません。営業担当者は、レコードセットにレコードがあるかどうかに関心があります。他の2つの答えのどちらかがこれを達成します。 – mwolfe02

    +0

    ADOで正しく動作します。 DAOで動作するかどうかはわかりません。私は、次の形式でADOを広範囲に使用します: 'Set temp_rst1 = temp_rst1.NextRecordsetもしtemp_rst1が何もないなら... ' – NDizzle

    +0

    私は参照してください。私はADOでほとんど仕事をしていないので、私はそこであなたの専門知識を延期します。 DAOは、一般に、MS Access VBA内からの使用を推奨されているので、OPが実行されている環境であると想定しました。 – mwolfe02

    6

    temp_rst1.BOFtemp_rst1.EOF場合、レコードセットは空です。これは、リンクされたローカルの空のレコードセットに対して常に真です。

    3

    簡単な方法は、それを書くことです:

    Dim rs As Object 
    Set rs = Me.Recordset.Clone 
    If Me.Recordset.RecordCount = 0 then 'checks for number of records 
        msgbox "There is no records" 
    End if 
    
    関連する問題