プロが教えるわが家の防犯対策術!

アクセスのフォームで、コマンドボタンをクリックして、初めて登録ができるというのはどのようにすればいいのでしょうか?普通、登録画面といったら、テーブルを基にしてフォームを作成していいのでしょうか?それとも非連結にしてフォームからフォームへ登録という風にするものなのでしょうか?フォーム上のテキストボックスに一つでも文字を入力すると、×ボタンで消しても、データがテーブルに入っていってしまいます。これを防ぐことはできるのでしょうか?保存でもいいですし登録でもいいのですが、コマンドボタンを作成して、それをクリックして初めてテーブルにデータが入っていくという風にしたいのですが。どなたか分かる方居ましたらご教示ください。宜しくお願いします。

A 回答 (4件)

#2です



> テーブルは部門コード、部門名、更新日の3つです。
> フォームには新規登録画面、修正、削除、参照、クリア、閉じると
> コマンドボタンをもたせました。

それ程複雑では無さそうなテーブルですね
部門コードを管理する専用フォームでしょうか?
で、コマンドで、新規、修正、削除、閉じるは、なんとなく判るのですが、参照とクリアって、どういう意味のものなのでしょうか?
クリアは、訂正したもの等を登録をしないで元に戻すって意味でしょうか?
参照は、レコードのリストでもポップアップでもするのかな?

> 何から手を付けていけば覚えられるのでしょうか?
私も独学ですが・・・参考書は、買いましたが読んでも判りませんでした
殆どがアクセスのヘルプと実地ですね・・・覚えたのは^^;
VBAあたりになると、MSDNあたりをネットで参照するようになりましたが・・・
覚えるとすれば、普通はVBAから手をつけないと思うのですが^^;
テーブル、クエリ、フォーム、レポート、とやっぱり作成していく順番で覚えて行くものだと思いますが、クエリは奥が深い気がするので、必要のたびに戻るって感じでしょうか?
フォーム、レポートでのVBAは、デバッグをステップ実行してれば、大体の流れが判りますし、理解しやすくなってます
ただし、デバッグのステップと、流しで実行した場合、タイミングが変な場合があるので・・・
Debug.Print 変数
は、忘れないように大体入れてあることが多いです
    • good
    • 0
この回答へのお礼

ありがとうございました。いちおできました。
部門コードを管理する画面です。非連結のリストボックスにクエリから引っ張ってきた参照画面をつけたので参照はいらなくなりました。
頑張って勉強していきたいと思います。ありがとうございました。

お礼日時:2007/06/01 12:02

テーブルを元にする場合のやり方だけ。



コマンドボタンのClickイベントに
docmd.RunCommand acCmdSaveRecord

×ボタンで保存されないようにするには
Sub Form_Unloadイベントに
If Me.Dirty Then 'もし編集されていたらDirty=True
Me.Undo 'データを戻す
End If
但し これだけだと、PgUpキーなどを押されてしまうと
保存されてしまうので 無効化しておく必要があります
Form_KeyDownイベントに
If KeyCode=vbKeyPageDown then
KeyCode=0
End If
その他のキーについては お調べ下さい。

こんな感じで 出来るかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。その他のキーってどこで探せばいいのでしょうか??初心者なので全く分かりません。調べながら書いていきます。ありがとうございました。

お礼日時:2007/05/30 16:32

こんです^^;



アクセスでのコマンドボタンでの上書き保存について。
http://oshiete1.goo.ne.jp/qa3025989.html
の続きの話なのでしょうか?

フォームの流れなど、いろいろこうしたいと、言うものものもあると思いますが・・・大体、どれでもやれます
具体的に、流れを記載したほうが良いかと思いますが・・・
私の場合は、
メインフォームにリスト表示(リストボックス使用)
リストをダブルクリックで、閲覧&訂正用フォームを起こし閲覧&訂正可能の操作(前回回答のした手法を使用することが多い)
新規はメインフォームに新規作成のボタンがあって、ボタンをクリックすると、閲覧&修正用フォームを追加専用で開き、新規作成用に使用するパターンになります
(更新前処理で、追加専用で開いたか、そうではないかで識別させて処理を加えてあります)
だから、前回紹介したVBAより複雑なものになってますし、レコードの移動は、フィルタを使用し1レコードしか閲覧しない前提で作成しているため実際考慮してない部分もあります

実際、ひとそれぞれ流れが相違するものだと思いますが、どうしたいです?

> フォーム上のテキストボックスに一つでも文字を入力すると、
> ×ボタンで消しても、データがテーブルに入っていってしまい
> ます。これを防ぐことはできるのでしょうか?

これは、×を押しても更新処理を自動的に行うので、更新前処理で、Me.Undoを入れるしかないのですが、登録もしくは保存ボタンを押した時とそうではないときを識別するために・・・
Form_Current
で、変数設定して
ボタンをクリックして、変数の値を変更、レコードの保存アクションを稼動させて・・・
Form_BeforeUpdate
で、「Form_Current」にて設定した変数設定と変化があるかないかでMe.Undoを動作させる、させないを稼動させてくるようになってくると思います

まぁ、非連結で追加クエリを動作させると言うのも良く見ますけど・・・
この処理は、人によるところなのでは?

この回答への補足

ご回答ありがとうございます(>_<)。前回質問した内容はいちおできました。ありがとうございました<m(__)m>。。流れ的には同様のものなのでしょうが・・。初心者なので、アクセスの感じを掴む為に簡単なテーブル作成。フォーム作成をということで課題がでたのですが、前回と同様の作り方で書き込んでいったのですが、どーも上手く動いてくれません・・。テーブルは部門コード、部門名、更新日の3つです。フォームには新規登録画面、修正、削除、参照、クリア、閉じるとコマンドボタンをもたせました。オブジェクトのフォームからfrm_部門を開いたときに、その1つのフォーム内でコマンドボタンにて、6つの動きをさせたいのです。初心者で独学です。パソコンと参考書などを頼りに勉強しています。何から手を付けていけば覚えられるのでしょうか?宜しくお願い致します<m(__)m>

補足日時:2007/05/30 16:32
    • good
    • 0

こんにちは。


やり方は2つだと思います。
1つ目は仰るように非連結のフォームを作成し、登録をクリックでフォームの値をクエリかVBAでテーブルに追加するということです。

2つ目は、登録したいテーブル(元データテーブル)と同じテーブル構造の作業用のテーブル(テーブルA)を作り、それと連結したフォームにデータを入力していきます。登録をクリックでテーブルAのデータを追加クエリで元データテーブルに追加し、最後にテーブルAのデータを削除クエリで全て削除します。なので、追加クエリの実行と削除クエリの実行を順にマクロ(マクロ1)に登録してクリック時のイベントにマクロ1を割り当てるという方法です。

この方法ですと、新規登録のみの扱いになりますので、修正登録の場合は最初に追加クエリで抽出条件を設定し元データテーブルからテーブルAに追加、修正作業後、修正登録クリックで、更新クエリで元データテーブルの抽出条件のものにテーブルAのデータを上書きし、最後に削除クエリでテーブルAのデータを削除という手順になる為、修正専用のフォームを新規登録とは別に用意するか、同じフォームで行うなら修正開始ボタンと修正登録(終了)ボタンの2つを用意するかになると思います。

比較的簡単なのは2つ目の方法だと思います。VBAの知識などお持ちでしたら1つ目の方がスマートかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2007/05/30 16:30

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