こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AND、OR文にすると選択後の編集が出来ない

Private Sub 選択_Click()
If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
End If
End Sub

上記の命令が効いていないようです。メッセージも出ません。

Private Sub 編集_Click()
Dim strFil As String
strFil = "[選択]=" & True
DoCmd.OpenForm "編集F", , , strFil
'DoCmd.Close acForm, "スタート画面F"
'選択.Value = Null
End Sub

上記のスタート画面は消したくないので’を付けてあります。
選択.Value=Null でコンパイルエラーが発生していますので’を付けています。


Private Sub 検証_Click()
Dim strFil As String

If IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then
MsgBox ("コンボボックスの選択がされていません")
Exit Sub
End If

If Not IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then
strFil = "[ステータス] ='" & Me![ステータスリスト] & "'"
End If

If IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then
strFil = "[申請内容] = '" & Me.申請リスト & "'"
End If

If Not IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then
If MsgBox("二つの条件でAND検索をしますか", vbYesNo) = vbYes Then
MsgBox ("二つの条件でAND検索をします")
strFil = "[ステータス] = '" & Me.ステータスリスト & "'and " & "[申請内容]='" & Me.申請リスト & "'"
Else
MsgBox ("二つの条件でOR検索をします")
strFil = "[ステータス] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'"
End If
End If
Me.Filter = strFil
Me.FilterOn = True
End Sub

上記はそのままです。

選択のチェックボックスにチェックを入れてもそのデータが編集画面に反映されない現象が発生してしまいました。どこが悪いのか教えて頂ければ幸いです。

投稿日時 - 2015-04-06 11:52:57

QNo.8950299

すぐに回答ほしいです

質問者が選んだベストアンサー

書き忘れていたことがあったので、こちらに書いておきます。
システムを作る中で、一番忘れてはいけないのは、
トランザクションです。
データの入力、データの書き換えなどを
連続しておこなうときに、データの処理を矛盾が
ないようにする必要があります。
データベースなどの処理系にはいろいろなトランザクション
処理が備わっていたりしますが、あくまでもデータ処理の
流れを確認するのは人間です。だからこそ間違えることも
でてきます。これは、銀行であろうと、小さなオフィスの
会計処理であろうと変りはありません。
また、データーベース以外のシステムでも考えは同じです。

質問の中で、フォームを複数ひらいておいて、データの
入力や変更などをする場面でいろいろなエラーが出ていましたが、
このような場合は、必ずデータの流れを確認し、
入力終了

データの保存

データを共有するフォームの関連する画面更新

変更終了

データの保存

データを共有するフォームの関連する画面更新

などのように、石橋を叩いて渡るように
テーブルとフォームを確認しながらシステム
を構築していく必要があります。
そして、データの流れ、システムの流れ、
フォーム間の関連性などは必ず、紙ベースの
メモを残しておくことが肝要です。


http://www.atmarkit.co.jp/ait/articles/0803/24/news138.html
ほか、トランザクションに関してはいろいろあります。

投稿日時 - 2015-04-08 14:07:54

お礼

数々のご助言ありがとうございます。これから作っていくだろうプログラムではご意見を思い出して頑張っていきたいと思います。

投稿日時 - 2015-04-08 16:05:29

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

No6は回答する場所のまちがいです。
スルーを。失礼しました。

投稿日時 - 2015-04-07 15:16:24

ANo.6

>編集ボタンを押すと「鉛筆のマーク」に変わります。

このときの編集ボタンの内容は、どのように
なっていますか?

投稿日時 - 2015-04-07 15:04:31

ANo.5

>なお、同じボタンやチェックボックスに対する
>イベントは、一つにしないとエラーになります。

この説明のしかたが良くなかったかもしれません。

そのために、

>下記の様に1つのイベントにしようと試行錯誤していますが、
>エラー94がでてなかなか前に進めません。

このような、ことになったのかもしれません。一つのフォームの
コード表の中に、同じプロシージャ名が複数存在するとコンパイル
をすれば「名前が適切ではありません」というエラーが出ますし、
Accessから見ればどの命令を選択すればいの?ということで実行
を停止してしまいます。


補足の、

Private Sub 選択_Click()

If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
Me.Refresh
End If

If Me!選択 Then
CurrentDb.Execute "UPDATE 申請履歴Q SET 選択 = False;"
Me.Refresh
End If
End Sub

において、

>If NewRecord Then
>MsgBox "編集できません。選択しなおしてください。"
>Me.Undo
>Me.Refresh
>End If

は、

Private Sub 選択_Click()
If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
Me.Refresh
End If
End Sub

