A AdoDc тоже поддает

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vlad_Ginz
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 17.04.2004 (Сб) 0:19

A AdoDc тоже поддает

Сообщение Vlad_Ginz » 07.05.2005 (Сб) 1:12

Только разобрался с AdoDb, а теперь аналогичная напасть с AdoDc.

При выполнении .Execute с Sql опять не отрабатывает Recordset, если не включить Break Point :

' На форме Adodc, TGrid, command1

Private Sub Form_Load()
Dim Cn as New AdoDb.Connection, qq$, cnn$

cnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = e:\top.mdb"

Set cn = New ADODB.Connection
cn.CursorLocation = adUseServer ' = adUseClient
cn.ConnectionString = cnn
cn.Open

With Me.Adodc
.ConnectionString = cn ' или cnn
.RecordSource = "Select * From Obi"
.CursorLocation = adUseServer
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Refresh
End With


Set Me.TGrid.DataSource = Ado ' или с .Recordset
TGrid.Refresh

' Сетка TGrid - любая для таблицы из 2-х колонок:
' nom As Long, s_fact as Long
End Sub

Private Sub Command1_Click()
Dim qq$, nom As Long, f, j, d, e

nom = TGrid.Columns("nom").Value

qq = "Update Obi Set s_fact=62345 Where nom=" & nom
cn.Execute qq ' , False

Me.Ado.Recordset.Requery
Me.Ado.Recordset.AbsolutePosition = nom
f = TGrid.Columns("s_fact")
e = Me.Adodc.Recordset!s_fact
Msgbox f & "," & e
End Sub

' Если не поставить Break Point в строке Me.Ado.Recordset.Requery,
результат в (f) и (e) не меняется. А если поставить Break Point в
указанной строке - все изменяется правильно с изменениями в сетке.

' Не помогают : MoveLast, Update, Refresh как Adodc , так и сетки и др.
' Если же создать rst.Open (rst as AdoDb.Recordset), а затем
' Set TGrid=rst, ... rst.Requery - нет проблем

Ну что теперь скажете ?

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 07.05.2005 (Сб) 10:02

Попробуй поиграть с DoEvents перед или после Me.Ado.Recordset.Requery
Btw, кнопка "vb" в интерфейсе форума придумана не зря :roll:

Vlad_Ginz
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 17.04.2004 (Сб) 0:19

Сообщение Vlad_Ginz » 07.05.2005 (Сб) 13:59

Поиграл с DoEvents. Со 2-го раза (Run command1) изменяет сетку с учетом предыдущей команды.
Вообще, можно поставить проще задачу - без сетки:
Можно ли, используя только AdoDc - получить значения записей после
выполнении каких либо процедур типа cn.Execute ?
То есть как обновить AdoDc.Recordset ?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.05.2005 (Сб) 21:27

не использует ты этот глючнгый контрол, если уж оченьт хочется, то обязательно поставь SP6

Vlad_Ginz
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 17.04.2004 (Сб) 0:19

Сообщение Vlad_Ginz » 08.05.2005 (Вс) 10:13

Контрол удобен для навигации по записям.
А вообще нашел выход:

1. Создать подключение (cn)
2. Не надо ничего задавать в программе для Adodc
3. Открыть стандартно Recordset:
Dim rs as New AdoDb.Recordset
rs.Open "Select * From Obi", cn, adOpenKeyset, adLockOptimistic, adCmdText

3. И задать :
Set Adodс.Recordset = rs
Set Me.TGrid.DataSource = rs

И , в случае применения (cn.Execute ...), просто задать (rs.Requery)
Сетка обновляется тут же.

Спасибо за отклики. Тема закрыта.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 100

    TopList