ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Access超絶クエリコミュの表形式の連結フォームでテーブルを更新したいのですが…

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。

すごく基本的な事かもしれませんが、出来ずに頭を抱えています。
状況を上手に伝えられるか不安ですが、よろしければご教授願います。
※Access2002を使用しています。
 データベースにはDAO接続をしています。(Dim db As Dao.Database)

メインフォームオープン時のイベントでワーク用テーブルを作成して、
そのテーブルにInsert Intoで別テーブルからの抽出データを挿入しています。

作ったワーク用テーブルはv_messageという名前です。

Forms!MNU001!sub_MNU001.Form.RecordSource = "v_message"

としてサブフォームのレコードソースに渡しています。

サブフォームは帳票フォームとしていて、
各コントロールのレコードソースにテーブルの項目名を入れています。
(現在、これで連結は出来ていると思っています。)

これを作って何をしたいか、ですが…

各レコードにチェックボックスが表示されるようになっています。
チェックボックスはv_message.delete_flgに連結しています。
(実際、チェックボックスのプロパティのレコードソースには、
delete_flgとだけ記述しています。)

delete_flgはテーブル作成時にyes/no型にしています。

yes/no型のフィールドに連結していれば、チェックボックスをクリックした時に
テーブルのフィールドが書き変わると、どこかのサイトで見たのですが、
クリックをしてもフォーカスが移るだけでレ点は付きませんでした。

ならばと、レコードソースは式ビルダから選択し、オプションから見ると、

レコードソース = [v_message]![delete_flg]

と表示されるようにしました。他のコントロールも同様にしました。

こうすると今度は、チェックボックスの中がグレーの網掛けに、
テキストボックスは「#NAME」と、表示されるようになってしまいました。
これがv_message内のレコード分作られてしまいます。

グレーの網掛けや「#NAME」が何なのか気になりますが、
レコードソースにフィールド名だけを記述すれば難なく表示されるので、
今のところは無視しています。
最悪、チェックボックスのマウスクリック時のイベントで、
どこのレコードのチェックボックスがクリックされたか捕まえられれば、

db.Execute "Update v_message Set delete_flg = '1(または0)' " & _
"Where v_message.doc_no = '" & チェックボックスがクリックされたdoc_no & "' ;"
(doc_noは必ずユニークになるようにしています。)

更新して、再度サブフォームのレコードソースに渡そうと思っています。

教えていただきたいのは、
1.連結していてもテーブルの内容は書き変えられないのでしょうか?
  私のやり方の問題で、本当は書き変えられるのでしたら、
  その方法をご教授いただきたいです。

2.どのレコードのチェックボックスがクリックされたか、
  特定は出来ないでしょうか?
  
どちらか一方でも構いません。
それとも、どちらも不可能でしょうか?

長文・駄文失礼致しました。宜しくお願い致します。

コメント(5)

> Bangdoll様

長文を読んでいただいてありがとうございます。

質問にお答えいたしますと、
サブフォームのフォームのプロパティを開いて、
レコードソースの枠内にv_messageを入れておくと、
メインフォームをフォームビューで開いた時に
v_messageがないというエラーが出てしまうのです。

メインフォームのオープン時のイベントでv_messageを作成しているので、
サブフォームのオープンまでに作成が間に合っていないんだと諦めて、
毎回レコードソースを渡している状態です。

長文になりすぎてしまうので先ほどは書きませんでしたが、
v_messageはd_message更新用テンポラリーテーブルと位置付けています。

メインフォームに削除ボタンがあるのですが、
削除ボタンクリック時のイベントで、
チェックボックスにチェックの入ったデータは、
d_messageから削除してしまいます。

db.Execute "Delete From d_message Where d_message.doc_no " & _
"In (Select doc_no From v_message Where delete_flg = '1' ;"

としようとしていますが、構文が不安です。
違っていたら、「ど初心者が」と笑ってください。

少し脱線してしまった気がします。
ご質問にはきちんと答えられていますでしょうか?


>#NAME
そういった理由があるのですね。
という事は、式ビルダから作られた[v_message]![delete_flg]は一体…
考えると分からなくなりますが、参照できない名前なのですね。

>連結フォームの思想からちょいと外れてますんで
トピックの名前を忘れていました。失礼致しました。

またしても長文になってしまい、失礼致しました。宜しくお願い致します。
> Bangdoll様

わざわざフォームまで作っていただいて、本当にありがとうございます。
作っていただいた3枚目の画像を拝見致しますと、
私が行いたくても出来なかった事が実現されています。

連結無しで表形式のフォームを作って、
あとからレコードソースにテーブルを渡しても、
受け付けてもらえない事にショックを受けました。

2枚目の画像でお伺いしたい事があるのですが、
お答えいただけますでしょうか?

CurrentDb.Execute "Drop Table v_message ;"

これでデータベースからv_messageは物理的に削除されますよね?
その後のクエリで、v_messageが復活しているのですが、
Create TableもInsert Intoも使わずに、
あの一文でテーブル作成とデータ挿入がまかなえているのでしょうか?
だとすると、私にはまさに「超絶クエリ」です。

>そもそもここはクエリーのコミュ
はい、言い訳も出来ません。
本当に失礼致しました。

現在のチェックボックスの動きは、
マウスクリック時のイベントでクエリで細工をして、
チェックボックスにチェックがないと全部にチェックが付く、
大変お恥ずかしい状態に仕上がっています。

この恥ずかしい状態からようやく抜け出す事が出来ます。
本当にありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Access超絶クエリ 更新情報

Access超絶クエリのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング