牛、豚、鶏、どれか一つ食べられなくなるとしたら?

はじめまして、TXTFILEをACCESS97のテーブルにインポート定義で読み込んで
目的の文字列がフィールドにあったらMSGBOXで表示させたいのですがうまくいきません。
そのコードを試したところ他の文字列の分も表示されてしまいます。
そのコードを記入したので、その原因を教えてください。お願いします。
Private Sub Cmd_KensuuHyouji_Click()
Dim i As Long
Set G_CurrentDB = CurrentDb()
Set Rs = G_CurrentDB.OpenRecordset("Table")
'変数を空白にする
GetFileName = ""
'フォームのTextBoxにフォーカスを移す
Text1.SetFocus
'エラー回避
If IsNull(Text1.Text) Or (Text1.Text) = "" Then
MsgBox "ファイルを選択してからクリックしてください", vbOKOnly + vbCritical
Exit Sub
End If
'ファイル名の左12桁が目的のファイル名なら変数にファイル名をセット
If Left$(Text1.Text, 12) = "1013405_0502" Then
'GetFileName変数にText1の値をセット
   GetFileName = Text1.Text
End If
'ファイルをテキストファイルとしてコピーする
FileCopy PathName & GetFileName, PCstPath & "MSCT.TXT"
'テキストファイルをMSACCESS97にインポートする
DoCmd.TransferText acImportDelim, "インポート定義", _
"Table", PCstPath & "MSCT.TXT", True

'インポート後レコードセットを最初の行へ戻す、でないと、件数0件で表示される
Rs.MoveFirst

Do Until Rs.EOF
If Rs.Fields("発注者コード").Value = "1013405" Then
i = Rs.RecordCount
End If
Rs.MoveNext
Loop

MsgBox "データ件数は" & Space$(1) & i & Space$(1) & "件です"

Rs.Close
G_CurrentDB.Close
Set Rs = Nothing
Set G_CurrentDB = Nothing
End Sub

A 回答 (1件)

 


あまり細かいことは言いたくないのですが、前半部分のコードが冗長です。要件を整理し、簡潔なコードを書くように努力された方がよいと思います。(手を抜く、という意味ではありません)

> そのコードを試したところ他の文字列の分も表示されてしまいます。

その原因は下記の箇所にあります。

Do Until Rs.EOF
If Rs.Fields("発注者コード").Value = "1013405" Then
i = Rs.RecordCount '※
End If
Rs.MoveNext
Loop

※ 部分にブレークポイントを設定し、以降をステップ実行してみましょう。


一例ですが、下記の修正例を参考になさってみてください。


[ 添削例 ]
Private Sub Cmd_KensuuHyouji_Click()
Set G_CurrentDB = CurrentDb() '←グローバル変数の使用は如何なものかと・・・。
Set Rs = G_CurrentDB.OpenRecordset("Table") ' ← ORDER BY 句がないので、並び順の保証がありません。

'エラー回避
If Len(Trim$("" & Text1.Value)) = 0 Then
Beep
Call MsgBox("ファイルを選択してからクリックしてください", vbOKOnly + vbCritical, "確認")
Text1.SetFocus
Exit Sub
End If

'ファイル名の左12桁が目的のファイル名なら変数にファイル名をセット
If Left$(Text1.Value, 12) = "1013405_0502" Then
'                ↑
'この部分はハードコーディングではなく、定数かテーブルで定義した方がよいでしょう。
'GetFileName変数にText1の値をセット
' ↑ 変数名に動詞は使用しない方がよい。(「Get」はプロパティ値などを取得する
'  メソッド名の先頭に付けるのが一般的な命名)
    GetFileName = Text1.Value
End If

'ファイルをテキストファイルとしてコピーする
FileCopy PathName & GetFileName, PCstPath & "MSCT.TXT"
'                       ↑
'このファイル名もハードコーディングではなく、定数で定義した方がよい。

'テキストファイルをMSACCESS97にインポートする
DoCmd.TransferText acImportDelim, _
"インポート定義", _
"Table", _
PCstPath & "MSCT.TXT", _
True

Rs.FindFirst "発注者コード = " & Left$(GetFileName, 7)
Beep
If Rs.NoMatch Then
Call MsgBox("該当するレコードはありません。", vbExclamation, "確認")
Else
Call MsgBox("データ件数は" _
& Space$(1) & CStr(Rs.AbsolutePosition) & Space$(1) _
& "件です", vbInformation, "確認")
End If
Rs.Close
G_CurrentDB.Close
Set Rs = Nothing
Set G_CurrentDB = Nothing
End Sub
 
    • good
    • 0
この回答へのお礼

こんばんは、nanashinogombeiさん、回答頂きありがとうございます。

お礼日時:2003/04/14 19:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報