• ベストアンサー

アクセス97

データ入力フォームからデータ検索をして同フォームに表示させる。一部書き換えた後 新しいレコードとして登録したいのですがどうしても同じレコードが書き換わってしまいます 助けてください。 具体例: 登録フォーム”A”に入力項目がID(主キー、オートナンバー)会員番号、名前、購入品、 購入日時等があります。”A”フォームから会員番号で名前を抽出して他の項目内容を 新たに入力し、追加レコードとして登録したい。 ”A”フォームにデータ抽出は出来るのですがレコード内容の書き換えになってしまいます。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • koutaka
  • ベストアンサー率47% (18/38)
回答No.4

>早速、具体的に要求することにしました。 >方法Bがすごく知りたい情報です。マクロをトライしたのですが出来ませんでし。 >すみませんが、方法で書いていただいたように詳しくお願いします。 ■方法B■ ●マクロでの記述方法を記載します。 1.レコードを選択 [アクション]に"コマンドの実行"[コマンド]に"レコードの選択" 2.レコードのコピー [アクション]に"コマンドの実行"[コマンド]に"コピー" 3.レコードを貼り付ける [アクション]に"コマンドの実行"[コマンド]に"追加貼り付け" 全て"コマンドの実行"アクションを使用します。 >[テーブル]・[フォーム]の設定によっては、貼り付けできないことがあます。 主キーやインデックスの問題がありますので追加貼り付けした時にエラーが 出た場合確認してください。 ・主キーは多分オートナンバーなので大丈夫でしょう。 ・インデックス(重複なし)→インデックス(重複あり)に変更する。 ※複数のレコードをコピーしたい場合は、この方法はやめて追加クエリを 使用した方がいいと思います。

boss39
質問者

補足

レコードのコピー、解決しました。(遅くなり済みません) 関連でもう一つ教えてください。pcが古いので動きが遅く、レコードコーピーボタンを何度もクリックしてしまいます。 当然レコードも増えてしまうのでマクロに条件をつけました。 条件:(1)[フィールド名]Is Null アクション:メッセージ、マクロ中止    (2)[フィールド名]<>False アクション:メッセージ、マクロ中止    (3)[フィールド名]=True  アクション:コマンドの実行×3 これだと検索は出来るのですが(2)メッセージも表示されてしまいます。 是非、この回避策も伝授してください。

その他の回答 (5)

  • koutaka
  • ベストアンサー率47% (18/38)
回答No.6

>条件:(1)[フィールド名]Is Null アクション:メッセージ、マクロ中止 >   (2)[フィールド名]<>False アクション:メッセージ、マクロ中止 >   (3)[フィールド名]=True  アクション:コマンドの実行×3 >これだと検索は出来るのですが(2)メッセージも表示されてしまいます。 >是非、この回避策も伝授してください。 [フィールド名]というコントロールが良く分かりませんが、 新しく"Yes/No型"のレコードソースのない[フィールド名]を 作成したと考えていいのでしょうか? それなら、いい考えだと思います。 ■(2)、(3)の条件ですが、 ”[フィールド名]<>False”は”[フィールド名]=False”ではないですか? ”[フィールド名]=True”と”[フィールド名]<>False”の結果は、同じになりますよ。 あと、PCが遅くレコードのフィールド数が多ければ、No.3 tamson さんの回答にも あるように元のテーブルを分けたらどうでしょう?

boss39
質問者

お礼

良く見なおした結果、何とか壁を超えることが出来ました。本当に有難うございました。

  • imo
  • ベストアンサー率35% (28/78)
回答No.5

もう、解決した頃でしょうか? koutakaさんのマクロで十分なのですが ウィザードの指示どおりにやっていくとできてしまいますので その方法を記しておきます。 1.利用したいフォームをデザインで開く。 2.ツールボックスのコントロールウィザードを押下されている状態で  コマンドボタンを選択し、フォーム上の任意の場所に配置する。 3.コマンドボタンウィザードが開く。  種類:レコードの操作  ボタンの動作:レコードの複製 を選択 4.ボタンのデザインと名前を決めて完了。 ちなみに 私は個数だけ違うデータをいくつも入力しなければならない 伝票処理などにこのボタンを利用しています。 参考書籍は段階によるのでしょうが 右も左もわからないなら できるシリーズなど、 辞書代わりの ナツメ社の関数ハンドブック、 疑問個所で F1キー を押してヘルプ、使用例を見る。 ことで何とかなっております。

