- 締切済み
Access EOFの判定がうまくいかない
お世話になります。 Access2010 テーブルのEOFの判定がうまくいきません。 If TMP.EOF = False Then MsgBox "EOFではありません" Else MsgBox "EOFです" End If TMPには1レコードありますが、なぜかTrueになってしまいます。 なお、TMP.MoveLastしてもエラーにならず、その後、イミディエイト ウィンドウで?TMP.EOFとしてみると、Falseが返ってきます。 本来であればEOFでMoveLastするとカレントレコードが無い旨のエラーに なるかと思うので、EOFではないと思うのですが。。 どのようなことが考えられますでしょうか。 <TMPについて> ・(訳あって)主キーは設けておりません。 ・0レコードか1レコードです。1レコード以上になることはありません。 ・TMPはあるフォームのレコードソースとしています。 ※フォーム上の登録ボタンが押されたら、フォームのレコードソースを ""としフォームを閉じます。このタイミングでTMPにレコードが生成 されます。 上記の判定処理は、フォームを閉じた直後に行っています。 ご教示の程、宜しくお願い致します。
- naoto0216
- お礼率73% (488/667)
- その他MS Office製品
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- maiko0333
- ベストアンサー率19% (840/4403)
If TMP.EOF = False Then If TMP.EOF == False Then ではありませんか?
関連するQ&A
- カレントレコードが無い事を判定させる方法
SQLを使ってmdb内のレコードセットを取得し、 無かったらエラーを返す、という処理を作成 する場合、カレントレコードが無い事を 判定するにはどうすれば良いでしょうか? イメージは下記のような感じです。 レコードセット as DAO.Recordset 'レコードセット取得 Set レコードセット = db.OpenRecordset(作成したSQL文) '判定 If カレントレコード無 Then MsgBox "エラーメッセージ" Exit Sub End If
- ベストアンサー
- Visual Basic
- BOF と EOF のいずれかが True になっ
VBAのADOで 「BOF と EOF のいずれかが True になっているか、 または現在のレコードが削除されています。 要求された操作には、現在のレコードが必要です」 のエラーになる時に 「BOF と EOF のいずれかが True になっている」 なのか 「現在のレコードが削除されています」 なのか どちらのエラーなのか調べる方法はありますか?
- ベストアンサー
- オフィス系ソフト
- accessについて<BOFとEOFのいずれかがTUREになっているか・・・現在のレコードが必要です>
Private Sub kensaku_Click() On Error GoTo Err_kensaku_Click Screen.PreviousControl.SetFocus Dim ss As String Dim rs As String Dim strSQL As String Dim rstType As ADODB.Recordset Set rstType = New ADODB.Recordset ss = text.text strSQL = "Select 見積日 From 見積 where 提出見積No ='" & ss & "'" rstType.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdText If ss = "" Then MsgBox ("提出見積Noを入力してください") ElseIf rstType.EOF = False Then While rstType.EOF = False rs = rstType.GetString MsgBox (rs) rstType.MoveNext Wend kikaiNo.Value = "222" Else MsgBox ("提出見積Noが存在しません") End If Exit_kensaku_Click: Exit Sub Err_kensaku_Click: MsgBox Err.Description Resume Exit_kensaku_Click End Sub 以上は書いた検索のコードですが、<BOFとEOFのいずれかがTUREになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です>というエラーが出てきます。問題がどうかよくわかりませんので、教えていただけませんか。
- 締切済み
- その他(データベース)
- 判定の仕方
みなさんifなどの false(FALSE) 0 NULL "" などをtureとするとき、判定分をどう書きますか? 私はreturn値を明示するために if($val === false) //true if($val === 0) //true if($val === NULL) //true if($val === "") //true とします。 スマートなのは if(!$val) //true なんですけど、複合型を返す関数の判定は気持ち悪くて使ってないです。 複合型の判定は if(empty($val)) //true としてます。 みなさんはどっちをつかいますか? また、 if($val == false) //true と書いたりしますか? C育ちの私にとってはとても気持ち悪くて絶対に書かないだろう判定の仕方なんですけど、なにかメリットなどがあったら教えてください。
- ベストアンサー
- PHP
- access の 最終レコードの判定はどう記述しますか
月間スケジュールテーブルを新規生成するルーチンです 月初~月末まで各日にちの曜日を[曜日TMP]に求めてこのルーチンに入ります ("マスタFORM"には週間計画のテーブルのフィールドを設定したフォームです。 (週間計画:月曜日の○○時~◎◎時に○○の作業) Private Sub 分析RTN() DoCmd.GoToRecord acForm, "マスタFORM", acFirst Do While Not EOF(1) ‘ここでエラーが発生します If 曜日No. = 曜日TMP Then 追加RTN ’レコードの追加ルーチンです End If DoCmd.GoToRecord acDataForm, "マスタFORM", acNext Loop End Sub 他にお気づきの点はご指導ください
- ベストアンサー
- オフィス系ソフト
- ACCESS VBA テーブルデータにYES/NO
ACCESSの表形式のフォームにYES/NOフィールドを足して 一覧フォームで任意のチェックボックスを選択して 選択されたデータのみを表示するようにしたいです。 しかしチェックボックスはレコードひとつひとつについてるのですが 認識されるチェックボックスは一番上のレコードのチェックボックスのみです。どうすればレコード別に判定できるのがわからないので 詳しい方ご教授お願いします。自分が書いたのは下記コードです。 Dim chkBln As Boolean chkBln = False If チェック50 = True Then chkBln = True MsgBox chkBln End If '検索結果の表示 DoCmd.OpenForm ("データ修正画面") '自身のレコードソースに設定 Forms("データ修正画面").RecordSource = "Select * From T_障害票マスタ WHERE チェック = " & chkBln & ""
- ベストアンサー
- Visual Basic
- エラー時の MsgBox の出し方
VB5 WIN2000 です。 おはようございます。初心者の質問で申し訳ありませんが、宜しくご指導頂きたいと思います。 MsgBoxの質問です。顧客管理表を作っていますが、存在しない顧客番号等を検索をした時に 《実行時エラー'3021': カレントレコードがありません》 というエラーが出ます。これを、 MsgBoxで、「データーは存在しません。」という感じで表示できるようにするには、どのようなコードを書けばいいでしょうか? ちなみに今は、データを抽出できた時に rs.MoveNext If rs.EOF Then MsgBox "(^ω^)Already at end of recordset!" rs.MoveLast Exit Do End If Loop というメッセージを出すようにしてます。 これの後に続くコードとしては、どのような感じにすれば・・? BOFとかも考えたのですが、さっぱりうまく動きません・・。 どうかご指導宜しくお願いします。
- ベストアンサー
- Visual Basic
- 文字列で渡された式
質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================
- 締切済み
- Visual Basic
- アクセスのMoveLastの使い方について
初めてアクセスでツールを作っています。 リストを登録するツールを作っており、フォームに入れた情報を 「テーブル」に登録する仕様となっております。 フォームを開く際、自動的にIDのフォームにID番号を採番したいです。 ID番号はリストを登録する「テーブル」を参照し、既存のレコードの最後の行を検索し 最後の行に+1をした番号を振るようにしました。 下記のようにプログラムを組み、最初のID:1、2、3まではフォームを開いた際に自動的に採番できました。 ところが次の4番目のデータを登録する際にフォームを開くと 何故かIDは3のまま表示されてしまいます。 デバックしたところ、Debug.Print rs!ID の箇所は何故か数字が2が入っております。 MoveLast でレコード末尾を参照しようとしているのですが、 何故か末尾であるはずの3にはなりません。 アクセスでこのようなツールを作るのは初めてになるため、原因がわかる方お願い致します。 Private Sub Form_Load() 'フォーム読み込み時にID番号を付与 Dim rs As New ADODB.Recordset Me.ID.Value = Null rs.Open "テーブル", CurrentProject.Connection If rs.EOF = True Then Me.ID.Value = 1 Else rs.MoveLast Debug.Print rs!ID Me.ID.Value = rs!ID.Value + 1 End If rs.Close End Sub
- ベストアンサー
- Visual Basic
- Access2010 VBAによる空白欄の判定
VBA勉強中の初心者です。 本を片手に自分でコードを記述してみましたが思った動作をしてくれません。 詳しい方がいらっしゃいましたら、手直ししていただけるとありがたいです。 どのように動かしたいかというと チェックボックス、ID、規則名からなるテーブルを参照するフォームにて、 1.チェックボックスをクリック(True)した際に、規則名欄が空白の場合はエラー処理を避ける為、改めて空白を入力し、ID欄が空白の場合は自動で連続した番号を入力するようにしています。 2.逆に、既存のレコードのチェックをした際には、既に入力されている規則名及びIDを便宜的に振り直すようにしたいです。 また、IDを主キーとして、かつ、IDと規則名が入力されていないと保存が出来ないようにしています。 なお、IDの連続した番号はオートナンバーにはせずDMaxを使用し連番を付しています。 これらのことを記述したものが以下になります。 Private Sub チェック0_Click() If (Me.[チェック0] = True) Then 'チェックボックスが真ならば If Me.制定規則台帳ID = "" Then 'かつ、ID欄が空白ならば Me.制定規則台帳ID = [DMax("制定規則台帳ID", "copy制定規則台帳_tbl") + 1] '既存のIDの一番大きな数字+1で入力 Me![制定規則台帳ID].Requery Else 'ID欄は空白ではない Me.制定規則台帳ID = [制定規則台帳ID] '既存のIDをもう一度打ち込む Me![制定規則台帳ID].Requery End If End If If (Me.[チェック0] = True) Then 'チェックボックスが真ならば If Me.規則等名.Value = "" Then 'かつ、規則名欄が空白ならば Me.規則等名.Value = "" '空白を打ち込む Me![規則等名].Requery Else Me.規則等名.Value = [規則等名] '既存の規則名をもう一度打ち込む Me![規則等名].Requery End If Else MsgBox "チェックボックスはFalse", vbOKOnly, "test" End If End Sub このとき、新規レコード作成の画面にてチェックボックスをクリックすると、第一の条件式にて、チェックボックスの真偽の判定は問題ないのですが、第二の条件式で名前欄もID欄も空白(新規レコードなので)だとしてもElseの処理となってしまいます。 コントロール内が空白かどうかを判定する場合の条件式が間違っているのでしょうか。 詳しい方、ご教示ください。
- ベストアンサー
- その他MS Office製品
補足
maiko0333さま ご回答ありがとうございます。 =は1つです。2つ並べることはありません。 ちなみに2つ並べるとコンパイルエラーとなります。