- ベストアンサー
アクセス97
データ入力フォームからデータ検索をして同フォームに表示させる。一部書き換えた後 新しいレコードとして登録したいのですがどうしても同じレコードが書き換わってしまいます 助けてください。 具体例: 登録フォーム”A”に入力項目がID(主キー、オートナンバー)会員番号、名前、購入品、 購入日時等があります。”A”フォームから会員番号で名前を抽出して他の項目内容を 新たに入力し、追加レコードとして登録したい。 ”A”フォームにデータ抽出は出来るのですがレコード内容の書き換えになってしまいます。 回答よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>早速、具体的に要求することにしました。 >方法Bがすごく知りたい情報です。マクロをトライしたのですが出来ませんでし。 >すみませんが、方法で書いていただいたように詳しくお願いします。 ■方法B■ ●マクロでの記述方法を記載します。 1.レコードを選択 [アクション]に"コマンドの実行"[コマンド]に"レコードの選択" 2.レコードのコピー [アクション]に"コマンドの実行"[コマンド]に"コピー" 3.レコードを貼り付ける [アクション]に"コマンドの実行"[コマンド]に"追加貼り付け" 全て"コマンドの実行"アクションを使用します。 >[テーブル]・[フォーム]の設定によっては、貼り付けできないことがあます。 主キーやインデックスの問題がありますので追加貼り付けした時にエラーが 出た場合確認してください。 ・主キーは多分オートナンバーなので大丈夫でしょう。 ・インデックス(重複なし)→インデックス(重複あり)に変更する。 ※複数のレコードをコピーしたい場合は、この方法はやめて追加クエリを 使用した方がいいと思います。
その他の回答 (5)
- koutaka
- ベストアンサー率47% (18/38)
>条件:(1)[フィールド名]Is Null アクション:メッセージ、マクロ中止 > (2)[フィールド名]<>False アクション:メッセージ、マクロ中止 > (3)[フィールド名]=True アクション:コマンドの実行×3 >これだと検索は出来るのですが(2)メッセージも表示されてしまいます。 >是非、この回避策も伝授してください。 [フィールド名]というコントロールが良く分かりませんが、 新しく"Yes/No型"のレコードソースのない[フィールド名]を 作成したと考えていいのでしょうか? それなら、いい考えだと思います。 ■(2)、(3)の条件ですが、 ”[フィールド名]<>False”は”[フィールド名]=False”ではないですか? ”[フィールド名]=True”と”[フィールド名]<>False”の結果は、同じになりますよ。 あと、PCが遅くレコードのフィールド数が多ければ、No.3 tamson さんの回答にも あるように元のテーブルを分けたらどうでしょう?
お礼
良く見なおした結果、何とか壁を超えることが出来ました。本当に有難うございました。
- imo
- ベストアンサー率35% (28/78)
もう、解決した頃でしょうか? koutakaさんのマクロで十分なのですが ウィザードの指示どおりにやっていくとできてしまいますので その方法を記しておきます。 1.利用したいフォームをデザインで開く。 2.ツールボックスのコントロールウィザードを押下されている状態で コマンドボタンを選択し、フォーム上の任意の場所に配置する。 3.コマンドボタンウィザードが開く。 種類:レコードの操作 ボタンの動作:レコードの複製 を選択 4.ボタンのデザインと名前を決めて完了。 ちなみに 私は個数だけ違うデータをいくつも入力しなければならない 伝票処理などにこのボタンを利用しています。 参考書籍は段階によるのでしょうが 右も左もわからないなら できるシリーズなど、 辞書代わりの ナツメ社の関数ハンドブック、 疑問個所で F1キー を押してヘルプ、使用例を見る。 ことで何とかなっております。
お礼
遅くなりすみません。本当にいろんな方法がありますね。imoさんはクエリー、マクロ、vb、どれが使いやすいですか?痒い所に手をつけるなら全部浅くでも知らないとダメですよね?参考書もいろいろ買ってみたのですが情けないことに同じようなのばかり揃ってしまいました。 まだ、解決していないことが山ほどあるのですが今回の質問ほど緊急性がないのでがんばって解いていきます。壁にぶつかったときはまた宜しくお願いします。
元のテーブルを分けたらどうでしょう? 例) (1)会員データ(個人情報) (2)購入品データ(購入品の名前や単価) (3)履歴データ(購入日等) メインフォームへ(1)、サブフォームへ(2)と(3)のクエリーのフォームを作成します。 メインフォームで検索後、サブフォーム側(購入日等)へ入力すれば追加入力出来ます。 *メインとサブのリンクフィールドは会員番号 上記のようにテーブルを複数用意することで、データの集計も楽になると思いますよ。
お礼
回答有難うございます。 実はこの方法試したのですがクエリーが良くなかったせいか、検索が出来なくなってしまったことがあり苦手意識をもってしまいました。おそらくそんなに複雑なことではないのでしょうが素人には理解が困難でした。 でも、アクセスを使ってクエリーが分からないのは意味ないので今後努力しようと思います。
- imo
- ベストアンサー率35% (28/78)
先にデータ検索をして得たレコードを新しいレコードに貼り付ける 操作をしてからデータの変更をしてください。 コマンドボタンのビルドのなかに レコードの複製 があるはずです。
補足
そうなんです、これなんです。自分のやりたいことがこれなんですが、レコードの複製というのが分からないんです。ど素人なので具体的の教えてもらえませんか? あと、経験者が薦める参考書などもあったら教えてください。
- koutaka
- ベストアンサー率47% (18/38)
>データ入力フォームからデータ検索をして同フォームに表示させる。 >一部書き換えた後新しいレコードとして登録したいのですがどうしても >同じレコードが書き換わってしまいます助けてください。 データを検索して同フォームに表示させて、レコードの内容を修正すると 当然同じレコードが更新されます。 そこで、検索時に[レコードを[コピー]して、レコードを修正方法があります。 ■方法A■ [追加クエリ]で追加後、修正する方法 1.検索フォームで選択したレコードを[追加クエリ]で[レコード]を追加します。 2.[フォーム]を開く時に、[レコードの移動]で"最後のレコード"にします。 3.その時点で選択したレコードが2つになりますので、"最後のレコード"を修正すればいいでしょう。 ※レコードが複数ある場合は、この方法やめておいた方がいいでしょう。 ※フォームの設定によっては、最後のレコードではうまく行かない場合があります。 ■方法B■ [フォーム]で[レコード]を[コピー]して[貼り付け]し修正する。 1.[フォーム]を開いて、対象のレコードが選択されているとき、[編集]-[レコードの選択]をします。 2.[編集]-[コピー]します。 3.新しいレコードに移動し、[編集]-[貼り付け]します。 ※[マクロ]や[イベントプロシージャ]で[コマンドボタン]等を作成すると楽でしょう。 ※但し、[テーブル]・[フォーム]の設定によっては、貼り付けできないことがあります。 ▲具体的な方法がわからなければ、要求してください。
補足
早速、具体的に要求することにしました。 方法Bがすごく知りたい情報です。マクロをトライしたのですが出来ませんでした。 すみませんが、方法で書いていただいたように詳しくお願いします。 自分も早く”こういう場合には出来ない可能性がある”と言えるぐらい理解したい。
補足
レコードのコピー、解決しました。(遅くなり済みません) 関連でもう一つ教えてください。pcが古いので動きが遅く、レコードコーピーボタンを何度もクリックしてしまいます。 当然レコードも増えてしまうのでマクロに条件をつけました。 条件:(1)[フィールド名]Is Null アクション:メッセージ、マクロ中止 (2)[フィールド名]<>False アクション:メッセージ、マクロ中止 (3)[フィールド名]=True アクション:コマンドの実行×3 これだと検索は出来るのですが(2)メッセージも表示されてしまいます。 是非、この回避策も伝授してください。