• 締切済み

ACCESS

どうか皆さんのお力添えを下さい。 ACCESS2010を利用して、以下の様な注文フォームaccdbを完成させていと考えています。現在、以下のところまで作業が進んでいます。 (1)テーブル (1) 注文履歴テーブル 注文ID・・・オートナンバー型 商品No・・・テキスト型 数量・・・数値型 (2) 商品テーブル 商品No・・・テキスト型 商品名・・・テキスト型 単価・・・通貨型 (3) 顧客テーブル 顧客ID・・・数値型 顧客名・・・テキスト型 パスワード・・・テキスト型 (2)フォーム (1)ログインフォーム 顧客ID入力用テキストボックス パスワード入力用テキストボックス ログインボタン・・・VBAを使って顧客テーブルに入っている顧客ID、パスワードが一致すれば注文フォームが開くところまではできました。 (2)注文フォーム(商品画像一覧があり、それをクリックすると商品No毎に個別に作成した注文フォームにジャンプします) ・コントロールボックスで数量を選ぶ ・注文ボタンを押すと注文履歴テーブルに商品ID、商品名、商品数が反映されます。 ここからが質問内容になります。 まず、はじめにログインフォームで入力後、照合OKになった顧客ID、パスワードを その後開いた注文フォームでの注文作業が完了、または中断するまでの間、 注文履歴に自動的に入力させ続けることはできますでしょうか?複数商品の注文が あった際は注文履歴テーブルにおいて複数レコードが連続して同じ顧客IDになるような 方法はあるでしょうか? ネット通販のようなものをイメージしております。 その他にもっと効率の良いやりかたなどあればご教授下さい。 どうぞよろしくお願いします。

みんなの回答

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.4

#2です。 少し勘違いしてました。 ログインフォーム ⇒ 注文フォーム ⇒ 商品毎注文フォーム というフォームの階層だったんですね。 だとしたら、注文フォームから商品毎注文フォームを開くときに(商品画像 がクリックされたときに)、注文フォームで保持している顧客ID及びパスワード を商品毎注文フォームにコピーします。 なので、商品毎注文フォームにもテキストボックスを用意しておく必要が あります。 『商品No毎に個別に作成した注文フォームにジャンプします』ってことは ログインフォーム ⇒ 注文フォーム ⇒ 商品No1注文フォーム                        ⇒ 商品No2注文フォーム                              ・                              ・ って感じなのでしょうか。 商品No毎にフォームを作成された意図としては、これらのフォームに商品画像 があるから?ってことなのでしょうか。 そうなら、商品毎に作成せず1つだけつくって、注文フォームで画像がクリック されて商品毎フォームを開く際に、  Forms![商品毎フォーム]![イメージ] = "C:\Pic\商品No1.jpg" ってやればよいかと思います。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.3

#2です。 注文フォームにテキストボックスを2つ追加します。 テキストボックスの名前はそれぞれ「顧客ID」、「パスワード」とします。 ※本来ならこれらのテキストボックスを非可視にしますが、検証中と  いうことなので、とりあえずコピーされたことが見えるよう可視のまま。 次にログインフォームでログインボタンを押され、注文フォームを 開いた後に、  Forms![注文フォーム]![顧客ID] = Forms![ログインフォーム]![顧客ID]  Forms![注文フォーム]![パスワード] = Forms![ログインフォーム]![パスワード] とします。 これで、注文フォームのそれぞれのテキストボックスに顧客IDとパスワードが 表示されていればOKです。 次に、注文フォームの注文ボタンが押されたら、  (注文フォーム上の必須項目にちゃんと入力されているかチェック)           ↓  注文履歴テーブルにレコード追加(AddNew)           ↓  注文フォーム上に入力されている商品IDや、商品名、商品数を登録。  このときに、注文フォーム上の顧客IDとパスワードも登録           ↓  注文履歴テーブルをアップデート           ↓  次の注文入力に備え、商品IDや商品名、商品数をリセット(Null)して  顧客IDとパスワードはそのまま(引き続き同じ顧客が注文するので) って感じでしょうか。 注文フォームが閉じられるまでは、ずっと同じ顧客IDとパスワードを キープされるので、注文ボタンが押された後に、注文フォームを閉じない ようにする必要があります。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.2

