(昨日同じ質問をあげましたがカテゴリが間違っていたのでこちらにあげなおしました)
メインフォーム「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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Accessでレコードの複製
Access(アクセス)
-
MS.Access でサブフォーム付のフォームのレコードの複数コピーについて
Access(アクセス)
-
access2000:フォームで入力した内容を新規レコードにコピー
その他(データベース)
-
-
4
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
5
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
6
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
7
Access2000 サブフォームのRecordSet取得法
Access(アクセス)
-
8
このオブジェクトに値を代入することはできません
その他(データベース)
-
9
ACCESSのサブフォームコピーについて
その他(Microsoft Office)
-
10
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
11
Accessでレコードの複製
Access(アクセス)
-
12
Access レコードを追加できません。テーブル’○○’の結合キーがレコードセットにありません。
Access(アクセス)
-
13
Accessフォームが入力できません。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access2000、これはいったい・...
-
Accessのサブフォームから値を...
-
ACCSESS2013VBA フォームのレコ...
-
アクセスでサブフォームのレコ...
-
Access2000 サブフォームのReco...
-
Accessで、一覧からクリックし...
-
サブフォームが見えなくなる。
-
ACCESSでサブフォームの...
-
Access 複数フォームを...
-
AccessのFormのみをスクリーン...
-
ACCESSでfilterとorderbyについて
-
access サブフォームにリストを...
-
[Access2000] フォーム間で値の...
-
(ACCESS)条件に応じて、テキ...
-
サブフォームでフィルタしたデ...
-
AccessのDoCmd.ApplyFilterの使...
-
サブフォームでのダブルクリッ...
-
単票フォームと帳票フォームを...
-
2回目に画面のレコードセットの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access2000、これはいったい・...
-
(ACCESS)条件に応じて、テキ...
-
Access 複数フォームを...
-
access サブフォームにリストを...
-
ACCSESS2013VBA フォームのレコ...
-
Accessで、一覧からクリックし...
-
googleフォームでインストール...
-
サブフォームが見えなくなる。
-
Access2000 サブフォームのReco...
-
Accessで、サブフォームのある...
-
Accessのサブフォームから値を...
-
アクセスでサブフォームのレコ...
-
サブフォームのデータを保存す...
-
Accessでのフォーム表示がうま...
-
サブフォームでのダブルクリッ...
-
2回目に画面のレコードセットの...
-
AccessのFormのみをスクリーン...
-
アクセスで サブフォームの表...
-
ACCESSでfilterとorderbyについて
おすすめ情報