2017-06-22 15 views
0

ユーザーフォームに関連付けられたメインフォームがあり、サブフォームはユーザーが所有するいくつかのクライアントオブジェクトに関連付けられています。したがって、ユーザーとクライアントの間には1対多の関係があります。Microsoft Accessデータシートでオートコンプリート機能をカスタマイズする

サブフォームが存在するため、ユーザーはClientsサブフォームのエントリを追加、削除、編集できます。ユーザーがサブフォームのデータシートにエントリを追加すると、クライアントデータベースの任意の名前と一致するクライアント名のユーザータイプ部分を起動するオートコンプリート機能があるため、ユーザーはいくつかのキーストロークを保存し、クライアントデータベース内の名前と完全に一致する名前。

クライアントテーブルには、固有の数値IDを持つ各クライアントに加えて、各クライアントに完全な会社名(Test Agency、Inc.)、口語名(Test Agency)、短縮名名前(TA)。

サブフォームを編集しようとしていますが、オートコンプリート機能が上記の3つのフィールド(フルネーム、口語名、省略名)と一致するようにしています。現在、オートコンプリートは、サブフォームにリンクされているフィールドのようにフルネームに対してのみ機能します。私は、ユーザーが3つのフィールド(フルネーム、口語の名前、省略名)のどれかにマッチさせようとするために、サブフォームを文字列の一部に入力できるようにしたいと思います。 3つのフィールド。ユーザーが検索しようとしているクライアントの正しい潜在的な一致を選択すると、完全な会社名がデータシートに入力されます。基本的に、これらの追加フィールドは、ユーザーが探しているクライアントを簡単に見つけることができます(Advanced Micro Devices、Inc.の代わりにAMDで入力すると想像してください)。

私の最初の質問です。シンプルなデータシート?ルックアップフィールドと複数値ルックアップフィールドを使用して調べましたが、これが正しい方法であるかどうかはわかりません。または、複数のフィールドで一致するカスタムコントロールを作成する必要がありますか?

答えて

2

この

SELECT * 
FROM Company 
WHERE fullName LIKE '*' & pCompany & '*' 
    OR Colloquial LIKE '*' & pCompany & '*' 
    OR Abbr LIKE '*' & pCompany & '*' 

のようなクエリを作り、私のフォームに私はこの

Private Sub cboCompany_KeyUp(KeyCode As Integer, Shift As Integer) 
    ClearCombo cboCompany 

    Dim sql As String 

    Dim rs As DAO.Recordset 
    Dim companySearch As DAO.QueryDef 
    Set companySearch = CurrentDb.QueryDefs("CompanySearch") 
    companySearch.Parameters("pCompany") = cboCompany.Text 

    Set rs = companySearch.OpenRecordset 

    Do While Not rs.EOF 
     cboCompany.AddItem rs("ID") & ";" & rs("FullName") & ";" & rs("Colloquial") & ";" & rs("Abbr") 
     rs.MoveNext 
    Loop 
End Sub 

Private Sub ClearCombo(cbo) 
    For i = cbo.ListCount - 1 To 0 Step -1 
      cbo.RemoveItem i 
    Next i 
End Sub 

をしました。私はそれを速くすると、ユーザーがそのフィールドに入力を開始すると、KeyUpイベントをオフにするのではなく、代わりにタイマーに切り替えることが考えられます。その後タイピングを止めるか、フォーカスを合わせてコンボボックスを離れるときは、タイマーをオフにします。

1

これで部分文字列で検索することができます。類似した条件のクエリを使用している可能性があります。 次のステップは非常に簡単です。すべてのフィールドを検索し、UNIONで結合し、SELECT DISTINCTを使用して重複を削除します。 この簡潔な答えで十分でしょうか?それがすべてで超高速ではないのですが、それは動作します

関連する問題