• ベストアンサー

クエリの計算結果をテーブルに格納するには?

Windows NTでAccess2000を使っています。 クエリで関数の計算をさせてフォームで必要な数字を打ち込むと 計算結果が表示されるところまでは確認できましたが その値をテーブルに収めることはできないのでしょうか? 計算させたクエリからテーブルを作るというやり方もありますが それはもうひと手間ということになるので出来れば避けたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.7

>同じフォームを何個か作って中身だけ替えたいのですが・・ >クエリで場合分けをしているので・・ 場合分けの条件に合う各テーブルを基にクエリを各々作成してそのフォームに設定すれば良いんです。 フィールド名が同じなら同じフォームをコピーしてフォーム自体のプロパティの レコードソースに作ったクエリを設定すれば出来ます。

Sheep17
質問者

お礼

プロパティのコントロールソースのビルダで=[クエリ名][フィールド名]で大丈夫なのでしょうか? フィールド数×フォーム数が多いのでちょっと大変そうですがともかくやってみます。 ありがとうございましたm(_ _)mm(_ _)mm(_ _)m

その他の回答 (6)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.6

>現在表示されているレコードの伝票番号に飛んでしまいました 前の記述はレコードを保存するだけの記述です。保存後フォーカスを移動する だけです。次のレコードに移る場合は下記の記述になります。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click   Me![納品書金額] = Me![txt_納品書金額]   Me![納品書1本単価] = Me![TXT_納品書1本単価] DoCmd.GoToRecord , , acNext Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub 新規レコードの入力はまた別になります。 >でもMe![納品書1本単価]=Me![Txt_納品書1本単価]の部分を削除して・・ やはりTxt_納品書1本単価か納品書1本単価のフィールドに問題がありますね。 テーブルかフォームかどちらかを調べないとダメですね。 フォームのTxt_納品書1本単価フィールドが単に演算した結果のみ表示するフィ ールドであり他になにか設定が無い限りテーブル側に問題があるのではないかと 考えられるのですが。

Sheep17
質問者

お礼

できましたぁ~(^O^)/(+感涙!) 本当にうれしいです。ありがとうございました。 そしてもうちょっとお世話になってもいいですか? これと同じフォームを何個か作って中身だけ替えたいのですが (クエリで場合分けをしているので項目は同じだけどデータ元が違う場合) プロパティのコントロールソースをひとつひとつ変えていくしか方法はないのでしょうか? 項目名は同じなので「こっちではなくあっちのクエリから取ってきて」という 命令を一括でできると作業がはかどるのですが…。 迷惑かけついでに聞いちゃいます。よろしくお願いしますm(_ _)m

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

試しに簡単にDBを作って動かしましたがエラーは出ません。 下記の記述でテーブルに納品書金額も納品書1本単価もレコードは保存されます。 Private Sub 保存ボタン_Click() On Error GoTo Err_保存ボタン_Click Me![納品書金額] = Me![txt_納品書金額] Me![納品書1本単価] = Me![TXT_納品書1本単価] DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 伝票No.SetFocus Exit_保存ボタン_Click: Exit Sub Err_保存ボタン_Click: MsgBox Err.Description Resume Exit_保存ボタン_Click End Sub 記述に間違えとくにMe![納品書1本単価]=Me![Txt_納品書1本単価]のところ。 後はテーブルの納品書1本単価のデータ型など確認してください。

Sheep17
質問者

補足

ご迷惑おかけします。 色々と原因を探ってはいるのですが未だ脱出できません。 でもMe![納品書1本単価]=Me![Txt_納品書1本単価]の部分を削除して 試してみるとなんとか保存はクリアできたのですが 次のタブが次のレコードの伝票番号にではなく、 現在表示されているレコードの伝票番号に飛んでしまいました。 あとMe![納品書1本単価]=Me![Txt_納品書1本単価]の部分の 「1」を半角にしたり色々書式をあわせてみたのですが カーソルを別の行に移すと自動的に大文字に戻ってしまいます。 もうかなり八方塞がり状態で精神的にまいっております(*_*) なにかお気づきの点がありましたら返信よろしくお願いします。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

