人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

レコードセットについて教えてください。カレントDBは参照されているものとします。Accessです。

Dim rs As DAO.Recordset
Dim x As String
Dim y As String
Dim id As String
Dim name As String
x="select ID,Name From Table1 where ID='1' and Name='John'"
rs=CDB.OpenRecordset(x, dbOpenDynaset)
ここでデータがTable1に存在すればrs!ID,rs!Nameでデータにアクセスできると思いますが、
存在しなければ当然ですが何も表示されません。そこで、何もなければ"0"をいれたいです。
If IsNull(rs!ID) Then
id = Nz(rs!ID)
End If
id=rs!ID

If IsNull(rs!Name) Then
name = Nz(rs!Name)
End If
name=rs!Name
としたいのですが、rs!IDがNULLにもかかわらず、IF文の中身は読まれずに飛ばされます。
何がいけないのでしょうか?何がやりたいかとういと、この後別のSQL文を作成します。
そのSQLでwhereの条件にしたいのです。この後に、
y="Select * from Table2"
If name <> "0" Then
y=y & " where name='" & rs!Name
end if
.....
といったようなことをやりたいと思っています。ご教授お願いします。


●質問者: akaired
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:access AS dB name NZ
○ 状態 :終了
└ 回答数 : 2/3件

▽最新の回答へ

1 ● kn1967
●35ポイント ベストアンサー

(1)レコードセットを準備しただけでは

どのレコードを対象としているか判りませんので

フィールドへアクセスするまえに、対象レコードを指定してやります。

レコードが無ければデータも無いのですからIF文で分岐してやれば楽です。

rs.MoveFirst
If Not rs.EOF()
 id = rs!ID
 name = rs!Name
Else
 id = "0"
 name = "0"
End If

話は変わりますが・・・

(2)

サーチするIDとNAMEは事前に持っているはずですから

それをそのまま使うという手もありますよね。

Dim rs As DAO.Recordset
Dim x As String, y As String
Dim id As String, name As String

id = 1
name = "John"
x="SELECT COUNT(*) AS cnt FROM Table1 WHERE ID='" & id & "' AND Name='" & name & "'"
rs=CDB.OpenRecordset(x, dbOpenDynaset)
rs.MoveFirst
y="SELECT * FROM Table2" & IIF(rs!cnt = 0, "", "WHERE Name = '" & name & "'")

さらに・・・

(3)xでカウント数だけを返すのではなくxでyのSQL文を生成するようにする

(4)xをyのサブクエリにする←これがお勧めだけれども他との絡みもありそうだから割愛

などという手もあるかと思います。


(5)もう少しAccess向けにするとすれば

Dim rs As DAO.Recordset
Dim x As String, y As String
Dim id As String, name As String

id = 1
name = "John"
y = "SELECT * FROM Table2"
 & IIF(DCOUNT("*","Table1","ID='" & id & "' and Name='" & name & "'") = 0, "", "WHERE Name = '" & name & "'")

などなど・・・やりかたはいろいろありますので適宜チョイスしてください。

◎質問者からの返答

ご回答ありがとうございます!助かりました!


2 ● fester
●35ポイント

レコードセットのEOFプロパティを使うのがよろしいかと思います

http://www.geocities.jp/cbc_vbnet/ADO/recordidou.html


If rs.EOF Then
id = "0"
name = "0"
Else
id=rs!ID
name=rs!Name
End If

◎質問者からの返答

ご回答ありがとうございます!助かりました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