図1、データが5000件位の製品テーブルがあります。
図1項目名の番号に対する名称等は別のテーブルにあります。

図1(テーブル)
----------------------------------------------------------
 製品番号 | 予算番号 | 新製品番号 | ・・・ | ・・・
----------------------------------------------------------
 3310001 | 3230002  |  ・・・   | ・・・ | ・・・
 3310001 | 3230002  |  ・・・   | ・・・ | ・・・
 3310010 | 3230015 |  ・・・   | ・・・ | ・・・
・      ・      
   ・      ・

テーブル図1を使ってクエリ又はフォームで、「材質番号」という項目を追加して図2のような感じでフォームを作成したいのです。
材質番号という項目はベースとなる図1テープル、図1クエリには無く、別テーブルになっています。

図2(フォーム)
---------------------------------------
|製品番号|(製品名称テーブルより製品名) |
---------------------------------------

---------------------------------------
|予算番号|(予算名称テーブルより予算名称)|
---------------------------------------

----------------------------------------
|材質番号|(材質名称テーブルより材質名称)|
----------------------------------------

なお、作成するフォームは各番号と名称を使用してのデータ検索のみで、入力はしません。

ちょっと質問がややこしくなってしまいましたので、簡単にやりたいことを言いますと、製品フォームにまったく関係の無い材質テーブルの材質番号を、製品フォームに表示させて、検索、閲覧したいということなのです。

Accessもですが、VB&VBA等初心者ですので、できれば使用しない方法がありましたらよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

希望されているような表示を行いたい場合、次のような条件が必要になります。



・「材質番号」の取得元テーブルに「製品番号」もしくは「予算番号」と同じルー
 ルのデータを収納しているフィールドがあり、データ型が図1テーブルの前述フ
 ィールドと一致している。
・上記を満たした上で「製品番号」もしくは「予算番号」(とそれに相応するフィ
 ールド)は、図1テーブルと「材質番号」のあるテーブル間で同じ製品に関して
 同じ番号を使用している。

この条件を満たした上で、下記の方法でクエリとフォームを作成します。

1.図1テーブルを元に、「選択クエリ」を作成する。
  (フィールドは「製品番号」および「予算番号」だけを選択)

2.作成したクエリをデザインモードで開き、メニューの「クエリー(Q)」-「テー
  ブルの表示(T)」から「材質番号」のフィールドを含むテーブルを表示させる

3.図1テーブルのフィールドリストのボックスから、「製品番号」もしくは「予
  算番号」のうちの双方にあるほうのフィールドを手順「2.」で開いたテーブ
  ルのフィールドリスト内の同名フィールド(かそれに順ずるもの)のところま
  でドラッグアンドドロップする

4.「3.」の手順で双方のフィールドリスト間に線が表れたら、クエリのフィー
  ルドリストにフィールド:材質番号、テーブル:「2.」で開いたテーブル名
  のフィールドを追加する

5.クエリを保存して閉じ、ここまでの手順で作成したクエリを元にしたフォーム
  を作成する

以上です。すこし難しいかもしれませんが、上記は「リレーションシップ」という機能を利用する方法です。条件が合うようでしたら利用してみてください。
    • good
    • 0
この回答へのお礼

Sarukanさん、お返事ありがとうございます。
手順を参照しながらやってみたいと思います。

お礼日時:2001/06/20 17:36

#2、#3で回答させていただいたSarukanです。



>クエリに材質番号フィールドを作成しようと思ったのですが、「パラメータの入
>力」と画面が開いて何かを入力するように言われるのですが、フィールドの追加
>は項目名を入力しただけではいけないのでしょうか?

その通りです。
条件にも書きましたが、リレーションシップを作成するためには双方のテーブルの関連付けるフィールドに1対1、1対多、多対多のいずれかのかたちで同じデータが保存されている事が絶対条件になります。そのため、「図1テーブルは毎日書き換わってしまう」という条件のもとでは材質テーブルのほうに製品番号フィールドを作成し、地道にその製品番号がどの材質番号の材質を使用しているか…といったレコードを製品番号分作製するというのが一番確実な方法となります。
おそらくは気の遠くなるような作業とも思われるかもしれませんが、Excelなどで製品番号一覧をつくり、そこに材質番号を付帯させた表を作成、それをAccessにインポートさせて材質テーブルを再作成すればすこしは楽になると思います。
参考までに解決方法のひとつとしてご覧いただければ幸いです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
また、お返事が遅くなり申し訳ありません。
時間はかかりそうですが私にもできそうですので、がんばってやってみます。
大変勉強になります、本当にありがとうございます。