boss39
質問者

お礼

遅くなりすみません。本当にいろんな方法がありますね。imoさんはクエリー、マクロ、vb、どれが使いやすいですか?痒い所に手をつけるなら全部浅くでも知らないとダメですよね?参考書もいろいろ買ってみたのですが情けないことに同じようなのばかり揃ってしまいました。 まだ、解決していないことが山ほどあるのですが今回の質問ほど緊急性がないのでがんばって解いていきます。壁にぶつかったときはまた宜しくお願いします。

noname#832
noname#832
回答No.3

元のテーブルを分けたらどうでしょう? 例) (1)会員データ(個人情報) (2)購入品データ(購入品の名前や単価) (3)履歴データ(購入日等) メインフォームへ(1)、サブフォームへ(2)と(3)のクエリーのフォームを作成します。 メインフォームで検索後、サブフォーム側(購入日等)へ入力すれば追加入力出来ます。 *メインとサブのリンクフィールドは会員番号 上記のようにテーブルを複数用意することで、データの集計も楽になると思いますよ。

boss39
質問者

お礼

回答有難うございます。 実はこの方法試したのですがクエリーが良くなかったせいか、検索が出来なくなってしまったことがあり苦手意識をもってしまいました。おそらくそんなに複雑なことではないのでしょうが素人には理解が困難でした。 でも、アクセスを使ってクエリーが分からないのは意味ないので今後努力しようと思います。

  • imo
  • ベストアンサー率35% (28/78)
回答No.2

先にデータ検索をして得たレコードを新しいレコードに貼り付ける 操作をしてからデータの変更をしてください。 コマンドボタンのビルドのなかに レコードの複製 があるはずです。

boss39
質問者

補足

そうなんです、これなんです。自分のやりたいことがこれなんですが、レコードの複製というのが分からないんです。ど素人なので具体的の教えてもらえませんか? あと、経験者が薦める参考書などもあったら教えてください。

  • koutaka
  • ベストアンサー率47% (18/38)
回答No.1