わたしだったら・・・ 注文フォームに非可視のテキストボックスを2つ作っておいて、そこに 注文フォームが開かれるタイミングで顧客IDとパスワードをそれぞれ コピーします。 注文フォームから注文ボタンがおされたときに、顧客IDとパスワードを 作成されたレコードに登録するって感じでしょうか。 >複数レコードが連続して同じ顧客IDになるような方法はあるでしょうか? この意味があまり分かりませんでしたが、上記のように注文ボタンが おされる都度、注文フォーム上に保持している顧客IDとパスワードを レコードに登録すれば、同じ顧客IDで複数レコード作成されるかと思います。 もっとよい方法はあるかと思いますが、わたしの思いつくのはこんな感じです。 ちなみに、ひとつのaccdbを複数の顧客に配布するんですか? だとしたら、他の顧客情報(顧客名や顧客ID、パスワード)が見られちゃったら マズイのでは?

vulpeszerda
質問者

お礼

さっそくのご返事、誠にありがとうございます。 >注文フォームから注文ボタンがおされたときに、顧客IDとパスワードを作成されたレコードに登録するって感じでしょうか。 この方法ももう少し詳しく教えていただけますでしょうか? ログインフォームで顧客ID,パスワードを入力して以降の作業からご教授頂けると大変 ありがたいのです。 >ちなみに、ひとつのaccdbを複数の顧客に配布するんですか? 今のところその予定はございません。まだまだ検証の段階です。 仰る通り、実運用においては複数の顧客データベースが必要かと思われます。 お手数おかけしますがよろしくお願いします。

回答No.1

課題1、[顧客ID]の値の保持・引き渡し要領の決定。  A:広域変数にて値を保持する。<------ 非推奨  B:ログインフォームを参照する。<---- 非推奨  C:OpenArgsプロパティを利用する。<-- 推奨  http://www.happy2-island.com/access/gogo03/capter40203.shtml 課題2、[顧客ID]の値の反映要領の決定。  A: 入力フォームのオープン時に値を代入する。<------ 非推奨  B:「規定値」プロパティに値を設定する。<----------- 推奨  http://www.officepro.jp/access/field/index5.html >それをクリックすると商品No毎に個別に作成した注文フォームにジャンプ。  ウーン!どういう意味なのかな!? >注文履歴テーブルのレコードが連続して同じ顧客IDになるような方法はあるでしょうか? [注文履歴.注文ID]=顧客ID*100000+同一顧客のMAX+1 と[注文履歴.注文ID]を採番すればOK。だが、普通は、そんなことはしませんね。

