- ベストアンサー
access フォーム上で複数行のレコードを追加したい。
宜しくお願いします。 仕様環境:WinXP access2002 フォーム上にコマンドボタンで空白のレコードを 追加したいのですが、一行だけなら「値の代入」マクロで 追加できるのですが、複数行だとやり方がわかりません。 「追加クエリ」を作ってコマンドボタンにマクロで乗せてみたのですが、 テーブル上では複数の空白レコードが追加されてますが、 フォーム上には反映してくれません。 「値の代入」マクロを使って、複数行のレコードをフォーム上に追加するか、 「追加クエリ」を使って、複数行のレコードをフォーム上に反映させるか したいのですが教えてください。 ※ ちなみにこのフォームはサブフォームです。 また5行追加しようとしています。 この方法では無理でしたらご指導お願いします。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 > サブフォームにその機能をつけると空白行が表示されない まず念のための確認ですが、この「空白行が表示されない」 となった状態で一旦フォームを閉じてから再度開いた場合に、 サブフォームには空白行は表示されますか? メイン-サブの表示形式では、多くの場合、メイン-サブ間で、 あるフィールドが一致するものに絞り込むと思うのですが、 その絞り込みの結果、「空白行」が対象外になってしまって いたりしないか、確認してみてください。 (開き直しでも表示されないなら、空白行を追加するクエリで、 対応するフィールドへの値の代入が必要、ということ) その上で、開き直せば表示されるということだったとすると・・・ 通常は、コントロール名にサブフォームの名前を指定した 「再クエリ」でいけるのですが、「コマンドの実行」アクションの 「追加貼り付け」などと組み合わせると挙動がおかしくなった、 という経験があるので、そのとき採った対処法を踏襲してみます。 「再クエリ」の代わりに、以下のいずれか1パターンの対応を追加 してみてください。 【パターンa】サブフォームの『ソースオブジェクト』の更新 アクション : 値の代入 式 : [Forms]![フォーム1]![サブ1].[SourceObject] アイテム : [Forms]![フォーム1]![サブ1].[SourceObject] 【パターンb】サブフォームの『レコードソース』の更新 アクション : 値の代入 式 : [Forms]![フォーム1]![サブ1].[Form].[RecordSource] アイテム : [Forms]![フォーム1]![サブ1].[Form].[RecordSource] ※メインフォームが「フォーム1」、コントロールとしての サブフォームの名前が「サブ1」の場合。 (サブフォームとして使用しているフォームの名前とは 異なる場合があります(ウィザードを使用してサブフォーム を設置した場合は、通常では同一になりますが)) 注意: 式・アイテムの先頭では「Forms」と「s」が入りますが、 パターンbの中間では「Form」と「s」が入りません。 また、「!」と「.」も混在しているので注意して下さい。
その他の回答 (3)
- 30246kiku
- ベストアンサー率73% (370/504)
> まずテーブルにはコマンドボタンで追加クエリを実行するようにして > 複数行増やせるようになったのです。 申し訳ございません。 この時点で認識のずれが大きかったと思います。 私が示したやり方は、本質的なテーブルのレコードは増やしません。 入力されたものだけがテーブルに格納されていく方法です。 (やり方自体が正式なものかわかりません) ご質問者様が、今考えているものとは異なものになると思います。 ※ 空白行追加して、そこに有効なデータが埋め込まれなかったら?とか、 そのフォームを閉じる時、無効なレコードを消しまくる?とか ちょっとその辺が気になったもので。 ※※ ごめんなさい。 私のレベル超えちゃいましたので私の回答はスルーしてください。 ※※※ > 横レス失礼致します。(#2様) どんどん入れてください。 その方が私も安心です。
お礼
いえいえ、あなた様の方がはるかにレベル高いと思います。 私はVBAとか書けないもので・・(苦笑)。 こちらが伝えたいことを理解して頂きありがとうございます。 空白行をその後、どうするかも確かに考えていまして、 それは削除用のボタンを作ってあります。 (削除クエリでテーブル内の空白行を一括削除するボタンです。) フォームを閉じる時に空白行を削除するのも良い手ですね。 意識せずに無駄なものがなくなります。 今度、やってみます。 あなた様ぐらいのことができれば、動作を減らして、 もっとツールも便利になると思うのですが・・。 有難うございましたm(_ _)m
- DexMachina
- ベストアンサー率73% (1287/1744)
【回答要旨】 「再クエリ」アクションの実行前に、「コントロールの移動」アクションを 追加します。 【詳細】 横レス失礼致します。 > テーブル上では複数の空白レコードが追加されてます > 「再クエリ(おそらくRequery?)」というコマンドを入力したのですが、 > 表示されているレコードの先頭にカーソルがくるだけで、 > フォーム上に空白行を追加する(もどき操作)が出来ないのです。 レコードの追加ができているのでしたら、あとは再クエリの仕方だけの 問題かと思います。 文面からするとVBAではなくマクロ(マクロオブジェクト)を使用されて いるものと思います。 この場合、サブフォームを更新(再クエリ)するには、前処理が必要に なります。 現在のマクロに対して、「クエリを開く」アクション(→追加クエリの実行)と 「再クエリ」アクションの間に、以下のアクションを追加してみてください。 アクション : コントロールの移動 コントロール名 : (サブフォーム名) なお、このアクションにより、フォーカスがコマンドボタンからサブフォームに 移動しますので、必要であれば「再クエリ」の後にもう一度「コントロール の移動」アクションを追加してください(引数にはコマンドボタン名を指定)。 ※とりあえず、上記の内容だけなら大丈夫だと思いますが、サブ フォームへの移動~コマンドボタンにフォーカスを戻すまでに間に 行う処理の内容によっては、「コントロールが見つからない」旨の エラーが表示される場合があります。 (「コントロールの移動」アクションは、マクロの起動時ではなく、 アクションを行う瞬間にカーソルがあるフォーム内で、指定された コントロールを探すため、別のフォームなどに一旦フォーカスが 移動されていたりすると、指定したコントロールが見つからない、 ということになるため) 上記のようになった場合は、コマンドボタンへの「コントロールの移動」 の直前に、「オブジェクトの選択」アクションを追加して下さい。 (引数には、上から「フォーム」、「(フォーム名)」、「いいえ」を指定)
補足
回答ありがとうございます! 試してみましたが、駄目でした・・。 どのサイトや本を見ても再クエリでいけるらしいのですが、 なぜかいけないのです。 で、試しに”そもそも”のやり方が間違えてないか、 簡単なデータベースを作って、複数の空白行を追加(表示) する方法をやってみたのですが、 (フィールドは主キー(オートナンバー)と商品名と数量だけとか) まず、フォームが一つ(帳票型)だけなら 追加クエリと再クエリのマクロでいけました。 無事、フォーム上に複数の空白行が追加(表示)されました。 ※ ちなみに10行単位で追加しました。 しかしフォームを二つ、つまりメインフォーム(単票型)と サブフォーム(帳票型)にしてサブフォームにその機能を つけると空白行が表示されないのです。 ※ テーブルにはしっかり追加されていますが。 リレーションシップはしてもしなくても同じ結果でした。 ちなみに試した時のメインフォームは主キー(オートナンバー)と顧客名だけです。 まったくわかりません・・。
- 30246kiku
- ベストアンサー率73% (370/504)
ご提示された情報だけでは詳細な回答はできません。 (切羽詰まっているのでしょうか、似た質問を見かけました) (こちらの方がやり取りができるので、ここにて) 雰囲気だけでも。 表示しているテーブルのフィールド構成が以下だと仮定します。 テーブル:T_売上詳細 フィールド:売上番号、細番、商品名、数量、単価、金額 表示は、売上番号で絞り込みされ、細番順に表示されていたとします。 http://oshiete1.goo.ne.jp/qa4759213.html ここをベースとした変形として考えてみます。 社員選択用コンボボックス「cbx01」が、売上番号 T_月日が、細番用テーブル (フィールドは、細番号で1~必要分) 必要分は、DCountなり、DMAX("[細番]","T_売上詳細","[売上番号]=" & Me.cbx01)とか 空白行を追加する(もどき操作)は、細番用テーブルに細番号を必要分追加し、Me.Requery すれば可能かと。 フォーム上の表示では、細番号テーブルの細番号は非表示としておきます。 この方法での難点) 上から連続してデータを埋めていかないと、細番が連続しない。 もう少し、環境なり、構成なり詳しく書いてみてはいかがでしょう。 ※※ 今回実際に検証して書いているわけではないので、かも、というレベルです。 ※※ という私は回答できないレベルなのかも ※※ その時にはごめんなさい。
補足
回答ありがとうございます! すごい検討違いなことをいっていたら申し訳ないのですが、 まずテーブルにはコマンドボタンで追加クエリを実行するようにして 複数行増やせるようになったのです。 その後の >空白行を追加する(もどき操作)は、細番用テーブルに細番号を必要分追加し、 Me.Requery すれば可能かと。 これがたぶん自分の中でわからないのです。 その「追加クエリを実行するコマンドボタン」でクエリを実行した後に 「再クエリ(おそらくRequery?)」というコマンドを入力したのですが、 表示されているレコードの先頭にカーソルがくるだけで、 フォーム上に空白行を追加する(もどき操作)が出来ないのです。 一応、そのフォーム自体(前に貼ってあった画像)にも再クエリをしてみたのですが、 (おそらくMe.Requeryですね) それも何ともならず・・。 ちなみに画像が消えていますが、 これはテーブルがどんな感じになっているか新たに画像を貼り付けようとして、 削除したら再度画像を貼り付けられないことが判明しました(汗)。 申し訳ないです。 あ、あと似た質問と言えば、他の質問サイトでも同じ質問を出しました。 こちらで中々返信がなかったので、初挑戦してみました。
お礼
できました! メイン-サブ間での追加クエリを使った、 フォーム上への複数行表示が! 仰るとおり、絞り込む時のクエリがおかしかったようです。 試しに作った簡単なデータベースだと 追加クエリのフィールド名に 「商品名」、「数量」、「親ID(これがメインのもの)」 で「親ID」のところに式ビルダで絞り込む式を作ってOKでした。 [Forms]![親F]![親ID] で、実際のはもっと混み合っていて「メイン - サブ1 - サブ2」でしたので、 上記の「メイン」の代わりに「サブ1」のIDを入れて式ビルダで絞り込みをしたら、 無事、サブ2に複数行空白が表示されるようになりました。 これで思うように行くようになりました。 助かりました! 有難うございます。m(_ _)m