Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


496 / 500 ページ ←次へ | 前へ→

【3228】Re:テーブルへのレコード自動追加
発言  こもれび  - 04/8/15(日) 10:30 -

引用なし
パスワード
   なるほど、φ(..)メモメモ 「いじっちゃダメ」データベースを参照されているわけですね。
確認したいことがあります

その1
使用されている(作るデータベース)のAccessのVersionは2000以上ですか?

その2
>契約テーブルの「@契約」の項目は商品の性質上、Yes/Noの変更が繰り返し
>発生します。また、他にも「@契約_更新日」など変化するデータもあるため、
>別テーブルとして作成し、リレーションを持たせて、
>契約テーブルに関する部分のみ、更新を行えるようにしたいのですが、

一つの顧客で例えば3カ月おきに更新されるというようなイメージなのでしょうか。
・正規化前のデータ(例)

 顧客名     契約日   更新日   商品X  商品Y
トマト株式会社 2004/5/10  2004/5/10   yes   no
トマト株式会社 2004/5/10  2004/6/10   no    yes
トマト株式会社 2004/5/10  2004/7/15   yes   yes

※ 上の例では契約日を一つの顧客との取引開始契約としています。

各商品ごとに契約日を付けなければならない場合はまた違ってきます。
もう少し、ごろ様の考えられているデータベースがわかると
作り方のお手伝いが出来そうなのですが…
・ツリー全体表示

【3227】Re:euc形式でテキストファイルを書き出す...
回答  こもれび  - 04/8/15(日) 9:56 -

引用なし
パスワード
   >CreateTextFileでアクセスからテキストファイルを作成していますが、
>euc形式で書き出す方法があれば教えていただけませんでしょうか。
>よろしくお願いします。

accessのmdb内でS-jisからeucに変換するFunctionモジュールを
作成してみました。
「区切り対称テーブル」を作りましたので、本文中に書くことが出来ません
メールアドレスがわかりましたら添付でお送りできます。

変換した文字列を連結して
open "eucfile.txt" for output as #1
       .
       .
       .
close #1
という具合でファイルを出力するというのはいかがでしょうか。
・ツリー全体表示

【3226】Re:コンボボックスについて
発言  こもれび  - 04/8/15(日) 9:03 -