>データ入力フォームからデータ検索をして同フォームに表示させる。 >一部書き換えた後新しいレコードとして登録したいのですがどうしても >同じレコードが書き換わってしまいます助けてください。 データを検索して同フォームに表示させて、レコードの内容を修正すると 当然同じレコードが更新されます。 そこで、検索時に[レコードを[コピー]して、レコードを修正方法があります。 ■方法A■ [追加クエリ]で追加後、修正する方法 1.検索フォームで選択したレコードを[追加クエリ]で[レコード]を追加します。 2.[フォーム]を開く時に、[レコードの移動]で"最後のレコード"にします。 3.その時点で選択したレコードが2つになりますので、"最後のレコード"を修正すればいいでしょう。 ※レコードが複数ある場合は、この方法やめておいた方がいいでしょう。 ※フォームの設定によっては、最後のレコードではうまく行かない場合があります。 ■方法B■ [フォーム]で[レコード]を[コピー]して[貼り付け]し修正する。 1.[フォーム]を開いて、対象のレコードが選択されているとき、[編集]-[レコードの選択]をします。 2.[編集]-[コピー]します。 3.新しいレコードに移動し、[編集]-[貼り付け]します。 ※[マクロ]や[イベントプロシージャ]で[コマンドボタン]等を作成すると楽でしょう。 ※但し、[テーブル]・[フォーム]の設定によっては、貼り付けできないことがあります。 ▲具体的な方法がわからなければ、要求してください。

boss39
質問者

補足

早速、具体的に要求することにしました。 方法Bがすごく知りたい情報です。マクロをトライしたのですが出来ませんでした。 すみませんが、方法で書いていただいたように詳しくお願いします。 自分も早く”こういう場合には出来ない可能性がある”と言えるぐらい理解したい。

関連するQ&A

  • Microsoft Access 2000

    2つのフォームで一方の値をもう一方のフォームに代入したいのです。 方法はコマンドボタンを押すことによって、AフォームからBフォームに2項目同時に同じレコードに代入したい。コマンドボタンに“値の代入マクロ”を設定します。 Aフォーム 代入したい項目のデータ型=2つともオートナンバー型(AN項目,AG項目)   レイアウト=2つともリストBOX(1列目がAN項目,AG項目) Bフォーム 代入されたい項目のデータ型=2つとも長整数型(BN項目,BG項目)   レイアウト=2つともテキストBOX 現状はAフォームの2つの項目のどちらか1つしか代入できません。 Aフォームの代入したい項目は新レコードではなく、既にデータが入力されているレコードのIDをBフォームの新レコードに代入したいのです。 コマンドボタンを押すとエラーは表示されず、フォームは正常に閉じます。しかし、テーブルを見るとどちらか一方のレコードにはデータが入力されていないのです。 代入されたいBフォームは、常に新レコードで主キーは設定していません。Bフォームに代入されるAN項目・AG項目の値は、その他のレコードの値と重複しています。 いきずまって困っているので、みなさんの力をお借りできたらと思って書き込みました。イメージが湧きにくいとは思いますが、よろしくお願いします。

  • Accessの初心者です。Access2007を使用しています。

    Accessの初心者です。Access2007を使用しています。 非連結フォームで作成しています。 下記のようなイメージです。 <親フォーム> 「会員番号」:主キー⇒フォーム上で直接入力して検索させて、会員名などフォームにVBAで表示させています。 <サブフォーム> 親フォームで入力した「会員番号」を元に、サブフォームの内容を抽出して表示させたいです。 非連結の親フォームと子フォームを連結させる、プロパティシートの設定すら よくわかっておりませんが、ご回答お願いします。

  • アクセス2000のレコードボタンの非表示

    AとBの名前のフォームがあります。 AにはCという入力欄があり、Cを入力しBのフォームを開くと BはCに関連づいたレコードが抽出されます。 この時、Bのフォームにレコードボタン(左下の▲)を 非表示もしくは、使用不可にしたいのですが どうしたらよいでしょうか? 理由として、Aのレコード一つに対してBは必ず一つのためで Bが複数あると困るからです。 宜しくお願い致します。

  • ACCESS2000でクエリで抽出したレコードをフォームに表示するには

    A顧客テーブルで作成したフォームからコマンドボタン(電話番号検索)押下時に 電話番号入力画面が出て入力した電話番号とマッチした顧客レコードをフォームに 表示させたいのですが上手く出来ません。 現在進めている方法では何がダメなんでしょうか(以下は考え方) A顧客テーブルから作成したフォムに電話番号コマンドを作成してコマンドを 押すとクエリの実行をさせる。クエリはA顧客テーブルのフィールドを全て選択して抽出条件に[電話番号入力]としている。 (結果) ・フォームを開くと先に電話番号入力が出てくる、先にフォームが開かない。 ・電話番号検索コマンドボタンを押すと抽出条件に合ったレコードはデーターシートビューに表示される。 よろしくお願いします

  • accessのnot検索

    access2000で テーブル[日付](yyyy/mm/ddで入力されています)   [内容](なんでも。空白の場合もあります) フォーム  「日付」(yyyy/mm/ddのみ入力可能にしています)  「NGword」(どんな文字でも入力できます) という項目を作成し・・・ 1、クエリでフォームの「日付」に入力したものかつ 2、フォームの「NGWord」を含まないレコードのみを抽出したいのですがうまくいきません。 「日付」「NGword」が空白の場合は入力された条件のみ適用させたいです。 (「日付」・「NGWord」が両方空の場合は全レコード抽出したいです) クエリを作成して・・・ [日付]の抽出条件を like "*" & forms![フォーム名]![日付] & "*" で [内容]の抽出条件を (not like "*" & forms![フォーム名]![NGword] & "*") or (is null) で設定したのですがうまくいきませんでした・・・泣 宜しくお願いします。

  • ACCESSのフォームの作り方について

    ACCESSのフォームについてお尋ねします。 『会員ナンバー』を主キーに設定しているテーブル(顧客データ。会員ナンバー・住所・氏名等のデータが入ってます)を元にACCESSで入力フォームを作っているのですが、会員ナンバーを入力したら住所・氏名のテキストボックスに自動的に入力されるにはどのようにしたらいいですか? 現在データが1番から自動的に表示されていて、例えば1番の人が表示されているときに会員ナンバーのテキストボックスに番号を入力すると、そのまま1番の人が上書きされてしまいます。 会員番号を検索して住所などのデータが出てくるイメージにしたいのですが。。。 本当はすでに入力されている住所等のデータはこのフォームでは上書きされないようにしたいのです。 ちなみにこのレポートは会員を新規追加するためではなくどんな修理をしたかという項目を追加させるため物です。

  • アクセスのフォームでデータ元をテーブルからクエリにかえたい

    上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。 アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。 そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作ります。このクエリを元にして、同じフォームでデータ入力したいのです。入力項目は全く同じです。「福岡県」をもっているレコードだけが全く同じフォームで表示されるようにしたいのです。 もとのテーブル名を「全データ」とし、クエリを「福岡県抽出クエリ」と呼ぶとすると、どこかで「全データ」を「福岡県抽出クエリ」に書き換えればすべてのテキストボックスのデータ元が入れ替わってくれると思うのですが、それでいいのでしょうか。その場合、どうやったらいいのでしょう。 なぜ一からファームを作り直さないかというと、テキストボックスの大きさや配置を決めるのに膨大な労力を費やしていて、全部をやり直したくないからです。 どうかお願いします。ご指導ください。

  • access2000:フォームで入力した内容を新規レコードにコピー

    初歩的な質問ですが困っています。表記の通りにAというテーブルへ入力フォームを使いデータ入力しています。そこでほぼ同じ内容の入力項目が数十件発生する時があります。そのために入力フォームで作成したデータをそのまま新規レコードへコピーしコピー後に手直ししようと考えています。がどうすればよいのか妙案がうかびません。ヒントでもいいので教えてください。

  • 【Access2000】レコードの抽出方法

     Access2000を使用してデータベースを作成していますが、抽出条件でつまずいています。  具体的には、  【1】選択クエリーAを基に作成したフォームA(単票形式でレコードを1件ずつ表示)があります。  【2】フォームAの中に単票形式でレポートを出力するマクロボタンが有。  【3】現在はマクロボタンを押すとパラメータで「データNo.?」と入力してもらう形になってレコードを1件抽出する形になっています。    ※画面上に表示されている「データNo.」フィールドの数値を入力してもらう形です。  質問についてですが、今のところはパラメータを入力してもらいレコードを抽出→レポートを出力していますが、パラメータを使わず、現在、フォーム上に表示されているレコード(表示されている1件)を抽出する方法はないかと壁にぶち当たっています。  言い換えれば、レポートを出力する際の元になるクエリの抽出条件で「現在、表示されているレコード」をどのように記述すればいいか、もし御存知の方がいらっしゃいましたら御教示お願いいたします。

  • ACCESS97 のモジュールの中 何番目かの データを取得したい

    ACCESS97 のモジュールの中で SQLを使用しています。 SQLを使用して あるテーブルの任意のレコードを選択したいのです。 例えば テーブルAが下記のようにあるとします。 項目 名前 番号 A 001 B 003 D 004 という場合に名前Bの番号003を取得したいのです。 データとしては、"2"番目の2 は取得可能です。  (フォーム上のテキストBOXで入力) Set DATABASE = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "**** = '" & **** & "' ;"     ↑ここに条件をどのように持てばいいのでしょうか? ※ ここで、名前の項目ではキーとなる項目は得られません。   今回は 何番目のデータを取得したい ということが可能かどうか    教えて頂きたいと思います。

専門家に質問してみよう