
ACCESS(VBA)の検索処理にて
以下のVBAを実行すると、かならず「★データあり処理」
に流れてしまいます。
確実に検索結果がヒットしない状態(データ全削除)にしても
同じです。
何故なのでしょうか。。
======================
Private Sub xx_Click()
Dim sSql As String
sSql = "SELECT 年月 FROM 材料明細トランザクション " _
& "WHERE 年月 = " & Me.年月.Value & " " _
& "AND 材料顧客コード = " & Me.材料顧客コード.Value & " " _
& "AND 現場コード = " & Me.現場コード.Value
Set db = CurrentDb
Set oRs = db.OpenRecordset(sSql)
If oRs.NoMatch = False Then
'★データあり処理
Else
'データなし処理
End If
End Sub
======================
※初心者ですので、わかりやすく回答していただけると助かります。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
& "WHERE 年月 = " & Me.年月.Value & " " _
& "AND 材料顧客コード = " & Me.材料顧客コード.Value & " " _
& "AND 現場コード = " & Me.現場コード.Value
データ型はすべて数値型なのでしょうか?ふと気になりました。
No.3
- 回答日時:
補足:WHERE 節を指定しているSQL文の場合は・・・。
条件を指定して見つける必要はないので・・・。一般的には、次のように書きます。DAOではなくADOですが、考え方は同じです。(多分)
Public Function DBLookup(ByVal strQuerySQL As String, _
Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
Dim DataValue
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
With rst
.Open strQuerySQL, _
CurrentProject.Connection, _
adOpenStatic, _
adLockReadOnly
If Not .BOF Then
.MoveFirst
DataValue = .Fields(0)
End If
End With
Exit_DBLookup:
On Error Resume Next
rst.Close
Set rst = Nothing
DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
Exit Function
Err_DBLookup:
MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strQuerySQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DBLookup
End Function
ご回答ありがとうございます。
BOF/EOF等の使い方等をもう少し悩んで勉強してみます。
Find使用時のNomatchの使い方まで、
ありがとうございます。
※数年前にIT業界から離れ、現在まったく違う業界に転職して
ひさびさにプログラムに触れております。
No.1
- 回答日時:
Public Function DbSeek(ByVal strQuerySQL As String, _
ByVal strFind As String, _
ByVal strFldName As String) As Variant
On Error GoTo Err_DbSeek
Dim DataValue
Dim DB As DAO.Database
Dim rst As DAO.Recordset
Set DB = CurrentDb
Set rst = DB.OpenRecordset(strQuerySQL)
With rst
'.FindFirst strFind
Debug.Print .NoMatch
If Not .NoMatch Then
DataValue = rst.Fields(strFldName)
End If
End With
Exit_DbSeek:
On Error Resume Next
rst.Close
Set rst = Nothing
DbSeek = DataValue
Exit Function
Err_DbSeek:
MsgBox "SELECT 文の実行時にエラーが発生しました。(DbSeek)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strQuerySQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DbSeek
End Function
このような DBSeek()を作成してみました。
添付図の冒頭では、.FindFirst strFind をコメントアウトしていません。二番目はコメントアウトしています。この場合、 .NoMatch の値は False です。なぜなら、.FindFirst を実行していないからです。よって、"ID=4"と指定しているにも関わらず"ID=1"のレコードの値を返しています。そこで、コメントアウトしないで実行すると、"ID=4"が見つからなかったので.NoMatch の値はTrueになり空文を戻しています。
で、結局は、.FindFirst XXXXX が欠落していることが原因かと推測されます。
*1996年がAccessを触った最後。間違っていたら悪しからず。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
リクエスト結果が一瞬しか表示...
-
以下のコードを実行しても、オ...
-
1つのVBAコードをすべてのコア...
-
if(1){...}とはどういうことで...
-
ACCESS(VBA)の検索結果判定に...
-
デザイン時のVisible=Falseは実...
-
エクセルVBA/ Formatで文字列が...
-
csvファイルを読み込み、該当項...
-
フォルダ内のファイル一覧
-
正整数の半角数字かどうか判定する
-
javascriptでフォルダ内のファ...
-
正規表現について
-
漢字などを正規表現でパターン...
-
文字数の制限について
-
htmlのfileタグに自動で値を入...
-
全角カタカナ バリデーション...
-
動的ファイルの最終更新日を取...
-
C#でTextBoxに数値のみ入力可能...
-
ホームページビルダーでスクリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
以下のコードを実行しても、オ...
-
リクエスト結果が一瞬しか表示...
-
VBA ステータスバー DoEvents
-
1つのVBAコードをすべてのコア...
-
if(1){...}とはどういうことで...
-
C#でボタン名を変更しても動く
-
デザイン時のVisible=Falseは実...
-
PowerPointで時計表示
-
VBA SORT Applyでエラー
-
〔Excel:VBA〕マクロの実行が異...
-
F8のステップインで実行すると...
-
innerHTMLなどの反映タイミング
-
[Delphi7] TWebBrowserでexecSc...
-
初心者です。gulpでコンパイル...
-
VB.netの重複データ数カウント...
-
VB.netでタイマーがスタートし...
-
再帰呼び出しになってしまうの...
-
JavaScriptでショートカットキ...
-
列を非表示にするマクロが実行...
おすすめ情報