引用なし
パスワード
   「ジョイン」というと SQLのJOINを私は考えてしまうのですが…(^^;
ちょっと確認させてください。
「画面a」「画面b」はそれぞれ独立したフォームですね?
で、画面bにコンボボックスが設けられているということでよろしいでしょうか?

コンボボックスのイメージとしては次の例のようなものでしょうか。
(コンボボックス:3列表示 列幅:0,3,5)
(区分番号)(区分名) (商品)
  1    家庭用品  ぴかぴか洗剤A
  1    家庭用品  シール容器3号
  1    家庭用品  タオル(大)
  2    園芸用品  植木鉢1号
  2    園芸用品  腐葉土
  2    園芸用品  ハイポネックク

上の例では、区分番号の列幅を「0」とすることにより、実際に表示されるのは
区分名と商品だけになります。

本文を読ませていただいてよくわからなかったのが、

>今やりたいことは、画面Aの明細行をダブルクリックする
>と、画面Bが出てきて、そこのコンボボックスには
>区分テーブルの区分名を表示させ、変更すると、
>選ばれた区分名の区分コードをテーブルに反映させたい、
>ということです。

の部分で、変更するのは画面Aの明細なのか画面Bの
テーブルbなのかがよくわかりませんでした。

実際のデータではなくて構いませんので、フローを教えていただけますと
回答できるかもしれません。
・ツリー全体表示

【3225】Re:Accessのクエリー結果をレポート方法
回答  こもれび  - 04/8/15(日) 8:02 -

引用なし
パスワード
   関数を使う場合は次のようにしましょう。
非連結のテキストボックスを「グループのフッター」に設けます(←重要)
で、コントロールソースに次のように記述します。
=-Sum([色]="黒")
これを「ページフッター」に設けたテキストボックスに記述したりしますと、
Accessのレポートは受け付けてくれません。

レポートを作成する際に、グループを作ってください。
・ツリー全体表示

【3224】Re:テーブルへのレコード自動追加
質問  ごろ  - 04/8/15(日) 1:25 -

引用なし
パスワード
   こもれびさん、返信ありがとうございます。

>ご質問の内容ですが、キーを同一にするということは
>顧客固有のデータということになります。
>上にあげた例のように契約日などの変化するデータや
>繰り返し発生するデータなどはないのでしょうか?
>これは、データベースの「正規化」という重要なポイント
>なのですが、これを誤ると使いにくいものが出来上がってしまいます。

説明不足でした、すみません。

ご指摘の通り、キーを同一にすることは顧客固有のデータと言うことになります。
顧客マスターに契約テーブルの項目を入れない理由は、
顧客マスターは既に別のDBに存在しているものを参照のみで利用します。
そのDB自体もMBDからは更新できない(社内ルール)DBである為の苦肉の策として
今回のような形で考えてみました。

契約テーブルの「@契約」の項目は商品の性質上、Yes/Noの変更が繰り返し
発生します。また、他にも「@契約_更新日」など変化するデータもあるため、
別テーブルとして作成し、リレーションを持たせて、
契約テーブルに関する部分のみ、更新を行えるようにしたいのですが、
確かに、自分で書いていても使いにくそうなDBですね。。。

>さて、「同じ番号でレコードを追加する」ことはできます。
>顧客の情報を呼んでおいて、書き込みのときに
>「契約テーブル」のIDフィールドに書き込めばOKです。

「やるべきこと」は理解できました。が、私が使用している本に
具体的な手法を見つけることが出来ませんでした。。。
使用する関数(?)など、ヒントで良いので情報をいただけないでしょうか?
申し訳ありません。

>ただし、契約テーブルのIDフィールドは「数値」にしましょう。
>マスターに使用した「オートナンバー」はテキストではなく
>数値です。

ありがとうございます。
さっそくさっそく変更しておきました。

ご教授よろしくお願いいたします。
・ツリー全体表示

【3223】コンボボックスについて
質問  奈美 E-MAIL  - 04/8/14(土) 21:57 -

引用なし
パスワード
   いつもお世話になっております。

コンボボックスのヘルプを読んでもよく分からないため、
質問です。

現在、画面Aの明細行をダブルクリックすることにより、
画面bを表示させ、データの変更等を行っております。
画面aでは検索条件のコンボボックスに区分テーブル
をジョインしたクエリから区分名を表示させるように
なっているのですが、画面bでは区分名を持っていない
テーブルbをコントロールソースとしているため、
区分が数字でしか表示できません。

今やりたいことは、画面Aの明細行をダブルクリックする
と、画面Bが出てきて、そこのコンボボックスには
区分テーブルの区分名を表示させ、変更すると、
選ばれた区分名の区分コードをテーブルに反映させたい、
ということです。

この場合、コンボボックスを表示させているフォームが
区分テーブルをクエリとしてジョインするべきなの
でしょうか。

どなたか、アドバイスをお願いします。
いつも質問ばっかりですみません。。
・ツリー全体表示

【3222】Re:テーブルへのレコード自動追加
発言  こもれび  - 04/8/14(土) 21:22 -

引用なし
パスワード
   >Aマスターに新規レコードが追加された際、(主キー:オートナンバー)
>Bテーブルの主キーフィールドにAマスターに新たに追加された主キーと同じ番号の
>レコードを自動で追加する方法はございますでしょうか?

顧客マスターと契約履歴というデータベースを考えられている
と思いますが、一つ例をあげてみます。

・顧客マスター
顧客ID   顧客名
 1  トマト株式会社
 2  タマネギ株式会社
 3  株式会社なす
 4  じゃがいも有限会社
 5  きゅうり商店

・契約履歴
契約ID  契約日   顧客  契約X  契約Y
 1   2004/8/10   1   yes   no
 2   2004/8/11   3   no    yes
 3   2004/8/11   1   no    yes
 4   2004/8/12   2   yes   yes

ご質問の内容ですが、キーを同一にするということは
顧客固有のデータということになります。
上にあげた例のように契約日などの変化するデータや
繰り返し発生するデータなどはないのでしょうか?
これは、データベースの「正規化」という重要なポイント
なのですが、これを誤ると使いにくいものが出来上がってしまいます。

さて、「同じ番号でレコードを追加する」ことはできます。
顧客の情報を呼んでおいて、書き込みのときに
「契約テーブル」のIDフィールドに書き込めばOKです。

ただし、契約テーブルのIDフィールドは「数値」にしましょう。
マスターに使用した「オートナンバー」はテキストではなく
数値です。
・ツリー全体表示

【3221】Re:Accessのクエリー結果をレポート方法
回答  YU-TANG WEB  - 04/8/14(土) 21:16 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> #エラー と表示されてしまいどこがいけないのでしょうか?

分かりません。
レポートのレコードソースに [色] という名前のフィールドが有って、
データ型がテキスト型でさえあれば、動くと踏んでいましたが。

こちらでそのエラーを再現させる方法を教えていただければ、
調べられるかもしれません。

それとも、私が何か勘違いしてるのかな?
これって、グループ別のレコード数をレポートフッターに表示させたい、
という意図ではなかったりします?
・ツリー全体表示

【3220】Re:Accessnoのクエリー結果をレポート方法
お礼  mana  - 04/8/14(土) 15:44 -

引用なし
パスワード
   こもれび さん回答ありがとうございます。
当方初心者ですので、詳しく回答していただいたのですが、関数を使って出来る方法で
出来たらと思います。
・ツリー全体表示

【3219】Re:Accessのクエリー結果をレポート方法
お礼  mana  - 04/8/14(土) 15:40 -

引用なし
パスワード
   YU-TANG さん回答ありがとうございます。
レポートフッターにテキストボックスを置いて、[コントロールソース]
に「=-Sum([色]="青")」にしてみたのですが
#エラー と表示されてしまいどこがいけないのでしょうか?
・ツリー全体表示

【3218】テーブルへのレコード自動追加
質問  ごろ  - 04/8/14(土) 14:31 -

引用なし
パスワード
   初めて投稿させていただきます。ACCESS超初心者です。
独学で進めておりますが、行き詰まってしまいました。
表現不足が多々あるかと思いますが、ご教授よろしくお願いします。

Aマスターに新規レコードが追加された際、(主キー:オートナンバー)
Bテーブルの主キーフィールドにAマスターに新たに追加された主キーと同じ番号の
レコードを自動で追加する方法はございますでしょうか?

具体的には会社マスターと契約テーブルがあり、
■会社マスター
会社ID オートナンバー(主キー)
会社名 テキスト型
 ・
 ・
 ・

■契約テーブル
会社ID テキスト型(主キー)
X契約 Yes/No型
Y契約 Yes/No型
 ・
 ・
 ・

と言った感じになります。会社マスターは参照のみ可能なDBであるため、
会社マスターと契約テーブルでクエリを作り、契約の有無を管理していきたいと
考え、作成を進めております。
会社マスターに新たに追加があった際に、契約テーブルの会社IDに同じIDで
新レコードが自動追加されるようにしたいです。

(リアルタイムの必要は無く、例えば、契約テーブル更新用フォームを開いた時や、
 会社マスター参照フォーム内に契約状況確認ボタン等を作成して、クリック時に
 レコードのチェックが入り、自動追加がおこなわれれば問題ありません。)

ご教授、よろしくお願いします。
・ツリー全体表示

【3217】Re:Accessnoのクエリー結果をレポート方法
回答  こもれび  - 04/8/14(土) 4:31 -

引用なし
パスワード
   説明が少々わかりづらいので補足します。

得られたレコード数とパラメータを固有情報として渡してしまうやりかたです。
レポートに渡す prtargs に入る文字列が、例えば
「青2 黄1 赤1」とするわけです。
・ツリー全体表示

【3216】Re:Accessのクエリー結果をレポート方法
回答  YU-TANG WEB  - 04/8/13(金) 23:51 -

引用なし
パスワード
   レポートフッターにテキストボックスを置いて、[コントロールソース]
に「=-Sum([色]="青")」とかいうのとは違う話ですかね。
・ツリー全体表示

【3215】Re:Accessnoのクエリー結果をレポート方法
回答  こもれび  - 04/8/13(金) 17:37 -

引用なし
パスワード
   ▼ちっち さん:
>下記のようなデータをパラメータクエリーで抽出した後に計算出来る方法を教えて下さい

パラメータクエリーで得られたレコードのレコード数をVBAで得られることは
わかりますか?
もしそれがわかれば、DoCmd.openreport でprtargsを出力するレポートに
渡し、Report_openプロシージャの中で渡されたデータをレポートに配置
されたラベルなりテキストボックスに入れるというのはいかがでしょうか。
(prtargsは文字列データです)


・レポートに渡す固有のデータを持ったレポート出力のコード

  DoCmd.OpenReport "130_R", acViewPreview, "501_T", , , PrtArg

・レポートを「開く時」のプロシージャ
Private Sub Report_Open(Cancel As Integer)
'
'
'
'
'
  If OpenArgs <> "" Then
   Me!LblTitle.Caption = Mid(OpenArgs, 1, InStr(1, OpenArgs, "\") - 1)
   Me!LblAddress.Caption = Right(OpenArgs, Len(OpenArgs) - InStr(1, OpenArgs, "\"))
  End If

End Sub

上の例はたまたま私が現在作成しているアプリケーションのソースコード
です。
レポートに渡されたprtargsをデリミタを使用して2つに分解し、別々の
ラベルに入れています。

注)
その1
レポートのReport_Open中の変数は「OpenArgs」としてください。

その2
レポートにてprtargsのデータを入れるところにラベルを使うときは、
ラベルのCaptionの初期値(デザイン時)は適当な文字列を入れておいて下さい。
(空白のラベルは作れなかったと記憶しています)
・ツリー全体表示

【3214】Re:Accessのレポートについて
お礼  mana  - 04/8/13(金) 17:02 -

引用なし
パスワード
   こもれび さん
早速のお返事ありがとうございます。

>レポートのレイアウトは次のうちのどれでしょうか。
 表形式で作成しています。

通常はレポートの詳細の「高さ」はデザインビューのプロパティで調節したら、詰まったのですが、エクセルみたいに表が詰まるような感じが欲しかったものですから、でもわかりましたので助かりました。
ありがとうございます。これからもよろしくお願いします。
・ツリー全体表示

【3213】Re:VBからレポートを表示
回答  こもれび  - 04/8/13(金) 17:00 -

引用なし
パスワード
   >VBでACCESSのレポートを表示するには、どのようにすれば良いのでしょうか?
>方法を教えて下さい。

VBのコードで AutoexecマクロのあるAccessファイルを呼び、レポートを
表示するというのはいかがでしょうか。
Autoexecマクロではレポートを表示させるプロシージャを呼ぶように
すればよいのではないかと思います。


・Access起動時に呼ばれる autoexecマクロ
アクション:プロシージャの実行
プロシージャ名:main()

・Autoexecマクロで呼び出すプロシージャ
Public Function main()
    DoCmd.OpenReport "130_R", acViewPreview, "501_T"
End Function
・ツリー全体表示

【3212】Accessnoのクエリー結果をレポート方法
質問  ちっち  - 04/8/13(金) 16:46 -

引用なし
パスワード
   下記のようなデータをパラメータクエリーで抽出した後に計算出来る方法を教えて下さい
 データ
 氏名  色   仕様  備考
 A男  青   ○
 B子  黄    
 C美  青   ○
 D朗  赤
 合計 青 2
    黄 1
    赤 1
 これは計算結果はレポートにも自動で表示できるようにもしたいので、よろしくお願いします。
・ツリー全体表示

【3211】Re:Accessのレポートについて
発言  こもれび  - 04/8/13(金) 16:38 -

引用なし
パスワード
   >アクセスのレポートでデータが少ないと間が空いてしまいます。それを詰める方法を教えて下さい。

レポートのレイアウトは次のうちのどれでしょうか。

1.単票形式
2.表形式
3.帳票形式

どの形式にしましても、通常はレポートの詳細の「高さ」はデザインした時に
決定し、この値がレコード数によって変化することはないと思いますが…?
一度問題のレポートをデザインビューにてプロパティを確認してみてください。
詳細のプロパティ中の「高さ」をメモしておき、出力したレポートのレコード
とレコードの間隔(長さ)がメモした数値と違っていたら何らかのトラブル
が発生していると思います。
メモした数値と同じでしたら、レポート出力そのものには問題なくご質問の
解決方法は詳細の高さを詰めるしかないのではないかと考えます。
・ツリー全体表示

【3210】Re:レコードが重複して登録されてしまう。
回答  こもれび  - 04/8/13(金) 12:53 -

引用なし
パスワード
   >二重登録は?

ことら様の作成されたフォームが「t_main」テーブルとの連結フォーム
になっているのが原因ではないでしょうか。

連結フォームになっていますと「登録」ボタンをクリックし、イベント
プロシージャを呼んだあとに移動ボタンをクリックするようなことを
行いますとテーブルのデータは2重になってしまいます。

解決方法としては「非連結」とすることだと考えます。
・ツリー全体表示

【3209】Accessのレポートについて
質問  mana  - 04/8/13(金) 12:48 -

引用なし
パスワード
   今日 このHPを見て初めて質問します。
アクセスのレポートでデータが少ないと間が空いてしまいます。それを詰める方法を教えて下さい。
・ツリー全体表示

496 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084785
(SS)C-BOARD v3.8 is Free