関連するQ&A

  • ACCESS

    皆さんのお力添えを頂けますでしょうか? Microsoft ACCESSにおけるレコードの入力について 現在access2010を使い以下のプログラムを作成しています。 (1)テーブル : T_注文明細 (フィールド名)ー(データ型) ・注文ID ー オートナンバー ・商品No ー テキスト ・数量 ー 数値 (2)テーブル : T_注文数 数量として1~10までの数値が入れてあります。 (フィールド名)ー (データ型) ・数量 ー 数値 (3)テーブル: T_商品 (フィールド名)ー (データ型) ・商品Noーテキスト ・商品名ーテキスト ・金額ー通貨 (4)フォーム : F_商品一覧 商品リストが画像付き(商品1種類につき1画像)で示されており、画像をクリックすると 別のフォーム:F_商品○○(添付写真のようなフォームが商品毎に作成されている)へと進みます。 (5)フォーム : F_商品○○ コントロールボックスと、注文ボタンを配置しており それぞれボタンにコードを埋め込んでいます。 ・コントロールボックスについて 値集合ソース : T_注文数 値集合タイプ : テーブル/クエリ 上記(2)のT_注文数をソースに数量:1~10を選択します ・注文ボタンについて 以下の内容でコードを書いています。 Private Sub btn1_Click() Dim oRs As DAO.Recordset 'テーブル読み込み(レコードセット作成) Set oRs = CurrentDb.OpenRecordset("T_注文明細", dbOpenDynaset) 'レコードが見つかった場合 If oRs.NoMatch = False Then 'レコードの内容を書き換えます oRs.Edit oRs("数量").Value = Me.cmbsuuryou5.Value oRs("商品No").Value = "商品No○○" oRs.Update End If 'レコードセットの終了処理 oRs.Close Set oRs = Nothing MsgBox "注文しました。", vbOKOnly + vbInformation, "注文" End Sub 以上を踏まえ、現在下記の点で困っております 問題1: 数量を選択して、注文ボタンを押すとT_注文明細のフィールドに 内容が反映されますが、常に先頭のレコードが上書きされてしまいます。 希望は最新のレコードとしてテーブルに挿入され、既存のレコードを上書きすることなくレコード数を増やしたいのですが、うまくいき ません。 問題2: F_注文にて複数種類の商品をそれぞれ複数個注文した際に T _注文明細に複数のレコードが挿入(注文 ID,商品 No,数量)が挿入されてほしいのですが、 現状では問題 1と同様に、常に先頭のレコードの商品Noと数量だけが上書きされていまい、注文履歴が積み上がりません。 解決せずに困っております。 どなたか、ご教授頂けますでしょうか? よろしくお願いいたします。

  • Accessのコンボボックスで表示させるデータを1500件の中から条件値で絞り込むにはどうしたらいいのでしょうか?

    Access2003を使用しています 次のようなことをしたいのですが、方法がわからず悩んでいます。 「対応履歴」というフォームがあります。 その中にテキストボックス「ユーザNO」と「顧客名」があります。 ●このフォームの「顧客名」を入力したら、「ユーザNO」が自動的に入るようにしたいです●  (顧客から問合せが入った時点で顧客から聞きだせるのは顧客名で、ユーザIDは受付担当者がデータベースで調べたあとじゃないとわからないからです)。 「顧客名」はコンボボックスにして抽出をしたいです。 それの元ソースは、テーブル「顧客情報」から引っ張りたいのですが、1500件ほどあるので、見つけるのが困難なのがネックです。 そこで私が思いついたのは、抽出条件を指定するテキストボックスを別に設けて、そこに入力した文字を含む顧客名だけを顧客名コンボボボックスに表示させる方法です。([山]と入力すれば、山中、大山、(株)山田屋など「山」を含むすべての顧客名が候補にあがる) その中から該当する顧客名を選ぶと、ユーザNOテキストボックスにも自動的に入力される・・・といったものです。 このようなことは可能でしょうか? とすれば、どのような設定をすればいいのでしょうか? 私なりにやってみましたが、「顧客名」コンボボックスの候補の絞込みが出来ません。 私が考えた方法以外でも構わないのです。 F対応履歴の入力画面で「顧客名」から「ユーザNO」(T顧客情報にある顧客名とユーザNO)が連動されて入力できればいいのです。 F対応履歴 ユーザNO・・・テキストボックス 顧客名・・・コンボボックス 対応履歴ID T対応履歴 ユーザNO・・・テキスト型 顧客名・・・テキスト型 対応履歴ID・・・オートナンバー―――主キー T顧客情報 ユーザNO・・・テキスト型―――主キー 顧客名・・・テキスト型 フリガナ・・・テキスト型 どなたかお知恵をお貸しください。 よろしくお願いいたします。

  • ACCESS

    現在以下のシステムを検討しています。 (1)ログインフォームと(2)トップフォーム(3)注文フォームが別々に存在しており、 (1)ログインフォームは  ・ログインID入力用のテキストボックスが一個  ・パスワード入力用のテキストボックスが一個  ・ログインボタンが1個  設置されています。 以下はログインボタンクリック時に動作するプログラムです。 Private Sub cmdLogIn_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "IDを入力してください" Me.txtID.SetFocus Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "パスワードを入力してください" Me.txtPass.SetFocus Exit Sub End If Res = DLookup("パスワード", "T顧客", _ "顧客ID='" & Replace(Me.txtID, "'", "''") & "'") If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" Me.txtID.SetFocus Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "注文フォーム" '----ID,pass合致でフォームを開く。 Me.txtID = Me.txtID2 Me.txtPass = Me.txtPass2 DoCmd.Close acForm, "Fログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical Me.txtPass.SetFocus End If End Sub (2)トップフォームは  商品のリストが画像付き(商品一個につき画像一個)  で示され、画像を押すと商品別に作成してある注文フォームに進むのですが、  ログイン完了していないとログインを促すメッセージが出て注文フォームが開かないよう  にしています。  トップフォームにはテキストボックスを2個不可視の状態で配置しております。  以下は商品画像に埋め込んであるコマンドです。 Private Sub 商品画像 1_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "ログインしてください" Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "ログインしてください" Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "商品名" '----ID,pass合致で注文フォームを開く。 End If End Sub   (3)注文フォームは  ・数量選択のコントロールボックス  ・注文ボタン  ・キャンセルボタン  を設置しています。 【以下が質問内容になります】 「ロフインフォーム」内の入力値(テキストボックスに入力されていたIDやパスワード値)を注文フォーム内のテキストボックスに取得させる(あるいは設定させる)にはどのようにすればよいのでしょうか? 注文フォームにはテキストボックス2個( ID入力用と Password入力用)を不可視で配置しています。こちらのテキストボックス2個については手動入力は行わず、注文フォームが開いた際にログイン時の ID, Paswordがテキストボックスの中に自動的に入力あるいは設定されるようにしたいのですが、どのようにすればよいかがわかりません。 因みにログイン ID,Passwordは複数セットあり、ユーザーがログイン完了後、注文フォームを閉じるまでの間は 同一のID, Paswordの内容を保持したいと考えています。 上記の中にID,Paswordを保持させるようなコードを入れることは可能でしょうか? 注文フォームを開く際のコードに何か入れることができるのではないかと考えていたの ですが、よい案が浮かびません。 他によいやり方などがあれば教えていただけますでしょうか? よろしくお願いします。

  • Access2002で任意のレコードのみをレポートで印刷したい

    http://oshiete1.goo.ne.jp/qa5272888.html の続きです。 テーブルは下記のとおりです。(計4つ) 1.顧客テーブル(データ投入済み) ・顧客ID(テキスト) ・顧客名(テキスト) ・フリガナ(テキスト) 2.納品書テーブル(データはフォームから自動生成) ・納品書ID(オートナンバー) ・納品日付(日付) ・顧客ID(テキスト) 3.注文テーブル(データ投入済み) ・注文ID(テキスト) ・顧客ID(テキスト) ・納品書ID(テキスト) ・数量(数値) ・摘要(テキスト) ・選択(Yes/No) 4.商品マスター(データ投入済み) ・商品ID(テキスト) ・商品名(テキスト) ・単価(数値) 以上の4つのテーブルでテストDBを作っています。 上述したとおり、フォームで、 1.新規レコードの作製 2.納品日付入力 3.コンボボックス(従業員名、カナ)をコンボボックスで選択 という手順を踏み、納品書番号が自動的に振られるフォームまで作成できました。 これを元に、レポートとして、 ・顧客を選択 ・納品書番号を選択 して、選択したレコードをレポートに表示したい、という質問です。 前の質問で、下記ご回答を得ております。 --------------------------------------------------------------- 1.納品書の一覧 以前作成した「納品書番号」のレコードソースを SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 納品書テーブル.顧客ID FROM 納品書テーブル ORDER BY 納品書テーブル.納品書ID DESC; に変更して、新しいものが先に見えるようにします 2.フォームのプロパティで「データ」の「追加の許可」を「いいえ」にします。 3.ウィザードが起動したら「フォームの操作」「フォームを開く」と進み、「納品書番号(選択)」を開くようにします。これでいつでも新規納品書を作成できます 4.「納品書番号」フォームのイベントで「アクティブ時」を「[イベント プロシージャ]」にし編集ボタン(…)を押して、以下のようにします Private Sub Form_Activate() Me.Requery End Sub これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます 5.レポート「納品書」の作成 レコードソースは SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 従業員マスタ.従業員名 FROM 従業員マスタ INNER JOIN 納品書テーブル ON 従業員マスタ.従業員ID = 納品書テーブル.顧客ID WHERE (((納品書テーブル.納品書ID)=[Forms]![納品書番号]![納品書ID])); 6.レポートにフィールドリストから「納品書ID」「従業員名」などを貼り付けます 7.「納品書番号」をデザインモードで開き、ボタンを追加し「納品書」レポートをプレビューで開くようにします。これで任意の納品書が印刷できるようになります 8.実際のレポートは納品書番号に対応するアイテムが並ぶ必要がありますが、これはレコードソース(クエリ)を拡張することでもできるし、親子レポートにすることでも可能です。色々試してください --------------------------------------------------------------- fuuten_no_nekoさん、ありがとうございました。 これまでは「フォーム」に関する質問で、今回は「レポート」に関するものに進んできましたので、新規の質問にしたほうがよいとのアドバイスを受け、この質問を立ち上げます。 なお、「今ここまでできている」という部分は、補足に記述します。 どうぞよろしくお願いします。

  • アクセスである文字を含む検索

    ACCESS2000を使っています。 あるデータテーブル「発注書テーブル」があって、ここでは「(1)ID」「(2)顧客名(法人)」「(3)発注商品」「(4)納品済チェック」の4つフィールドがあるとします。 作業はフォームで行います。フォーム名は「発注書フォーム」。 「(2)顧客名」から検索をかけたくて、検索コマンドボタンをつくり、「検索フォーム」を発注書フォームとまったく同じ形態でつくり、そこにとべるようにしました。 「検索フォーム」には「検索」というテキストボックスを作ります。 「検索クエリ」というクエリを作り、発注書テーブルを素とし、すべてをデザインビューで表示するようにしました。 そして、「(2)顧客名」の抽出条件に[Forms]![検索フォーム]![検索]を入力します。 すると、「検索フォーム」の「検索」をコンボボックスにして、顧客名をすべて表示させ選択した場合は、「検索フォーム」では、選択した顧客の情報が表示されるようになりました。 が、しかし、「検索」をコンボボックスではなく、テキストボックスで、しかも顧客名の一部だけを入力したら、その文字を含むすべてのレコードを表示してほしいのです。 そこで、「検索クエリ」の「(2)顧客名」抽出条件にlike"*[Forms]![検索フォーム]![検索]*"と入力してみました。 そして「検索フォーム」の「検索」テキストボックス(非連結)に顧客名の一部を入力したところ、ぜんぜん絞りこみ抽出してくれません。 もちろん、クエリ上でも絞り込んでいない模様です。 どうしたら文字の一部からその文字を含む顧客名のレコードを全て抽出し、表示させることができるでしょうか? 細かくてすみませんが、かなり困ってます。 どうかわかる方、教えてください。 まったくちがう方法(別の手法)でもかまいません。 この説明でわからない部分がありましたら補足しますのできいてください。 よろしくお願いします。

  • コンボBOXで抽出した値をテキストBOXに表示したい

    入力用フォームで注文フォームを作成しているのですが、コンボBOXで商品Noを抽出し、テキストBOXに商品名を表示したいのですが、 Private Sub コンボ1_AfterUpdate() Me!テキスト1 = Me!コンボ1.column(1) End Sub と入力したのですが、他の行にも同じ商品名が表示されます。 商品NoをコンボBOXで指定し、数量を手入力という入力フォームを作成したいのです。 作成方法を教えてください。 よろしくおねがいします

  • ACCESS2000 コンボボックス

    こんにちわ。 コンボボックスを教えて下さい。 テーブル T_分類(1) ・分類(1)  オートNo ・分類(1)名 テキスト テーブル T_分類(2) ・分類(2)  オートNo ・分類(1)  数値 ・分類(2)名 テキスト 2つのテーブルを作成して、フォームも作成しております。 入力する時、分類(1)も(2)テキストボックスで選ぶようにしています。 それで、分類(1)を選ぶと、分類(2)のテキストボックスに分類(1)の分しか表示しないようにしたいのですが・・。 どのようにすればよいでしょうか? 初心者な者で、分かりやすく教えていただければ有りがたいです。

  • ACCESSのテーブル設計とクエリ

    ACCESS初心者です。 ACCESS2010 OSはWindows7です。 パソコンはアクセスとエクセルマクロの入門書を読み終えたレベルです。 只今、注文実績管理表を作成するために、必要な情報を複数のテーブルに 分解してコード化していますが、関連付けできない為にデーターの参照ができません。 対応方法があれば教えていただくようお願いします。 どうしても実現したいので、テーブルの設計が間違えているかもしれませんが写真を掲載します。 ■現在の状況と質問 A)商品だけで300アイテムあります。リストを見ながら商品名と金額を入力するのは、膨大な時間を奪われるので、発注書に書かれている。4ケタの商品番号と注文数量の入力のみに したい。その後に入力した4ケタの数字でデーターを集計し、分析業務につなげていきたい B)【C】と【D】は注文書のイメージです。ひとり最大50個の商品を一枚の注文書で 発注します(ひとりの注文が1か月に1~3回)。一回の注文で最大、50品目のデーターを 格納することは、アクセスで可能なのでしょうか? C)発注実績の抽出ですが、以下内容で実行したいです。どうすれば可能でしょうか?   テーブルの設計と関連付け、リレーションの設定がわかりません。   i)個人別の1か月注文実績。商品名、注文合計数、合計金額を商品別に表示   ii)個人別の注文合計金額(月、年間)の集計。   iii)商品Aの注文実績(月、年間) D)リレーションの状態。 【A】の(2)と【C】の(2)  【B】の(2)と【D】の(3)、(5)、(7)、(9)、(11)、(13)、(15)、(17)、(19)・・・ 【C】の(1)と【D】の(2)のみ参照整合性がとれています。 E)商品テーブルのドリルボタンを押して、下の階層を見ようとすると、画像のような メッセージがでます。これはなんなのでしょうか? ■現在の状況を列挙します。 【A】顧客テーブル (1)顧客ID(オートナンバー・・・長整数型) 主キー(2)発注コード(テキスト型)         ※発注コードは『英数字』のためテキスト型。リンク先も『テキスト型』 (3)氏名(テキスト型) 【B】商品テーブル (1)商品ID(オートナンバー・・・長整数型) 主キー(2)注文番号(数値型・・・倍精度浮動小数点型) (3)品名(テキスト型) (4)金額(通貨型) 【C】注文テーブル 主キー(1)注文ID(オートナンバー・・・長整数型)    (2)日付 (3)発注コード(テキスト型)        ※発注コードは『英数字』のためテキスト型。リンク元も『テキスト型』 【D】注文明細テーブル(注文番号は全て4ケタの数字です。重複Noはありません) 主キー(1)注文明細ID(オートナンバー型・・・長整数型) (2)注文ID(長整数型) (3)注文番号1(数値型・・・長整数型) (4)数量(注文番号1) (5)注文番号2 (6)数量(注文番号2) (7)注文番号3 (8)数量(注文番号3) (9)注文番号4 (10)数量(注文番号4) ・ ・ ・※注文番号50まで続く・・・

  • アクセスでの入力を簡単に行いたいです

    よろしくお願いします。 t商品番号というテーブルがあります。 フィールドは『注文番号』と『商品名』です。 今フォームを新たにつくり、テキストボックス『注文番号』と『商品名』を作りました。 注文番号を入れると商品番号が自動で入るように、テキストボックス商品名のコントロールソースに =DLookUp("商品名","t商品番号","注文番号=" & [注文番号]) と入れましたが、#Errorとでて、注文番号をいれても商品番号が自動で入力されません。 ご意見をよろしくお願いします。

  • Access2000での質問

    ログイン画面で、ID、パスワードを入力後btnログインクリックするとメインフォームを開き、メインフォームにあるtxtログイン者名というテキストボックスにログイン者名をだしたいのですがどうすればいいのですか? テーブル名:ユーザーマスタ フィールド名:ログインID、ユーザー名、パスワード フォーム名:ログイン、メインメニュー ものすごい初心者です!よろしくおねがいします!!

専門家に質問してみよう