• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADO 複数条件のフィルタが出来ない)

ADO複数条件のフィルタができない

このQ&Aのポイント
  • ADOを使用して複数条件のフィルタリングができない問題があります。
  • 特定の条件でフィルタをかけると、期待した結果ではなく異なる結果が返ってきます。
  • この現象は、レコードの値を誤って読み取っていることが原因と考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Q、どうしてこのような現象が起きるのでしょうか? A、勘違いでは? まず、添付のテスト図を参照して下さい。ちゃんと、ADO の Filter 機能は動作しています。そこで、以下の二つの関数をお試し下さい。 【説明】 第一引数:SQL文 第二引数:列区分子(指定しなけりゃ;) 第三引数:行区分子(指定しなけりゃ;) Public Function DBSelect(ByVal strQuerySQL As String, _              Optional colDelimita As String = ";", _              Optional rowDelimita As String = ";") As String On Error GoTo Err_DBSelect   Dim R      As Integer ' 行インデックス   Dim N      As Integer ' 行総数 - 1   Dim cnn     As ADODB.Connection   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String ' 全てのデータを区切子で連結して格納      Set cnn = CurrentProject.Connection   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       N = .RecordCount - 1       .MoveFirst       For R = 0 To N         For Each fld In .Fields           With fld             strList = strList & .Value & colDelimita           End With         Next fld         strList = Mid(strList, 1, Len(strList) - 1) & rowDelimita         .MoveNext       Next R     Else       strList = ""     End If   End With Exit_DBSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", rowDelimita & "[END]", ""), "")   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr(13) & Chr(13) & _       "・Err.Description=" & Err.Description & Chr(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function Public Function DBFilter(ByVal strQuerySQL As String, _              ByVal strFilter As String, _              Optional colDelimita As String = ";", _              Optional rowDelimita As String = ";") As String On Error GoTo Err_DBFilter   Dim R      As Integer ' 行インデックス   Dim N      As Integer ' 行総数 - 1   Dim cnn     As ADODB.Connection   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String ' 全てのデータを区切子で連結して格納      Set cnn = CurrentProject.Connection   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .Filter = strFilter       N = .RecordCount - 1       .MoveFirst       For R = 0 To N         For Each fld In .Fields           With fld             strList = strList & .Value & colDelimita           End With         Next fld         strList = Mid(strList, 1, Len(strList) - 1) & rowDelimita         .MoveNext       Next R     Else       strList = ""     End If   End With Exit_DBFilter: On Error Resume Next   rst.Close   Set rst = Nothing   DBFilter = IIf(Len(strList) > 0, Replace(strList & "[END]", rowDelimita & "[END]", ""), "")   Exit Function Err_DBFilter:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBFilter)" & Chr(13) & Chr(13) & _       "・Err.Description=" & Err.Description & Chr(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBFilter End Function

KFAOBMBINHI
質問者

お礼

ありがとうございました。

関連するQ&A