• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:票フォーム-データ更新について)

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

このQ&Aのポイント
  • Access2003を利用している場合、帳票フォームを使用して伝票入力を行う際に、ワークテーブルをセットすることができます。
  • 帳票フォームでは、商品コード、商品名、数量、単価、金額の情報を表示し、A単価から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