0

Microsoft Access 2007 で表形式のフォームを作成しました。フォームにはテキスト ボックスがあり、フォーム内のアイテムをフィルター処理したいと考えています。

問題は、フォーム内のフィールドの 1 つが、会社名を保持するリンク テーブルを参照する外部キーであることです。

以下のコードを実行し、テキスト ボックスに会社名を入力してリターンを押すと、会社名に対応する数値のみを検索できます。

Private Sub Text22_AfterUpdate()
Dim mFilter As String
Dim mQuery1 As String

If IsNull(Me.Text22) Then
    mQuery1 = ""
Else
    mQuery1 = Me.Text22
End If

mFilter = "[ID] Like ""*" & mQuery1 & "*"""
mFilter = (mFilter + " OR ") & "[Supplier] Like ""*" & mQuery1 & "*"""

temp = MsgBox(mFilter, vbOKOnly)

Me.Filter = mFilter
Me.FilterOn = True
Me.Requery
End Sub
4

1 に答える 1

0

これを解決する最も簡単な方法は、表形式のフォームにリンクされたクエリに、フィルター処理する会社名を含めることです。何かのようなもの:

SELECT Invoice.ID, 
       Invoice.Amount, 
       Invoice.SupplierID,
       Supplier.CompanyName
FROM   Invoice
  INNER JOIN Supplier ON Supplier.ID = Invoice.SupplierID

次に、フィールドを表示したくない場合は、CompanyNameいつでもデータシート フォームでその列を非表示にできます。データベースの内部でレコードを識別し、外部関係を作成するためにのみ使用するため
、通常はレポートから非表示にします。各テーブルの はユーザーに表示されません。IDID

フォームが異なる方法で接続されている場合は、より正確に回答できるように、質問を修正して、より多くの情報とスクリーンショットを添付してください。

あなたが提供したコードに関する小さな注意:
あなたのようにフィルターを慎重に構築する必要があります: ユーザーが a を入力する"と、フィルター クエリが壊れます。ユーザーの入力をエスケープし、少しサニタイズする必要があります。
少なくともmQuery1 = Replace(Text22, """", "").
同様に、ユーザーがフィルターを で開始/終了すると*、クエリはおそらく機能しません。

于 2013-04-05T02:41:46.663 に答える