お礼日時:2001/06/20 23:59

確認したい事があります。



一つの製品(「製品番号」)に対して、日によっては違う「材質番号」が割り当てられることがあると言うことですか?

>やはり関連性がないと無理でしょうか

図2(フォーム) では、一緒のフォームに「製品番号」と「材質番号」を表示しています。
と言うことは、このフォームで表示する段階では何らかの関連性も持っていると考えられます。

多分、フォームを表示しているクエリー(今は明確になっていませんが)が日時のテーブルを現していて、その中では「製品番号」と「材質番号」の関連があるはずです。

この回答への補足

補足要求ありがとうございます。
また、遅くなりまして申し訳ありません。

>一つの製品(「製品番号」)に対して、日によっては違う「材質番号」が割り当てられることがあると言うことですか?

いいえ、そうではなく毎日数件の新しいデータが増えていくと言うことです。

>図2(フォーム) では、一緒のフォームに「製品番号」と「材質番号」を表示しています。
と言うことは、このフォームで表示する段階では何らかの関連性も持っていると考えられます。

すみません、図2は私がこうしたいと言う理想で書いたものなので、実際は材質番号はフォームに表示されておりません。

補足日時:2001/06/20 23:43
    • good
    • 0

補足です。


もし#2で書き込ませていただいた条件を満たしていない場合、図1のテーブルに材質番号フィールドそのまま作成して手入力sるのが一番早い方法となってしまいますが、もし表記されていない右のほうのフィールドに材質名等のフィールドがある場合でも#2の方法は使用可能です。
どちらにせよ、材質の一覧テーブルガある場合、図1のテーブルに材質名などのフィールドを作成しておくことをお勧めいたします。おそらくその方が何かと便利だと思いますよ。

この回答への補足

補足ありがとうございます。
図1のテーブルは毎日書き変わってしまいますので、クエリに材質番号フィールドを作成しようと思ったのですが、「パラメータの入力」と画面が開いて何かを入力するように言われるのですが、フィールドの追加は項目名を入力しただけではいけないのでしょうか?
たびたびすみませんが、よろしくお願いいたします。

補足日時:2001/06/20 17:50
    • good
    • 0

テーブル図1の中の項目と「材質番号」と関連がある項目はありますか?


どうゆう条件で「材質番号」と関連付けているのですか?
例えば「材質番号」の入っているテーブルの中には「製品番号」が入っていると言うことです。(「材質番号」のテーブルも教えて貰わないと分からない気がします)

この回答への補足

早速のお返事ありがとうございます。
説明が足りなくてすみません。
図1と材質テーブル(材質番号)とはまったく関連づいておりません。

材質テーブルの中身ですが

|材質番号|材質名称|材質カナ|製造場所|・・・
8000001|  金  |キン  | 埼玉 |・・・
8000002| 鉄   |テツ  | 千葉 |・・・
・    ・    ・    ・
   ・    ・    ・    ・

といったデータが入っております。
やはり関連性がないと無理でしょうか、たとえば関連する項目を作ってしまうというようなことも出来るのでしょうか?
おかしな質問をしてましたらすみません、よろしくお願いいたします。

補足日時:2001/06/20 17:23
    • good
    • 0

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

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Qaccessのフォームで製品番号と製品名を表示させたい

こんにちは。いつもお世話になります。突然で申し訳ありませんがすみません教えてください。

テーブル1に製品番号と製品名が書いてあり、それを基にフォームを作成します。
そのフォーム内に、製品番号をプルダウンで選択できるようにして、選択した製品番号をその隣にあるテキストボックスに表示させたいのです。

すみません初歩で。よろしくおねがいします。

Aベストアンサー

>製品番号をプルダウンで選択できるようにして選択した
>製品番号をその隣にあるテキストボックスに表示
プルダウンというのをコンボボックスとして
Cmb1という名前でテーブル1を基にコンボボックスを作り[製品番号][製品名]の順で表示するようにします。製品名を表示するテキストボックスをText1とした場合。
そのCmb1のプロパティを開きイベントの更新後処理に下記の記述をします。

Private Sub Cmb1_AfterUpdate()
Text1 = Cmb1.Column(1)
End Sub

これでCmb1で製品番号を選択するとText1に製品名が表示されます。
フォーム上の表示のみですが。