Me![伝票No].SetFocus ではなく 伝票No.SetFocus でExit_保存ボタン_Click:の行の前に記述してみて下さい。

Sheep17
質問者

補足

訂正したものの、まだエラーが出ます。 かなり泣き入っておりますが諦めませんよ(: _ ;) なにか気がついたことがあったら教えてください。 よろしくお願いします。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>次のレコードにタブが進みません。 通常タブ順に進んでボタンにフォーカスが移動した際にクリックやEnterキーを 押しても次に移動はしません。Tabキーでの移動になります。 EnterキーをクリックかEnterキー押下した際に行われるイベント内に移動する 記述を追加すればクリックかボタン押下で次のタブ順へと移動できます。 例えば  Me![テーブルのフィールド名] = Me![フォーム上の計算結果フィールド名] に続けて  Me![テーブルのフィールド名] = Me![フォーム上の計算結果フィールド名]  コマンド2.SetFocus とすればテーブルにフォーム上の計算結果を保存して次のコマンド2へ移動します。 Enterキーを押して保存したら次にどこのフィールドへ移動するか指定してくだ さい。フィールド名に.SetFocusでフォーム上の好きなフィールドへ移動できます。

Sheep17
質問者

補足

Private Sub 保存ボタン_Click() On Error GoTo Err_保存ボタン_Click Me![納品書金額] = Me![txt_納品書金額] Me![納品書1本単価] = Me![TXT_納品書1本単価] Me![伝票No].SetFocus DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Exit_保存ボタン_Click: Exit Sub Err_保存ボタン_Click: MsgBox Err.Description Resume Exit_保存ボタン_Click こんな感じでやって見ましたが なぜか「フィールドを更新できません」というエラーが出てきてしまいます。 そしてMe![納品書1本単価] = Me![TXT_納品書1本単価]の部分は 値が入らないままなのです。 一体何が…(>_<)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>この計算保存は1つのレコードに3つある場合「Me!…」を3回続けて書けば・・ 計算して保存したいフィールドが3つあれば  Me![テーブルのフィールド名A] = Me![フォーム上の計算結果フィールド名1]  Me![テーブルのフィールド名B] = Me![フォーム上の計算結果フィールド名2]  Me![テーブルのフィールド名C] = Me![フォーム上の計算結果フィールド名3] のように必要分追加して記述すてください。 >保存ボタンを用意した場合にEnterキーで保存・・ 保存ボタンのイベントに上記の記述を追加しタブ順に進めてEnterキーで保存でき ます。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click  Me![テーブルのフィールド名] = Me![フォーム上の計算結果フィールド名] DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, acMenuVer70 Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub こんな感じに追加して記述すればOKです。

Sheep17
質問者

補足

丁寧な回答、ありがとうございます。 なかなかいい感じに仕上がってきました。 ただここに来て1つ問題が発生しました。 計算をさせて保存ボタンを押した後に 次のレコードにタブが進みません。 これはどういうことなのでしょうか?? お手数ですが返信よろしくお願いしますm(_ _)m

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

フォーム上で計算した結果をテーブルに保存することはできます。 Private Sub コマンド1_Click()  Me![テーブルのフィールド名] = Me![フォーム上の計算結果フィールド名] End Sub これはボタンをクリックしたイベントにテーブルに保存する記述です。 フォーム上の計算させている名前はテーブルのフィールド名とは別のものにして 下さい。例えばテーブルが[計算結果]というフィールドであればフォームのフィ ールド名は[計算結果1]の様に。 Me![テーブルのフィールド・・ の行の記述をフォームの閉じるボタンやレコード の保存などのボタンのイベントに書き加えても使えます。

Sheep17
質問者

補足

ありがとうございますm(_ _)m 早速挑戦してみます。 質問なのですが、この計算保存は1つのレコードに3つある場合 「Me!…」を3回続けて書けばよいのでしょうか? そして、保存ボタンを用意した場合にEnterキーで保存できれば最高なのですが。 お手数ですが返信よろしくお願いします。

関連するQ&A

専門家に質問してみよう