Access2003での帳票フォームでの伝票入力についての質問

このQ&Aのポイント
  • Access2003を利用している場合、帳票フォームを使用して伝票入力を行う際に、ワークテーブルをセットすることができます。
  • 帳票フォームでは、商品コード、商品名、数量、単価、金額の情報を表示し、A単価からJ単価までの項目は非表示にしています。
  • ただし、この方法ではレコードに値を入れるために非表示のテキストボックスを使用する必要があります。フォームのレコードセットに直接代入する方法は存在しないようです。
回答を見る
  • ベストアンサー

票フォーム-データ更新について

Access2003を利用しています。 伝票入力用のワークテーブルを帳票フォームで入力しようとしています。 (ワークテーブル内容) ID 商品コード 商品名 数量 単価区分 単価 金額 単価A 単価B 単価C  ・  ・ (10種類の単価設定あり) 単価J 帳票フォームのレコードソースにワークテーブルをセットして (表示) 商品コード、商品名、数量、単価 金額 (非表示)A単価、B単位、C単価、~J単価 としています。 商品コードが入力されると、商品マスターから情報を取得して 単価A~Jに値をコピーしています。 txt単価A = recW("単価A")  txt単価B = recW("単価B")  txt単価C = recW("単価C")    ・   ・ txt単価J = recW("単価J")  ここで質問ですが、 現状だとレコードに値を入れたい場合、 非表示のテキストボックスを利用していますが フォームのレコードセットにそのまま代入する方法はないでしょうか? 初心者の質問でお恥ずかしいですが、何卒、ご教授ください

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

  • ベストアンサー
回答No.2

