Чуть-чуть вопросов по ADO

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
ang
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 31.10.2003 (Пт) 11:25

Чуть-чуть вопросов по ADO

Сообщение ang » 31.10.2003 (Пт) 11:52

Добрый день!

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

Oldman
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 10.11.2003 (Пн) 12:23
Откуда: ТРТУ

Сообщение Oldman » 11.11.2003 (Вт) 15:57

Наступал я на эти грабли...
Перед применением нового фильтра отмени старый:
rstC3.Filter = 0
ну, и соответственно, для второго рекордсета тоже...
Из-за этого я неделю бился над базой
Ежики не колются, только бухают иногда

ang
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 31.10.2003 (Пт) 11:25

Сообщение ang » 11.11.2003 (Вт) 16:44

Дык у него rstC3.Filter и так в данном случае 0.
И при любом его назначении выводит "... операция была отменена.."


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 215

    TopList