- ベストアンサー
AND、OR文にすると選択後の編集が出来ないようです
- 選択後の編集ができない現象が発生しています。
- 選択後のデータが編集画面に反映されません。
- 選択のチェックボックスにチェックを入れてもデータが編集画面に反映されない問題が発生しています。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
書き忘れていたことがあったので、こちらに書いておきます。 システムを作る中で、一番忘れてはいけないのは、 トランザクションです。 データの入力、データの書き換えなどを 連続しておこなうときに、データの処理を矛盾が ないようにする必要があります。 データベースなどの処理系にはいろいろなトランザクション 処理が備わっていたりしますが、あくまでもデータ処理の 流れを確認するのは人間です。だからこそ間違えることも でてきます。これは、銀行であろうと、小さなオフィスの 会計処理であろうと変りはありません。 また、データーベース以外のシステムでも考えは同じです。 質問の中で、フォームを複数ひらいておいて、データの 入力や変更などをする場面でいろいろなエラーが出ていましたが、 このような場合は、必ずデータの流れを確認し、 入力終了 ↓ データの保存 ↓ データを共有するフォームの関連する画面更新 ↓ 変更終了 ↓ データの保存 ↓ データを共有するフォームの関連する画面更新 などのように、石橋を叩いて渡るように テーブルとフォームを確認しながらシステム を構築していく必要があります。 そして、データの流れ、システムの流れ、 フォーム間の関連性などは必ず、紙ベースの メモを残しておくことが肝要です。 http://www.atmarkit.co.jp/ait/articles/0803/24/news138.html ほか、トランザクションに関してはいろいろあります。
その他の回答 (7)
- piroin654
- ベストアンサー率75% (692/917)
No6は回答する場所のまちがいです。 スルーを。失礼しました。
- piroin654
- ベストアンサー率75% (692/917)
>編集ボタンを押すと「鉛筆のマーク」に変わります。 このときの編集ボタンの内容は、どのように なっていますか?
- piroin654
- ベストアンサー率75% (692/917)
>なお、同じボタンやチェックボックスに対する >イベントは、一つにしないとエラーになります。 この説明のしかたが良くなかったかもしれません。 そのために、 >下記の様に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 にして登録します。 ファイルの構築が進んでくると、あれもこれものてんこ盛り にしたくなります。コードの流れ、システムの流れを見失いがちに なりやすいことを点は十分に留意してください。 なお、コードを書いているときはかならずデバッグから コンパイルを実行して変数の使い方、やプロシージャの名前、 などの不具合がないかなどを確認してください。
- piroin654
- ベストアンサー率75% (692/917)
書き忘れましたが、 Private Sub 選択解除_Click() は、「選択解除」というボタンのクリック時のイベントで、 Private Sub 選択_Click() は、「選択」というチェックボタンのクリック時のイベントです。 なお、同じボタンやチェックボックスに対する イベントは、一つにしないとエラーになります。
補足
下記の様に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
- piroin654
- ベストアンサー率75% (692/917)
二番目の、 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 があるならば、どちらかを削除します。
- piroin654
- ベストアンサー率75% (692/917)
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」が正常に開かれない場合は、 このままコメントアウトしておいてください。
補足
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) 如何したら良いか教えて頂けますか。
- piroin654
- ベストアンサー率75% (692/917)
一度、現在編集中のファイルを最適化してみてください。 まず、 >Private Sub 選択_Click() >If NewRecord Then >MsgBox "編集できません。選択しなおしてください。" >Me.Undo >If >End Sub >上記の命令が効いていないようです。メッセージも出ません。 これは、AND OR でフィルタをかけたデータの一番下の 新規レコードにチェックを入れても反応しない、 ということですか? それとも、フィルタをかける前のデータにおいて、ですか?
お礼
数々のご助言ありがとうございます。これから作っていくだろうプログラムではご意見を思い出して頑張っていきたいと思います。