という、「選択」というチェックボックスをクリック
したときのイベントに登録し、

>If Me!選択 Then
>CurrentDb.Execute "UPDATE 申請履歴Q SET 選択 = False;"
>Me.Refresh
>End If


これは、単に「選択」というチェックボックスのチェックを
すべてはずすためですから、誤解の無いように
>If Me!選択 Then
と、
>End If
をはずして、「選択解除」というボタンのクリック時の
イベントととして、

Private Sub 選択解除_Click()
CurrentDb.Execute "UPDATE 申請履歴Q SET 選択 = False;"
Me.Refresh
End If

にして登録します。



ファイルの構築が進んでくると、あれもこれものてんこ盛り
にしたくなります。コードの流れ、システムの流れを見失いがちに
なりやすいことを点は十分に留意してください。

なお、コードを書いているときはかならずデバッグから
コンパイルを実行して変数の使い方、やプロシージャの名前、
などの不具合がないかなどを確認してください。

投稿日時 - 2015-04-07 14:54:58

ANo.4

書き忘れましたが、

Private Sub 選択解除_Click()

は、「選択解除」というボタンのクリック時のイベントで、


Private Sub 選択_Click()


は、「選択」というチェックボタンのクリック時のイベントです。


なお、同じボタンやチェックボックスに対する
イベントは、一つにしないとエラーになります。

投稿日時 - 2015-04-07 12:03:13

補足

下記の様に1つのイベントにしようと試行錯誤していますが、エラー94がでてなかなか
前に進めません。ご助言いただければ幸いです。
何卒、宜しくお願い致します。

Private Sub 選択_Click()

If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
Me.Refresh
End If

If Me!選択 Then
CurrentDb.Execute "UPDATE 申請履歴Q SET 選択 = False;"
Me.Refresh

End If
End Sub

投稿日時 - 2015-04-07 13:43:18

ANo.3

二番目の、

Private Sub 選択解除_Click()
If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
End If
End Sub


これは、


Private Sub 選択_Click()
If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
End If
End Sub

ではありませんか?このプロシージャはチェックボックスを
クリックしたときに新規レコードならばチェックを入れられませんよ、
というメッセージをだして、チェックを入れるのを阻止するための
ものです。
つまり、
Private Sub 選択解除_Click()

Private Sub 選択_Click()
に変更。

質問の最初の
Private Sub 選択解除_Click()
は、そのままにします。これはもじどうりチェックをすべて外す
為のプロシージャです。

もし、同じ

Private Sub 選択_Click()
If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
End If
End Sub

があるならば、どちらかを削除します。

投稿日時 - 2015-04-07 11:56:26

ANo.2

No1の続きで、もう一つ確認ですが、

>選択のチェックボックスにチェックを入れてもそのデータが
>編集画面に反映されない現象が発生してしまいました。

これは、チェックを入れたデータすべてが表示されないということですか、
それとも、一部のデータが表示されないということでしょうか。その場合は
どのようなデータが表示されないのでしょうか。


それから、
選択.Value = Null
では、エラーがでます。この場合は、

Private Sub 選択解除_Click()
If Me!選択 Then
CurrentDb.Execute "UPDATE テーブル名 SET 選択 = False;"
Me.Refresh
End If
End Sub

というボタンがあるならば、
選択.Value = Null
のかわりに、
Call 選択解除_Click
としてみてください。
ただし、「編集F」が正常に開かれない場合は、
このままコメントアウトしておいてください。

投稿日時 - 2015-04-06 20:44:53

補足

Private Sub 選択解除_Click()
If Me!選択 Then
CurrentDb.Execute "UPDATE 申請履歴Q SET 選択 = False;"
Me.Refresh
End If
End Sub

Private Sub 選択解除_Click()
If NewRecord Then
MsgBox "編集できません。選択しなおしてください。"
Me.Undo
End If
End Sub

チェックボックスに2種類の同じコマンドがあることが判明、出来る訳ありませんよね。(TT)
如何したら良いか教えて頂けますか。

投稿日時 - 2015-04-07 11:32:37

ANo.1

一度、現在編集中のファイルを最適化してみてください。

まず、


>Private Sub 選択_Click()
>If NewRecord Then
>MsgBox "編集できません。選択しなおしてください。"
>Me.Undo
>If
>End Sub

>上記の命令が効いていないようです。メッセージも出ません。


これは、AND OR でフィルタをかけたデータの一番下の
新規レコードにチェックを入れても反応しない、
ということですか?
それとも、フィルタをかける前のデータにおいて、ですか?

投稿日時 - 2015-04-06 15:38:05

あなたにオススメの質問