🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

7794閲覧

Access表形式(非連結)のサブフォームに新規行追加

programer

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/11/25 06:21

現在、Accessでサブフォームの画面を作成しています。

そこでORACLEDBから取得したレコードを表形式のサブフォームに表示させたいと考えています。
DBから取得したレコード分だけサブフォームの表に行を新規追加してそこに取得したレコードを設定していこうと思っているのですが、行を追加するところでやり方がわからず困っています。
ここで使用しているフォームはテーブルとはリンクしていない非連結のフォームです。
必要な時以外でのDBへのアクセスをなくしたいため、非連結で作成しています。

今のコードの抜粋はこんな感じです。

strSQL = "SELECT COL1" strSQL = strSQL & " , COL2" strSQL = strSQL & " , COL3" strSQL = strSQL & " , COL4" strSQL = strSQL & " , COL5" strSQL = strSQL & " , COL6" strSQL = strSQL & " , COL7" strSQL = strSQL & " FROM TABLE" Set qry = db.CreateQueryDef("", strSQL) Set rs = qry.OpenRecordset '最終行まで移動 rs.MoveLast '検索結果が存在する場合 If rs.RecordCount >= 1 Then For i = 1 To rs.RecordCount '2レコード目以降は行を追加してからデータセット If i > 1 Then With Me.サブフォーム.Form .AllowAdditions = True With .Recordset .AddNew ←ここでエラーとなります。 .Update End With End With End If Next Me.F_CHUMONDATAMENTE_MEISAI.Form.AllowAdditions = False End If

わかる方いらっしゃいましたら教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

非連結のフォームでは1件のデータしか表示できません。

作業用テーブルと連結させてください。

投稿2020/11/25 07:03

hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programer

2020/11/25 07:06

早々のご回答ありがとうございます。 非連結のフォームでは行の追加は不可能ということですか。 ワークテーブルを使用するやり方で進めてみます。
programer

2020/11/25 07:39

度々申し訳ございません。 ワークテーブルと連結させた場合、入力時に自動で更新処理が走ってしまうと思うのですが、入力だけしてコマンドボタンクリックした場合のみサブフォームに入力した値をワークテーブルに反映させるということは可能なのでしょうか?
hatena19

2020/11/25 09:53

ワークテーブルなので、元のテーブルとは切り離されてますので、反映されても問題ないと思いますが。 コマンドボタンで元テーブルに反映させるようにすればいいかと。 それとも、下記のようなことでしょうか。 レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにする - hatena chips https://hatenachips.blog.fc2.com/blog-entry-162.html
programer

2020/11/26 03:37

たしかによく考えればそうでした。 ワークテーブルにNULLや空を許可しない設定がしてあったため、空にしてセルを移動しただけでエラーが出るのは使いづらいと思っていましたが、テーブルの設定を変更することで解決できました。 ありがとうございました。
guest

0

フォームをデータベースのテーブルと連結するのは止めた方が良いので賛同しますが、ローカルのテーブルを作成し、そのテーブルと連結させると、そのワークテーブルに追加削除することで、連結フォームの恩恵を受ける事が出来ます。

投稿2020/11/25 07:00

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programer

2020/11/25 07:05

早々のご回答ありがとうございます。 ローカルテーブルの使用を検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問