- ベストアンサー
Access2003での帳票フォームでの伝票入力についての質問
- Access2003を利用している場合、帳票フォームを使用して伝票入力を行う際に、ワークテーブルをセットすることができます。
- 帳票フォームでは、商品コード、商品名、数量、単価、金額の情報を表示し、A単価からJ単価までの項目は非表示にしています。
- ただし、この方法ではレコードに値を入れるために非表示のテキストボックスを使用する必要があります。フォームのレコードセットに直接代入する方法は存在しないようです。
- みんなの回答 (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
その他の回答 (1)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
お礼
f_a_007さん、丁寧な説明ありがとうございます! 質問の仕方がわるかったとおもうですが、 Me.単価2 と Me.+「field名」でいいのですね。 そんな単純な事だったのを一生懸命しらべていました。 ADOを接続で取得する方法は大変参考になりました。 実装してみたいと思います!!