Добрый день!
Проясните кто знает следующую ситуацию.
Открываю базы 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.