powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему ????
11 сообщений из 11, страница 1 из 1
Почему ????
    #32873549
Фотография Andrey13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код следующий:

Set Rsl1 = New ADODB.Recordset
Set Rsl1.ActiveConnection = Setconn

Rsl1.CursorType = adOpenDynamic
Rsl1.LockType = adLockOptimistic

Rsl1.Open ("SELECT tmp_lgota.KOdKls,tmp_lgota.UniKOd, tmp_lgota.Itog1,tmp_lgota.prim From tmp_lgota WHERE (((tmp_lgota.UniKOd)=" + Str(Key11) + ")) ORDER BY tmp_lgota.Procent DESC")

MsgBox ("Rsl1.CursorLocation="Rsl1.CursorLocation)
MsgBox ("Rsl1.CursorType=" + Str(Rsl1.CursorType))
MsgBox ("=" + Str(Rsl1.LockType))

CursorLocation=2 т.е. adUseServer
Rsl1.LockType=3 т.е. adLockOptimistic

А вот CursorType=1 Хотя надо 2 т.е. adLockOptimistic
...
Рейтинг: 0 / 0
Почему ????
    #32873554
Фотография Andrey13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто может объяснить, что такое Coonection.CacheSize?
...
Рейтинг: 0 / 0
Почему ????
    #32874620
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть Recordset.CacheSize ?
...
Рейтинг: 0 / 0
Почему ????
    #32874674
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CursorType = 1 это - Keyset
Dinamic не позволяет.

К чему подключаемся?
...
Рейтинг: 0 / 0
Почему ????
    #32875836
Фотография Andrey13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключаемся так:

Код: plaintext
1.
2.
Set SetConn = New ADODB.Connection
  SetConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data/kvartplata.mdb;Persist Security Info=True;Persist Security Info=True"
  SetConn.Open "data/Kvartplata.mdb"
WinXpSp2 pro, Microsoft Jet 4.0 последней версии

Версия Msjet40.dll 4.0.8618.0 Бюллетень по безопасности MS04-014

У меня перебираются записи по LgotaGood

Код: plaintext
1.
LgotaGood.movefirst
Do While Not LgotaGood.EOF

а отсюда открываю еще один Rs c с записями из того жэ файла, что и
LgotaGood,

Код: plaintext
ЛГСМНАВСЕХ UniK, "СмБольше"

Код: plaintext
1.
LgotaGood.MoveNext
loop



Код: plaintext
1.
2.
Private Sub ЛГСМНАВСЕХ(ByVal Key11 As Double, Вариант As String)

Rsl1.Open ("SELECT tmp_lgota.KOdKls,tmp_lgota.UniKOd, tmp_lgota.Itog1,tmp_lgota.prim From tmp_lgota WHERE (((tmp_lgota.UniKOd)=" + Str(Key11) + ")) ORDER BY tmp_lgota.Procent DESC"), SetConn, adOpenDynamic, adLockBatchOptimistic
>
> Так вот этот rsl1 и не хочет быть adOpenDynamic, и вообще не хочет делать
так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
If Вариант = "СмМеньше" Then
ProcentLMAX = (Pi + Ostatok) / Plo
Rsl1.MoveFirst
Do While Not Rsl1.EOF
Rsl1("Itog1").Value = ProcentLMAX
Rsl1("Prim").Value =  1 
Rsl1.UpdateBatch
Rsl1.MoveNext
Loop
>  
>  
>
Rsl1.Close
set rsl1= Nothing
end sub
Почему то после того как в первом Рекордсете поменял
Код: plaintext
LgotaGood.LockType = adLockBatchOptimistic
на
Код: plaintext
LgotaGood.LockType = adLockPessimistic 
работает, но я так и не разобрался до конца в чем дело было и не уверен что не повторится снова.

Кто может подсказать в чем моя ошибка не молчите, очень надо.
...
Рейтинг: 0 / 0
Почему ????
    #32876179
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Рекордсет не может быть Dinamic и BatchOptimistic
т.к Dinamic рекордсет отражает все текущие изменения на источнике данных
а BatchOptimistic кэширует изменения "внутри себя" для последующей синхронизации данных.
Одно противоречит другому.

2. Надо заменить
Rsl1.UpdateBatch
на
Rsl1.Update
...
Рейтинг: 0 / 0
Почему ????
    #32877971
Фотография Andrey13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял то

Код: plaintext
1.
Rs.CursorType = adOpenDynamic
Rs.LockType = adLockBatchOptimistic

не имеет смысла?

Тогда это объясняет, почему я так долго не мог понять в чем дело.
CursorType автоматически становился adOpenStatic, а я считал что
он adOpenDynamic.
Поправте пожалуйста если не прав.

Спасибо.
...
Рейтинг: 0 / 0
Почему ????
    #32878009
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CursorType Property
     

Indicates the type of cursor used in a Recordset object.

Settings and Return Values

Sets or returns one of the following CursorTypeEnum values.

Constant Description 
adOpenForwardOnly Forward-only cursor.  Default.  Identical to a static cursor except that you can only scroll forward through records. This improves performance in situations when you need to make only a single pass through a recordset. 
adOpenKeyset Keyset cursor. Like a dynamic cursor, except that you can't see records that other users add, although records that other users delete are inaccessible from your recordset. Data changes by other users are still visible. 
adOpenDynamic Dynamic cursor. Additions, changes, and deletions by other users are visible, and all types of movement through the recordset are allowed, except for bookmarks if the provider doesn't support them. 
adOpenStatic Static cursor. A static copy of a set of records that you can use to find data or generate reports. Additions, changes, or deletions by other users are not visible. 

...
Рейтинг: 0 / 0
Почему ????
    #32878547
Фотография Andrey13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо

Из выше изложенного делаю вывод что тип курсора не влияет на возможность редактирования записей а только на их своевременное обновление на клиенте т.е. "Сервер" -> "Клиент" . Тогда для своевременной записи в базу
направление "Клиент" -> "Сервер" надо правильно устанавливать LockType.
Существует ли LockType работающий как курсор Dynamic, т.е. без команды
Update. И как тогда можно убедится что Update есть уже свершившийся факт.

Если можно процетируй еще о LockType.

И еще если можно очень прошу кусок кода для ADODBConnrction Microsoft.Jet.OLEDB.4.0

Я хочу чтобы работало так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 1 . Открыли Recordset1

               Цикл по Recordset1

 2 . Отредактировали записи (Временные значения)
 3 . Сохранили изменения.
 4 . Открыли Recordset2 с теми же уже измененными записями но условия другие.

              Цикл по Recordset2

 5 . Отредактировали записи Recordset2
 6 . Сохранили изменения Recordset2
                   
               Конец цикла по Recordset2


       Конец цикла по Recordset1
Тут и возникает вопрос успевает ли Recordset2 взять изменения вносимые Recordset1 п.3
и при каком типе курсора это будет работать если вообще будет.

Я понимаю что нужно обойти п.3 и 6. Но так тоже должно работать.

P.S. Вот это я назадавал вопросов! Но хочется раз и на всегда понять.
...
Рейтинг: 0 / 0
Почему ????
    #32879184
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы такие простые формУлы сделал одним Connection.Execute "UPDATE ... SET ... WHERE ..."
...
Рейтинг: 0 / 0
Почему ????
    #32880862
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно открыть Recordset2 как клон перовго.
Фильтровать уже на рекорсете
Recordset1 будет содержать изменения с обоих циклов
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему ????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]