さて、ワークテーブルの各列の値ですが、[商品マスター_ID]さえ確定すれば、以下のコードで確定できます。 Private Sub 商品マスター_ID_BeforeUpdate(Cancel As Integer)   Dim lngID As Long   Dim strSQL(3)  As String   Dim strWHERE(1) As String      lngID = Val(Me.商品マスター_ID & "")      If lngID > 0 Then     strWHERE(0) = "ID=" & lngID     strWHERE(1) = "商品マスター_ID=" & lngID     strSQL(0) = "SELECT [商品コード] FROM [商品マスター] WHERE " & strWHERE(0)     strSQL(1) = "SELECT 商品名 FROM [商品マスター] WHERE " & strWHERE(0)     strSQL(2) = "SELECT 単価 FROM 商品別単価一覧 WHERE 単価区分=1 AND " & strWHERE(1)     strSQL(3) = "SELECT 単価 FROM 商品別単価一覧 WHERE 単価区分=2 AND " & strWHERE(1)     Me.商品コード = DBLookup(strSQL(0))     Me.商品名 = DBLookup(strSQL(1))     Me.単価1 = DBLookup(strSQL(2))     Me.単価2 = DBLookup(strSQL(3))   End If End Sub PS1、通常は、このような手法は使わない。 ・[商品マスター_ID]に"0"が入力されると検索フォームを開く。 ・商品を検索・選択したら検索フォームを閉じる。 ・その際に、各列の値を更新する。 PS2、DLookup()でも良いが動作は遅い。 DBLookup()は3倍速で動作します。 Public Function DBLookup(ByVal strQuerySQL As String, _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim rst     As ADODB.Recordset   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _      "・Err.Description=" & Err.Description & Chr$(13) & _      "・SQL Text=" & strQuerySQL, _      vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function

koifun
質問者

お礼

f_a_007さん、丁寧な説明ありがとうございます! 質問の仕方がわるかったとおもうですが、 Me.単価2 と Me.+「field名」でいいのですね。 そんな単純な事だったのを一生懸命しらべていました。 ADOを接続で取得する方法は大変参考になりました。 実装してみたいと思います!!

その他の回答 (1)

回答No.1

回答 1/2 ある程度のテストを基に回答するとして・・・。 私の場合は、以下のようなテーブル構造を想定しています。

関連するQ&A

  • 帳票フォームの自動計算

    毎度おせわになります。 商品  購入金額  比率(%) ------------------------------- A      99,999  99.9 B C : : ------------------------------- TOTAL  99,999   100.0 上記のような帳票フォームがあり 各商品の購入金額を入力すると、各商品毎の購入金額合計に対する の割合(比率)が自動計算されるようにする という、フォームを作りたいのです。 フォームにはテーブルが連結されていて、上記の項目はテーブルから 貼り付けています。 購入金額をA,B,C…と入力していくと、それぞれの比率も変わってるの ですが、カレントレコードしか計算ができません。 どのようにしたら全レコードの比率を再計算して表示できるのでしょうか?

  • ACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

    フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。 売上テーブル  ID   商品コード  日付    金額   1    G1     20080101  532153  2    G1     20080101  564281  3    G1     20080301  538123  4    J4     20080301  124531  5    J4     20080302  125483 ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型 これを使い、 フォームではまず レコードナンバーを入力画面        ↓ レコード番号を入れると、そのレコードのデーターが画面に表示され、 その画面で修正可能        ↓  保存 ボタンで保存 という流れです。 レコードナンバーはIDを使おうと思っています。 データの量が莫大な為、コンポボックスなどは使えません。 できるだけ、VBAなどは使わずに作りたいです。 よろしくお願い致します。

  • 2つのサブフォーム間でデータの連携

    今、ある単票フォームに、2つのサブフォームを配置し、そのサブフォーム間で金額の連携をしたいと考えています。 【親フォームA】 ・ID1、長整数型(主きー) ・受付日時 ・発注金額総合計 <== ※Bが更新されたら、ここを更新したい 【サブフォームB】 ・ID2、長整数型(主キー) ・ID1(外部キー) ・発注日 ・発注合計金額 <=== ※Cが更新されたら、ここを更新したい ==> Aの更新へ↑ 【サブフォームC】 ・ID3、長整数型(主キー) ・ID2(外部キー) ・発注項目名 ・単価 ・数量 ==>ここを更新する→Bへ↑ ・単位 ==>ここを行進する→Bへ↑ ・摘要 サブフォームB、Cは、いずれも帳票型です。 それぞれ、テーブルA, B, Cがレコードソースで テーブル構成は、上の項目の構成と同じです。 A-ID1: B-ID1 = 1:多 B-ID2: C-ID2 = 1:多 この時、Cで単価と数量を入力したら、Bの発注合計金額の値を更新したいです。 それと同時に、親Form Aの「発注金額総合計」の値を、Bの全てのレコードの「発注合計金額」のSumで更新したいです。 よろしくお願いします。

  • SQLを教えてください。

    以下に5つのテーブルがあるとします。 (1)全体テーブル  ・登録順番号(Key)  ・登録名 (2)商品テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・品名 (3)商品単価テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・登録順番号(Key)  ・商品単価 (4)新_商品単価テーブル  ・項目コード(Key)  ・品名コード(Key(Key))  ・商品登録順番号  ・商品サイズ(Key)  ・登録順番号(Key)  ・新_商品単価 (5)詳細テーブル  ・登録順番号(Key)  ・品名コード(Key)  ・原価項目コード(Key)  ・商品数量A  ・商品数量B 上記のテーブルから、以下の条件に合致する「(1)の登録名」「(2)の品名」「(4)の新_商品単価×(5)の商品数量※」を取得したい。 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 【条件1】全てAND条件 新_商品単価テーブルの項目コードが100  新_商品単価テーブルの品名コードが50 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※<0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 上記で抽出出来るレコードに加えて、以下 【条件2】全てAND条件 新_商品単価テーブルの項目コードが200~300あるいは400~500 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※=0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A どのようなSQLで抽出できますでしょうか?? DBはAccessです。

  • ACCESSで計算をさせたい。

    お世話になっています。 早速ですが、ACCESS2003でテーブルに入力した数字がエクセルのように結果を出し残すことはできるのでしょうか? テーブルでは計算ができないのでクエリでやるとしたらどのようにしたらいいでしょうか? 数量(A1)×単価(B1)=金額(C1)というC1の計算結果もレコードに保存できるものでしょうか? フォームではもちろん入力した数字を計算させることはできるのですが、その結果をレコードに残して行きたいと思っています。 どうかよろしくお願い申し上げます。

  • access2003 複数のフォームから入力したデータに通し番号を付けてストックしたい

    初心者の恥ずかしい質問かもしれないので申し訳ありませんが、自力で解決できないのでアドバイスをお願いします。 伝票入力画面を作っています。  ◆親)売上入力フォーム:売上管理番号/日付/取引先/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 伝票が数種類あるため、それぞれの伝票を画像として取り込んで複数の入力画面を作り、入力しやすくしようと思っています。 このとき、各フォームから入力したデータを、オートナンバーでひとつの売上入力/明細テーブルにストックしていくにはどうしたらよいでしょうか? よろしくお願いします。

  • Accessのフォームでの合計欄を二つにわけたい

    テーブル1;売上明細T フィールド名;売上明細番号、商品コード、数量、摘要 テーブル2;商品T フィールド名;商品コード、商品名、単価 クエリで売上明細と商品Tをつなぎ、下記のように表示します。 商品コード 商品名 摘要  数量  単価 明細計                  (数量*販売単価) 001    物件1  作業代  1  500 500 002    物件2  作業代  2  400 800 051    物件51  作業代  1  500 500 051    物件51  交通費  1  350 350  上記クエリを元にフォームを作成(帳票形式)して、 テキストボックスで課税対象計(作業代計)と、非課税対象計(交通費計) のボックスをもちたいのですが可能でしょうか? 最終的には、売上伝票フォームに売上明細フォームをサブフォームで 取り込み、売上伝票上で合計金額を表示させたいと思っています。 よろしくお願いします。

  • Access2000 フォームでのデータ入力について

    質問させていただきます。 Access2000で、あるフォームを作りました(帳票フォーム)。フォームの基になるレコードソースはクエリーです。このクエリーは原料伝票テーブルから在庫数が特定の数量を下回った原料を抽出しています。 フォームは以下イメージです。 原料コード 原料名  在庫数  発注数 原料コード~在庫数をクエリーから、発注数を手入力 にしました(発注数のコントロールソースは非連結です)。 で・・・発注数に値を入力すると全部の行が同じ値になってしまします。これを改善したいのですが・・・。 このやり方は根本的に間違っているのでしょうか?

  • アクセス初心者です

    納品書を元に仕入帳を作ってみたいと思うのですが テーブルとフォームは何となくわかったのですがクエリーでつまずいてしまいました 例 納品書 月日 A商店 伝票ナンバー 商品コード 品名 金額  入数 単価 数量 金額 売値  これを元に仕入帳を作りたいと思います 仕入帳 A商店、B商店、C商店に分けて 品名 金額 数量 単価 金額が出るように 又納品書は商品コードを入れただけで品名、金額、入数、単価が出るようにしたいのですが 納品書はテーブル、フォームは作りました 商品マスタも作りました 

  • access テーブルへのデータ入力について

    只今accessにて受発注のデータベースを作っておりますが、初心者でつまずいているため、ご教授ください。 商品テーブルに仕入単価が入っています。受注テーブルには仕入金額を入力する欄があります。普通なら、仕入単価と受注の数量をクエリで計算させて様々に加工、使用していくと思うのです。しかし、仕入単価は一応1年単位で決まっていますが、原材料の価格によって変動がある場合があります。 そこで、納品書の入手時点で仕入金額を入力しようと考えていますが、基本的には商品テーブルの単価使用したいので、フォームの仕入金額を入力する規定値に商品テーブルからの単価で計算させ、違った場合は手入力という形にしたいと思っています。 規定値に =[数量]*[単価](このフォーム自体のレコードソースが各テーブルをつなげた参照クエリです。) と設定しましたがname?エラーが返ってきています。 どうしたらいいでしょうか?この方法に限らず、単価変動がある場合の金額をどのようにすれば管理できるか案がありましたらお教えください。