2017-05-21 8 views
0
`Option Compare Database 

Option Explicit 
Dim argcount As Integer 
Dim mysql As String, msg As String, mysource As String, mycriteria As String,     mysource1 As String, mysql1 As String 

Private Sub AddtoWhere(FieldValue As Variant, FieldName As String, mycriteria As String, argcount As Integer) 

' Create criteria for WHERE clause. 
If FieldValue <> "" Then 
    ' Add "and" if other criterion exists. 
    If argcount > 0 Then 
     mycriteria = mycriteria & " and " 
    End If 

    ' Append criterion to existing criteria. 
    ' Enclose FieldValue and asterisk in quotation marks. 
    mycriteria = (mycriteria & FieldName & " Like " & Chr(34) & FieldValue & Chr(42) & Chr(34)) 

    ' Increase argument count. 
    argcount = argcount + 1 
End If 

End Sub 

Private Sub Search_Click() 

Dim Search As String 

here: 
argcount = 0 

' Initialize SELECT statement. 
mysql = "SELECT * FROM tbltab WHERE " 
mycriteria = "" 
mysql1 = "SELECT * FROM tblTemp WHERE " 
    mycriteria = "" 
' Use values entered in text boxes in form header to create criteria for   WHERE clause. 

AddtoWhere cboProduct, "ABC1", mycriteria, argcount 
AddtoWhere cboSource, "ABC2", mycriteria, argcount 
AddtoWhere cboPType, "ABC3", mycriteria, argcount 

'If no criterion specifed, stop the search. 
'you'll be glad you did if there are thousands of Persons maybe. 
If mycriteria = "" Then 
mycriteria = True 

End If 


' Create SELECT statement. 

mysource = mysql & mycriteria 

mysource1 = mysql1 & mycriteria 

Dim strval As String 

    'set the recordsource of the subform to the resultset 

Me!sfrmCap.Form.RecordSource = mysource 

Me!sfrmCapTemp.Form.RecordSource = mysource1 

Exit_cmdsearch_Click: 
Exit Sub 
Err_cmdsearch_Click: 

DoCmd.Hourglass False 

DoCmd.Echo True 

MsgBox Err.Description & " Person Search Command Cancelled", vbInformation,  "Person Search Command Cancelled" 

Resume Exit_cmdsearch_Click 

End Sub 

`私は2つのサブフォームがあるフォームを持っています。コンボボックスの値を使って検索レコードをクリックすると検索ボタンが表示されますが、コンボボックスには完全な検索ではなく関連するレコードのみが表示されます。Msアクセスフォーム - 検索ボタンを使用してテキストを完全にフィルタする方法

誰でも私を助けることができます。

ありがとうございます。 AddtoWhere()

+0

"[...] 1つのコンボボックスには、完全な検索ではなく関連するレコードのみが表示されます。 - 私はそれが何を意味するのか分かりません。私はコンボボックスが検索の入力パラメータを提供するために使用されたと考えましたが、これは検索結果を表示する必要があるように聞こえます。あなたは精緻化できますか? – Leviathan

+0

申し訳ありませんが、私はうまく説明していない場合、コンボボックスは、値やテキストを選択するために使用され、次にテキストは、データシートをフィルタリングするために使用する必要があります。コンボボックスは検索の入力パラメータを提供します。イメージで見ることができるように、完全な結果を表示するのではなく、関連するレコードを表示します。完全なテキストを検索する必要があります。 – Beginner

+0

1つのコンボボックスでは、画像に表示されるように5つのコンボボックスがあることを意味し、残りはうまく動作し、うまく動作しないソースコンボボックスが問題を把握できません。 – Beginner

答えて

1

あなたは、このような新しい条件の追加、あなたのWHERE句を組み立てる:あなたは、これが実際に何をするかわからない場合、あなたは余白に行(ダブルクリックでブレークポイントを置くことができる

mycriteria = (mycriteria & FieldName & " Like " & Chr(34) & FieldValue & Chr(42) & Chr(34)) 

をプログラムの実行中に自分自身で確認してください。そうした場合

、あなたは、このような新しい条件が追加されることを知るでしょう:

Source Like "Pre 2017 Source1*" 

*(コード内でChr(42)でエンコードされた)任意の文字に一致するジョーカーとして動作するので、これを条件は、検索結果に表示されるように、Pre 2017 Source1で始まるすべてを返します。

この動作を行わない場合は、SQLコードからスターを削除するだけで、正確に一致するものだけが返されます。

ところで:あなたはこのようにそのコード行向上させる必要があります。

mycriteria = mycriteria & FieldName & " LIKE '" & Replace(FieldValue, "'", "''") & "'" 

これは、Chr()の不必要な使用を削除することが推奨されるように、SQL文字列の区切り文字として単一引用符で二重引用符を置き換えて、コードを可能にします引用符を含む値を処理します。そうでない場合、実行時エラーが発生します。

+0

ありがとう@Leviathan :)それは動作します。 – Beginner

関連する問題