(昨日同じ質問をあげましたがカテゴリが間違っていたのでこちらにあげなおしました)
メインフォーム「MAIN」にサブフォーム「REN」を埋め込んでいます。
【メインフォームMAIN】
テーブル名:JIK
ID:事件ID
【サブフォームREN】
テーブル名:REN
ID:連絡先ID(・事件ID)
ボタンをクリックすると、メインフォームで表示させているレコードを複製させたいです。
以下を参考に、そのとおり(のつもり)に作ってみたのですが
(メインフォーム「MAIN」に「txtCopy事件ID」という名前のテキストボックスも作成しました)
「コマンドまたはアクション”追加貼り付け”は無効です。」
とエラーメッセージが出てしまいます。
どのように修正すればよいでしょうか?
http://www.accessclub.jp/bbs3/0103/superbeg36719 …
ちなみに追加クエリだけを実行すると
表示させているメインフォーム「MAIN」のレコードに、
サブフォーム「REN」のレコードが追加され、
サブフォーム「REN」のレコードが2倍になりました。
以下追加クエリとコードです。
【追加クエリ】
INSERT INTO REN ( 事件ID, 氏名, フリガナ, ・・・ )
SELECT [Forms]![MAIN]![事件ID] AS 式1, REN.氏名, REN.[フリガナ], REN.報告書, ・・・
FROM REN
WHERE (((REN.事件ID)=[Forms]![MAIN]![txtCopy事件ID]));
【VBA】
Private Sub 明細コピー_Click()
On Error GoTo Err_明細コピー_Click
Me!txtCopy事件ID = Me!事件ID
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append
Dim stDocName As String
DoCmd.SetWarnings False ' システムメッセージ非表示
stDocName = "追加クエリ"
DoCmd.OpenQuery stDocName, acNormal, acEdit
DoCmd.SetWarnings True ' システムメッセージ表示
' サブフォーム再クエリ
Me!REN.Requery
Exit_明細コピー_Click:
Exit Sub
Err_明細コピー_Click:
MsgBox Err.Description
Resume Exit_明細コピー_Click
End Sub
よろしくお願いいたします!
No.4ベストアンサー
- 回答日時:
メインフォーム側の方は解決しました様で良かったです。
サブフォーム側のキー違反に関してですが、リンク先のURLの内容によると
メインフォーム→見積明細フォーム
見積明細ID→オートナンバー型(主キー)
見積品名→テキスト型
・・・
サブフォーム→工程明細フォーム
工程明細ID→オートナンバー型(主キー)
見積明細ID→数値型
工程コード→テキスト型
・・・
とあります。これをそっくりそのまま質問者様の仕様に置き換えると
メインフォーム→MAIN
事件ID→オートナンバー型(主キー)
・・・
サブフォーム→REN
連絡先ID→オートナンバー型(主キー)
事件ID→数値型
・・・
となるかと思います(一つ前の回答にも同じような事を書きましたが)
考えられるキー違反の原因としては、サブフォーム側で「事件ID」が主キー設定されていませんか?
リンク先のURLのイメージですと、例えば
【メインフォーム】
1 A みかん
2 C りんご
3 D ぶどう
項目名は左からID1(オートナンバー)、コード、品名とします。主キーは「ID1」
【サブフォーム】
1 1 A みかん 愛媛
2 2 C りんご 青森
3 3 D ぶどう 山梨
項目名は左からID2(オートナンバー)、ID1(数値)、コード、品名、産地とします。主キーは「ID2」
というレコードが各フォームにあるとして、メインフォームで2のりんごの項目を表示させてボタンを押すと
【メインフォーム】
1 A みかん
2 C りんご
3 D ぶどう
4 C りんご
【サブフォーム】
1 1 A みかん 愛媛
2 2 C りんご 青森
3 3 D ぶどう 山梨
4 2 C りんご 青森
という感じの動作になるかと思うのですが(間違っていたらお恥ずかしい限りですが。。。^^;)
この時サブフォームの「ID1」(=事件ID)は同じ値が複製されるので、主キーが設定されているとキー違反になってしまうかと思われます。
もしサブフォーム側の「事件ID」に主キーが設定されていたら、そちらは主キーを外して「連絡先ID」の方に主キー設定して下さい。
(勿論、メインフォーム側の「事件ID」は主キーでOKです)
他の原因だったらすみませんm(_ _)m
またまたありがとうございます!
サブフォームの主キーは連絡先IDです。
主キーに関するお話を色々いただいたので、ふと気づいて確認したところ
サブフォームに連絡先IDフィールドを表示させていなかったことに気付き
追加してしばらく色々触っていたら
(クエリを加工してみたり元に戻してみたり・・・)
なぜか正常に動きました!
何週間も悩んでやっと出来上がって、本当にうれしいです!
主キーに注目する点を教えていただけなかったら
絶対に完成できませんでした。
大変感謝しています!
長々とお付き合いいただきまことにありがとうございました!
No.3
- 回答日時:
補足有り難うございます。
また勘違いしていたようですみません。
貼っていただいた参照先のリンクが私のPCでは最初開けず読むことができなかったので
てっきりIDもそのまま複製したいものであると思っていました^^;
今回は無事開くことができました。
リンク先読ませていただきましたが、
リンク先の「見積明細ID」→質問者様の仰る「事件ID」(メイン・サブフォーム)
リンク先の「工程明細ID」→質問者様の仰る「連絡先ID」(サブフォーム)
・・・という認識でよろしいでしょうか?(また違っていたらすみません)
それでよろしいのであれば
テーブル「JIK」 「事件ID」→オートナンバー型(主キー)
テーブル「REN」 「連絡先ID」→オートナンバー型(主キー)/「事件ID」→数値型
また当方環境下あるいは細かい設定の違いの問題かもしれませんが、
そのままではサブフォームの「事件ID」が上手く複製されなかったので
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append
の3行を、「サブフォーム再クエリ」の記述の前に移動したら上手く複製できました。
それでも動かないようであれば補足願いますm(_ _)m
何度もありがとうございます!
>リンク先の「見積明細ID」→質問者様の仰る「事件ID」(メイン・サブフォーム)
>リンク先の「工程明細ID」→質問者様の仰る「連絡先ID」(サブフォーム)
まさに上記のとおりです!
いただいた方法試してみました。
メインフォームのレコードの複製の構文を
サブフォームコントロールの再クエリの前にもってきてみました。
Private Sub 明細コピー_Click()
On Error GoTo Err_明細コピー_Click
Me!txtCopy事件ID = Me!事件ID
Dim stDocName As String
DoCmd.SetWarnings False ' システムメッセージ非表示
stDocName = "追加クエリ"
DoCmd.OpenQuery stDocName, acNormal, acEdit
DoCmd.SetWarnings True ' システムメッセージ表示
' メインフォームレコードの複製
DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択
DoCmd.RunCommand acCmdCopy '選択レコードのコピー
DoCmd.GoToRecord , , acNewRec '新規レコードに移動
DoEvents ' (必要に応じて)
DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け
' サブフォーム再クエリ
Me!SREN.Requery
Exit_明細コピー_Click:
Exit Sub
Err_明細コピー_Click:
MsgBox Err.Description
Resume Exit_明細コピー_Click
End Sub
教えていただいたやり方はこんなふうでよかったでしょうか?
なお、メインフォームレコードの複製のコードが
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append
から
DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択
DoCmd.RunCommand acCmdCopy '選択レコードのコピー
DoCmd.GoToRecord , , acNewRec '新規レコードに移動
DoEvents ' (必要に応じて)
DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け
に変更になっているのは、
この時点でのエラーを修正するためです。
こうしたおかげで「コマンドまたはアクション”追加貼り付け”は無効です。」
とはでなくなったのですが、
サブフォームのレコードはやはりコピーできませんでした。
追加クエリだけ実行してみようとすると
「○件のレコードでキー違反」
と出てしまいました・・・。
また何かお気づきの点ありましたら教えてください!
よろしくお願いいたします!
No.2
- 回答日時:
質問の意味を一部理解しきれていなかったようで申し訳ありません。
つまりは例えばメインフォームに「1 みかん」と表示されていたら
ボタンをクリックの際にメインフォームで「1 みかん」のレコードをメインフォーム内で複製、
同時にサブフォームでIDが1のレコードをサブフォーム内で複製・・・のような感じでよろしいですか?
「コマンドまたはアクション”追加貼り付け”は無効です。」のエラーメッセージの件は
とりあえず主キー設定無しでこちらでも試してみたところ、再現できず普通に動作したのですが
この件に関してはもう大丈夫でしょうか?
主キーに関してですが
同一テーブル内では重複はできないので、レコード全体をそっくり複製するのは難しいと思います。
代替案としては、別に主キー(事件ID)と詳細フィールド(氏名、フリガナ・・・)を設定したテーブルを用意して
MAIN、RENテーブルはそれぞれフィールドをIDのみにし(こちらは主キーは外して下さい)
クエリで結合させてそれぞれメイン、サブフォームに表示させる、とかでは如何でしょうか。。。
見当違いな回答でしたらすみませんm(_ _)m
こちらこそ説明が下手で申し訳ありません。
またご回答いただきありがとうございます!
>メインフォームに「1 みかん」と表示されていたら
>ボタンをクリックの際にメインフォームで「1 みかん」のレコードをメインフォーム内で複製、
>同時にサブフォームでIDが1のレコードをサブフォーム内で複製
目指すものは上記のとおりです!
主キー(事件ID)だけは複製せず新しい番号を自動でふって、
それ以外は複製、ということはできないでしょうか・・・?
私が参考にしたサイトでは、
(http://www.accessclub.jp/bbs3/0103/superbeg36719 …)
IDが重複しないように構造上工夫されているようなのですが
そっくりそのまま作ったつもりなのに先述したエラーが出てしまいうまくいきません。
下記参考サイトの抜粋です。
>ちなみに、今回のようにメインフォームのID番号フィールドがオートナンバー型の場合、
>新規レコードのID番号フィールドが何番になるか予測することは難しい(というか無理?)
>です。なぜかというと、途中でレコードの削除をしたとき、あるいは何らかの理由で
>レコードが正常に保存されなかったときなど、簡単に欠番になってしまいますので。
>そのため、ちょっとした工夫が要ります。
>今回考えた方法としてはコピー対象レコードの[見積明細ID]の値を一時的に格納する
>ためのテキストボックスを作り、追加クエリの中で条件としてそれを参照させることに
>しました。
あまりテーブルを増やしたりすることは上司がいやがるもので・・・
申し訳ありませんが、お時間ありましたらまた教えてください!
お願いいたします!
No.1
- 回答日時:
単に表示されているレコードを別テーブルに追加するだけでしたら以下のコードのみで可能です。
Private Sub 明細コピー_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "REN", cn, adOpenKeyset, adLockOptimistic
rs.AddNew
rs!連絡先ID = Me.事件ID
rs!氏名 = Me.氏名
rs!フリガナ = Me.フリガナ
'(・・・以下必要に応じて項目を増やして下さい)
rs.Update
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Me!REN.Requery
End Sub
もし「ユーザー定義型は~」のようなエラーが出た場合は、「ADO 参照設定」等のキーワードで検索してVBEの設定を変更して下さい。
この回答への補足
たびたびすみません。
文字化けについては、フィールドのパラメータを指定することで解決できました。
(「事件ID」のパラメータを「整数型」にしました)
しかし次は、
追加クエリですべてのレコードを追加できません
×件のレコードでキー違反
となってしまいました。
「事件ID」を主キーに設定してしまっているせいなのかなと思いますが
「事件ID」を主キーにしないわけにはいきません。
どのように対処したらいいでしょうか?
引き続きよろしくお願いいたします!
別テーブルではなく、
メインフォーム、サブフォームそれぞれ同じテーブルに複製したいです!
質問に挙げた方法でやってみたところ、
今日はサブフォームのレコードが追加されません。
追加クエリを見てみると、
「Forms]![MAIN]![事件ID] AS 式1」
が文字化けしてしまっていました。
引き続きよろしくお願いいたします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) accessでのフォームの連携について 2 2022/06/14 00:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
ACCESSのサブフォームコピーについて
その他(Microsoft Office)
-
Accessでレコードの複製
Access(アクセス)
-
-
4
MS.Access でサブフォーム付のフォームのレコードの複数コピーについて
Access(アクセス)
-
5
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
6
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
7
このオブジェクトに値を代入することはできません
その他(データベース)
-
8
Accessでレコードの複製
Access(アクセス)
-
9
Accessエラー 複雑すぎるために評価できません
Excel(エクセル)
-
10
Access レコードを追加できません。テーブル’○○’の結合キーがレコードセットにありません。
Access(アクセス)
-
11
Accessフォームが入力できません。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access2000 サブフォームのReco...
-
Access VBA サブフォームの更新
-
Access VBA acCmdSelectRec...
-
メインフォームとサブフォーム...
-
初心者です。accessで請求書を...
-
サブフォームのデータを保存す...
-
サブフォームが見えなくなる。
-
Accessのサブフォーム内で連続...
-
(ACCESS)条件に応じて、テキ...
-
Accessでサブフォームの中の並...
-
Access2000、これはいったい・...
-
Access 複数フォームを...
-
Accessのサブフォームから値を...
-
Accessでレコードの複製
-
ACCESSフォーム入力後の確定
-
ACCESS2007 マクロ クエリのパ...
-
スクロールバーをVBAで操作したい
-
クエリーの結果をフォームに表...
-
PDFファイル/抽出許可され...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access2000、これはいったい・...
-
(ACCESS)条件に応じて、テキ...
-
Access 複数フォームを...
-
access サブフォームにリストを...
-
ACCSESS2013VBA フォームのレコ...
-
Accessで、一覧からクリックし...
-
googleフォームでインストール...
-
サブフォームが見えなくなる。
-
Access2000 サブフォームのReco...
-
Accessで、サブフォームのある...
-
Accessのサブフォームから値を...
-
アクセスでサブフォームのレコ...
-
サブフォームのデータを保存す...
-
Accessでのフォーム表示がうま...
-
サブフォームでのダブルクリッ...
-
2回目に画面のレコードセットの...
-
AccessのFormのみをスクリーン...
-
アクセスで サブフォームの表...
-
ACCESSでfilterとorderbyについて
おすすめ情報