0

ここにアクセスするのは初めてで、すでにこの問題を解決するために多くの時間を費やしているので、ここで背景を説明します。

注:すでにこれを確認しました:ComboBoxではアイテムを選択できませんが、必要な回答は提供されませんでした。

フォームを介して顧客の詳細を入力および保存できるデータベースがあり、現在、次の関係を持つ3つのテーブルがあります。

顧客 -CustomerID(PK)-FirstName-LastName

プロセス -ProcessID(PK)-詳細-PartsUse-

Job -JobID(PK)-CustomerID(FK)-ProcessID(FK)-MachineDetail-

顧客はジョブと1-Mの関係を持っていますが、拡張すると(理由はわかりません)プロセスもジョブと1-Mの関係を持っています。したがって、ここでの目的は、顧客が多くのジョブを持つことができ、ジョブには1つのプロセスのみが必要であるということです(後でそれを修正する必要があります)。

これが、NewJobフォームでComboBoxをバインドするコードです。その目的は、フォームが開いたときにComboBoxに顧客のすべての名前を入力し、顧客が選択された後にのみユーザーがジョブの詳細を入力できるようにすることです。

Private Sub Form_Open(Cancel As Integer)

    Dim db As Database
    Dim recordSet As DAO.recordSet
    Dim sql As String

    sql = "SELECT [Customer].[CustomerID], [Customer].[FirstName] & [Customer].[LastName] FROM Customer ORDER BY [CustomerID];"

    'clear all fields
    ClearJobFormFields

    'disable all controls until a customer is selected
    DisableJobFormControls

    With cmbCustomer
        .ControlSource = "Customer"
        .RowSource = sql
        .ColumnCount = 2
        .ColumnWidths = "1cm; 3cm"
        .BoundColumn = 0
    End With

    cmbCustomer.ControlSource = "Customer"
    cmbCustomer.RowSource = sql

End Sub

注意点として、各フォームは独立しています。私はサブフォームを使用していません。これがオンになっているフォーム(NewJob)はAllowEdityesに設定されており、フォームはそれRecordSourceにバインドされていません。

ComboBoxは正しく入力されますが、アイテムを選択しようとするたびに、「コントロールを編集できません。不明なフィールドCustomerにバインドされています」というエラーが表示されます。

そして、それがすべてです。これが一般的で解決しやすい問題である場合は申し訳ありませんが、それは何日も私を悩ませてきました。

4

2 に答える 2

0

フォームにRecordsourceがない場合、コントロールにControlsourceを含めることはできません(できません)。デザインモードでフォームのプロパティに移動すると、ControlsourceプロパティでCustomerが有効な選択肢ではないことがわかります。Recordsourceをお持ちではありませんか。フォームの目的はジョブデータを入力することではありませんか?

于 2012-12-14T09:18:39.497 に答える
0

VBA を介して rowsource プロパティを設定しているため、これは非結合コントロールとして残して破棄する必要があります。

cmbCustomer.ControlSource = "Customer"

開いているフォームのサブは次のようになります。

Private Sub Form_Open(Cancel As Integer)

Dim db As Database
Dim recordSet As DAO.recordSet
Dim sql As String

    sql = "SELECT [Customer].[CustomerID], [Customer].[FirstName] & [Customer].[LastName] FROM Customer ORDER BY [CustomerID];"

    'clear all fields
    ClearJobFormFields

    'disable all controls until a customer is selected
    DisableJobFormControls

    With cmbCustomer
        .RowSource = sql
        .ColumnCount = 2
        .ColumnWidths = "1cm; 3cm"
        .BoundColumn = 0
    End With

End Sub

次に、このコンボボックスの after update イベントを使用して、ジョブの詳細フィールドを有効にするかどうかを決定できます。

Private Sub cmbCustomer_AfterUpdate()

    'Check it's populated and set fields as necessary
    If cmbCustomer & "" = "" Then
        txtJobDetails.Enabled = 0 'Change this fieldname as required
    Else
        txtJobDetails.Enabled = -1
    End If

End Sub
于 2012-12-21T09:09:34.983 に答える