Qアクセスでフォームに追加項目を増やす場合、サブフォームにしたほうがよいのか、しないほうがよいのか教えてください。

Access2003を使用しています。
「取引先マスタ」という取引先の住所などが入ったフォームに契約書に関するデータも入力できるようにして欲しいと依頼が入りました。
それは契約の種別ごとに「契約締結日」、「取引先契約者」、「弊社担当者名」を設けます。
このような場合、契約書に関するデータは別のテーブルに入力してサブフォームにしたほうがよいのでしょうか?
それとも「取引先マスタ」と同じフォームのなかに入れたほうがよいのでしょうか?
あとで支障が出にくい方法をとりたいのですが、Accessに熟練されている方はどちらの方法を取られているのでしょうか?
アドバイスをお願いいたします。

Aベストアンサー

基本的な考え方としてはテーブル構成の正規化を考える必要があります。
「取引先マスタ」に契約書に関するデータを追加する場合、同じ取引先で契約が追加されたり、複数の契約が発生することはないのでしょうか?

取引先1件に関して必ず1契約のみであれば、取引先マスタに必要な項目を追加することも考えられると思いますが、一般的には契約内容を登録する別テーブルに、「取引先コード」、「契約種類」、「契約締結日」、「取引先契約者」、「弊社担当者名」などのフィールドを作成し、取引先コードでリレーションシップを作成することが一般的かと思います。

その上でサブフォームなどを作成し、画面で複数契約を同時に確認できるようにするか、フィルタなどを使い契約の種類を条件にして対象を絞り込むように作る方が後々支障が出にくいと思います。

QACCESS ACCESS VBA テーブル テーブル変換 番号 個数 変換

私はプログラム初心者です。
業務の中でACCESSを使っております。
ACCESSでテーブルの変換についてのプログラムが分からなかったので
質問させて頂きました。


以下のようなテーブル(テーブル1)があります。
管理番号|NO|名前
1|NO.1|スプーン
2|NO.2|スプーン
3|NO.3|スプーン
4|NO.1|フォーク
5|NO.2|フォーク
6|""|ナイフ
7|NO.1|お鍋
以上のテーブルを新たにテーブル(テーブル2)を作成し、次のようなにしたいです。
管理番号|台数|名前
1|3|スプーン
4|2|フォーク
6|1|ナイフ
7|1|お鍋

テーブル変換の機能
・名前が同じ物の個数を表示する
・名前が同じ物の管理番号は若い番号にする

よろしくお願いいたします。

Aベストアンサー

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「最小」に変更します。
 並べ替えのところを「昇順」に変更します。

・テーブル内の「NO」をダブルクリックします。
 フィールドに「NO」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「カウント」に変更します。

・テーブル内の「名前」をダブルクリックします。
 フィールドに「名前」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。

・ここで、表示を「データシートビュー」に切り替えます。(注1)
 管理番号の最小、NOのカウント、名前 の表が表示されます。
 名前「ナイフ」部分のカウントが得たいものではなく「0」になっています。
 これは、NULLのデータはカウント対象外となっているためです。

・表示を「SQLビュー」に切り替えます。
 1行目中ほどに 「 Count(テーブル名.[NO]) AS NOのカウント, 」があります。
 NOに限定した個数を求めるのでなく、単にレコード数を得たいので
 これを 「 Count(*) AS 台数, 」に書き換えます。
 XXXXX AS YYYY は、XXXXXをYYYY名で、という意味合いになるので、
 同様に「管理番号の最小」->「管理番号」に修正します。

・表示を「データシートビュー」に切り替えます。

これで求めたいクエリは作成することができました。
このクエリをそのまま使うのではなく、結果をテーブルに書き出すには続いて以下を行います。

・表示を「クエリ デザイン」に切り替えます。

・メニューの「クエリ」->「テーブル作成」をクリックします。
 テーブル名を入力し、「OK」

 クエリデザイン上変化はありませんが、以上で終了です。

確認)
表示を「SQLビュー」に切り替えます。
1行目最後あたりに、「 INTO テーブル名 」が追加されています。
これが結果をテーブルに書き出す命令部分になります。


(注1)
「'*'で選択したフィールドはグループ化できません。」というメッセージが出たら、クエリ作成をいったんあきらめます。
(クエリデザインの画面を閉じます)
メニューの「ツール」->「オプション」の「テーブル/クエリ」タブの「クエリ デザイン」部分の「全てのフィールドを表示する」チェックを外し「OK」します。
クエリ作成を初めからやり直します。

