Добрый день!
Проясните кто знает следующую ситуацию.
Открываю базы dbf, создаю рекордсеты.
В определенных ситуациях rs.Filter работает, а в некоторых нет - пишет "действие отменено". В чем дело не могу понять - оба рекордсета однотипные, метод подключения одинаков. Однако в одном месте при работе с рекордсетом rstT8 фильтр применяется, а вдругом с rstC3 могу только закрыть рекордсет, изменить .Source и открыть. Почему ?
Может все дело в контролах. С rstC3 работает DataList, а s rstT8 DataGrid.
Вот пример кода:
Смысл - открываем таблицу C3.dbf и поле с наименованием пишем в DataList. Далее в DataGrid передаем rstT8. При выборе записи в DataList нужно отобразить все соответсвующие записи в T8.dbf.
Для быстроты использую .Filter - работает и очень быстро.
Дальше есть текстовое поле для поиска значения в T8. После ввода значения делаем новую выборку. И вот при нажатии на любую из записей хочу вывести ее в DataList (применив фильтр) - и вот тут-то облом. Почему ?
-----------------------------------------------------------------------
Public cnnODB_DBF As New ADODB.Connection   ' .\DBF
Public rstC3 As New ADODB.Recordset         ' Выборка из C3.DBF 
Public rstT8 As New ADODB.Recordset         ' Выборка из T8.DBF 
Public strConnect_DBF As String
Public strSQL As String
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim strFilter As String
    If blFlag = True Then
        If rstT8.RecordCount <> 0 Then
            strFilter = "r461 LIKE " & "'%" & rstT8.Fields(11).Value & "%'"
            rstC3.Filter = strFilter
            With DataList1
                .Refresh
            End With
        End If
    End If
End Sub
Private Sub DataList1_Click()
Dim strFilter As String
strFilter = "r461=" & "'" & DataList1.BoundText & "'"
rstT8.Filter = strFilter
Set DataGrid1.DataSource = rstT8
DataGrid1.Refresh
End Sub
Private Sub Form_Load()
    strConnect_DBF = "C:\"
    strSQL = "Select r461, r572 from c3"
    
    cnnODB_DBF.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & "'" & strConnect_DBF & _
                                    "';User ID=Admin;Password=;Extended Properties=dBase IV"
    cnnODB_DBF.Open
                                        
    With rstC3
         .ActiveConnection = cnnODB_DBF
         .CursorLocation = adUseClient
         .CursorType = adOpenForwardOnly
         .LockType = adLockReadOnly
         .Open strSQL, Options:=adCmdText
    End With
                                    
    strSQL = "Select * from t8"
    With rstT8
         .ActiveConnection = cnnODB_DBF
         .CursorLocation = adUseClient
         .CursorType = adOpenForwardOnly
         .LockType = adLockReadOnly
         .Open strSQL, Options:=adCmdText
    End With
                                    
With DataList1
    Set .DataSource = rstC3
    Set .RowSource = rstC3
    .DataField = rstC3.Fields(1).Name
    .BoundColumn = rstC3.Fields(0).Name
    .ListField = rstC3.Fields(1).Name
    .Refresh
End With
    
        
With DataGrid1
    Set .DataSource = rstT8
    .Refresh
End With
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim strFilter As String
    If KeyAscii = 13 Then
        strFilter = "Select r461,r572 from c3 where r572 LIKE " & "'%" & Text1.Text & "%'"
        
        With rstC3
            DoEvents
            If rstC3.State = adStateOpen Then
                .Close
            End If
            .Source = strFilter
            .Open
        End With
        With DataList1
            Set .DataSource = rstC3
            Set .RowSource = rstC3
            DoEvents
            .DataField = rstC3.Fields(1).Name
            .BoundColumn = rstC3.Fields(0).Name
            .ListField = rstC3.Fields(1).Name
            Call DataList1_Click
            .Refresh
        End With
    End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Dim strFilter As String
    
    If KeyAscii = 13 And Text2.Text <> "" Then
        strFilter = "r112 LIKE " & "'" & Text2.Text & "%'"
    
        rstT8.Filter = strFilter
        Set DataGrid1.DataSource = rstT8
        DataGrid1.Refresh
    End If
End Sub
------------------------------------------------------------------
Заранее благодарю.
Alex.
			
		
