-2

他のフィールドで指定されたデータに基づいてデータを確認する必要があるというこの要件があります。「N」フィールドのテーブルがあります。ユーザーがテーブルから 4 つのフィールドを選択できるようにする必要があります。次に、その特定のレコードの他のすべてのフィールドを取得してユーザーに表示し、ユーザーがテーブルに入力したデータが正しいことを確認できるようにする必要があります。助けてください。

ありがとう

4

1 に答える 1

0

私はあなたが必要とするものをより明確に理解しています - うまくいけば、これがあなたが必要とするものです:


「Phones」というテーブルがあるとします。

電話テーブルには、製造元、オペレーティング システム、キャリアの 3 つのプライマリ フィールドがあります。これらのプライマリ フィールドに加えて、セカンダリの「仕様」フィールドがあります。今のところ、ScreenSize、Frequency、Price の 3 つがあります。

ManufacturerFilter、OperatingSystemFilter、CarrierFilter の 3 つのコンボ ボックスを含むフォームを作成します。
各コンボ ボックスの行ソースは次のようになります。

SELECT Carrier FROM Phones GROUP BY Carrier ORDER BY Carrier; 

Carrier は、製造元と [オペレーティング システム] にそれぞれ置き換えられます。

次に、すべてのセカンダリ フィールドを追加し、それぞれがそれぞれのフィールドにバインドされます。

「取得」というボタンを追加して、クリック コードを空白のままにすることもできます。


この時点で、いくつかのオプションがあります。2 つを強調しますが、どちらのオプションでも次の手順が必要です。

Private Function FilterStr() As String
  Dim myFilterStr As String

  ' Include each filter if they are entered
  If Nz(Me.ManufacturerFilter, "") <> "" Then myFilterStr = myFilterStr & "[Manufacturer]='" & Me.ManufacturerFilter.Value & "' AND"
  If Nz(Me.OperatingSystemFilter, "") <> "" Then myFilterStr = myFilterStr & "[Operating System]='" & Me.OperatingSystemFilter.Value & "' AND"
  If Nz(Me.CarrierFilter, "") <> "" Then myFilterStr = myFilterStr & "[Carrier]='" & Me.CarrierFilter.Value & "' AND"

  ' Remove the last AND statement
  If myFilterStr <> "" Then myFilterStr = Mid(myFilterStr, 1, Len(myFilterStr) - 4)
  FilterStr = myFilterStr
End Function

この関数は、選択されたコンボ ボックス オプションに基づいて、フィルター文字列を返します。

オプション 1: レコードセット をフィルター処理する プライマリ フィールドの値が選択されると、条件に一致するレコードのみが表示されるようにレコードがフィルター処理されます。次のコードを取得ボタンの OnClick イベントに追加します。

Private Sub RetreiveButton_Click()
  Dim myFilterStr As String
  myFilterStr = FilterStr

  If myFilterStr <> "" Then
    Me.Filter = myFilterStr
    Me.FilterOn = True
  Else
    Me.Filter = ""
    Me.FilterOn = False
  End If
End Sub

ボタンをクリックすると、選択した値に基づいてフィルター文字列が作成され、フォームにフィルターが適用されます。コンボ ボックスで値が選択されていない場合、フィルタはクリアされ、オフになります。

オプション #2: 値に基づいてレコードを検索する 必要なのは、コンボボックスで値を選択し、条件に一致するレコードに移動することです。

次のコードを取得ボタンの onClick イベントに追加します。

Private Sub RetreiveButton_Click()
  Dim rst As DAO.Recordset
  Dim myFilterStr As String

  myFilterStr = FilterStr()

  If myFilterStr = "" Then
    MsgBox "No Filter Selected", vbOKOnly, "Error"
    Exit Sub
  End If

  Set rst = Me.RecordsetClone
  rst.FindFirst myFilterStr
  If rst.NoMatch Then
    MsgBox "No Matching Records were found", vbOKOnly, "No Data"
  Else
    Me.Bookmark = rst.Bookmark
  End If

  Set rst = Nothing
End Sub

これは、同じ FilterStr() 関数を使用して検索文字列を返しますが、レコードセットの FindFirst メソッドを使用してレコードを検索します。見つかった場合は、レコードに移動します。

それがあなたの質問に答えることを願っています。前述したように、正確な動作はさまざまですが、基本的な原則は同じままです。

于 2013-08-28T19:39:19.630 に答える