(注2)
(注1)の変更は、以降も変更されたままとなるので、今回だけ回避するには、
表示を「SQLビュー」にし、1行目最後の「 テーブル名.名前, * 」の「 , * 」を削除します。


書く練習がてら、初心者向けに書いてみましたがいかがでしたでしょうか。

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」...続きを読む

Q複数項目でのサブフォームとのリンク

初めて質問いたします。よろしくお願いいたします。
入力フォームを作成しています。店舗コード、商品コードを入力するとそのコードに該当した商品一覧がサブフォームに表示されるというものです。
メインフォームに入力欄を設けサブフォームに一覧を表示させています。店舗コードも商品コードも複数入力ができるように、二つの入力欄を設け、条件が入るクエリーにBetween演算で出力したものをサブフォームに表示させています。クエリーもサブフォームの元になっているフォームにも結果はきちんと現れますが、メインーサブフォームにはなぜか、正しく表示されません。
from店舗コードとto店舗コード、from商品コードとto商品コードという4つのフィールドでリンクしています。
(親リンクフィールド、子リンクフィールドともにfrom店舗コード;to店舗コード;from商品コード;to商品コードとしています。)リンクの仕方が悪いのでしょうか?
アクセスに詳しい方是非お知恵をお貸しください。

Aベストアンサー

すみません。なかなか時間が取れなくてご回答遅くなりました。

こんな感じです・・・

まずフォーム上には、店舗コードと商品コードを入力するフィールドがfromとtoで合計4つあります。
これらの検索条件入力後に検索を開始するボタン「検索」ボタンが必要です。
そして最後に検索結果を表示する商品一覧のフィールドが
複数あるわけですよね!?

1.フォームのコントロールソースには[テーブル1]を指定
2.商品一覧の各フィールドのコントロールソースには、[テーブル1]の該当するフィールド名を選択
3.フォームのコントロールソースを無指定(ブランク)に戻す。
4.「検索」ボタンの「クリック時」のイベントプロシージャーで前記のForms![フォーム1].RecordSource = ~~を記述する。

これによってフォームの初期表示時には一覧は表示されず、検索条件を入力後「検索」ボタンを押してはじめて一覧が表示されます。

kurohiroさんが書かれたSQL文の詳細は検討しておりませんが、基本的にはこれをForms![フォーム1].RecordSource = ~~に記述していただければよろしいかと思います。

すみません。なかなか時間が取れなくてご回答遅くなりました。

こんな感じです・・・

まずフォーム上には、店舗コードと商品コードを入力するフィールドがfromとtoで合計4つあります。
これらの検索条件入力後に検索を開始するボタン「検索」ボタンが必要です。
そして最後に検索結果を表示する商品一覧のフィールドが
複数あるわけですよね!?

1.フォームのコントロールソースには[テーブル1]を指定
2.商品一覧の各フィールドのコントロールソースには、[テーブル1]の該当するフィールド名を...続きを読む

QPostgreSQLでテーブルの項目の操作

例えば、
1.create table shinamono (hinmei text,nedan,int);
で作成済みのテーブルへbikou項目を追加するにはどうすればいいのでしょうか?
2.create table shinamono (hinmei text,nedan,int);
で作成済みのテーブルのnedanの項目を削除するには?
3.create table shinamono (hinmei text,nedan,int);
で作成済みのテーブルのnedanの項目名を修正するには?

上記の様な操作は出来るのでしょうか?
よろしくお願いいたします。

Aベストアンサー

# PostgreSQLにそんなに詳しいわけではありませんが・・・。

まず、PostreSQLはSQL92準拠なので、項目の追加は下記の要領でできますので、1.は可能です。
alter table table名 add(カラム名 型(桁数));

ただし、項目の削除はできませんので、2.3.は不可能です。

3.までの操作をしたいのであれば、
1)PSQLでcopyコマンドを使用してDBの内容をサーバー上にテキストファイルで落とす。
2)テーブルをすべて削除して作り直す
3)PSQLのcopyコマンドを使って、DB内に1)で待避したデータを読み込ませる
で対処できるかと思います。

PSQLやcopyコマンドの詳細については、PostgreSQLの解説本の最初に載っていますので、そういった資料をご参照ください。


このカテゴリの人気Q&Aランキング

おすすめ情報