База данных медлит

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

База данных медлит

Сообщение xfolder » 03.07.2005 (Вс) 16:58

программа построена на Access

нужно время от времени проводить вычисления и записывать их в БД
только возникает проблема что

когда я обнавляю row с db.execute "UPDATE xxx SET...."

и через несколько строк пытаюсь считать новые данные из БД ТО вот тут частенько получаю необновленные данные!

в дебаг режиме все ок, сложилось впечатление что row не успевает обновиться физически до момента когда я уже запрашиваю его.

вот думаю может дело в Locks но что то не работает

встречался ли кто нибудь с такой проблемой раньше?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.07.2005 (Пн) 1:46

Выполнение асинхронное?
Есть неподтверждённые транзакции?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 04.07.2005 (Пн) 10:19

наверно нет

как подтвердить то?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.07.2005 (Пн) 11:22

Позырить в код.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 04.07.2005 (Пн) 12:01

к примеру

добавили мы новый заказ в базу данных и тут же надо вывести список всех заказов по этому клиенту


сделал новую запись
....
....
....

делаю запрос типа

rs.open "SELECT SUM(price) as total WHERE clientID=100"
summa=rs("total") 'получаю старую сумму :(
.....

потом запрашиваю весь список заказов из тойже таблицы и получаю

xxx 1.00
yyy 3.45
zzz 2.00


ведь по идее сумма должна быть равна 6.45


доступ к БД через ADO Mdac 2.7

db.open settings.connectionstring
rs.open sSql,db, adOpenForwardOnly,adLockPessimistic
rs.close
db.close:set db=nothing

:(

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

Сообщение Konst_One » 04.07.2005 (Пн) 12:12

adLockPessimistic не пробовал на оптимистичный менять?
кстати, ты в момент апдейта возвращай кол-во проапдейченных записей:

Код: Выделить всё
Dim RecordsAffected  as Long

db.Execute "UPDATE xxx SET....", RecordsAffected

Debug.print "Обновлено записей: " & RecordsAffected

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 04.07.2005 (Пн) 13:23

в начале был оптимистик но как появилась проблема поставил Lock пожеще

в дебаг режиме все ок! похоже у машины времени больше все по порядку сделать а когда в run time то не успевает.

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

Сообщение Konst_One » 04.07.2005 (Пн) 13:36

DoEvents ???

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 04.07.2005 (Пн) 13:44

есть и они местами

где loop или for

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

Сообщение Konst_One » 04.07.2005 (Пн) 13:52

попробуй открывать рекордсет для просмотра так:

Код: Выделить всё
...
Set rs=New ADODB.Recordset
rs.CursorLocation=adUseClient
Set rs.ActiveConnection=db
rs.Open "SELECT ...",,adOpenStatic, adLockReadOnly
...

moshkin
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 03.12.2002 (Вт) 15:01
Откуда: Russia

Сообщение moshkin » 04.07.2005 (Пн) 13:52

У меня было такое с сортировкой.
Задается запрос отсортировать и вывести в файл. Иногда, причем не предсказуемо, выводились куски перепутанные местами.
Я тоже лазил по форуму, никто в общем-то конкртено не подсказал. Я просто вставил MsgBox. Выполняется редко - жду пару секунд и все.
Теперь все работает.
Но у меня очень большой файл с базой.
Так что похоже что действительно что-то не успевает.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.07.2005 (Пн) 13:57

Мож нуно поставить MDAC 2.8 и Jet SP8?
А то как у меня пропали некоторые баги после их установки, теперь всем советую :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 04.07.2005 (Пн) 14:54

А если попробовать закрыть коннект к БД после обновления (м.б. рекордсета и бд), сделать doevents и попробывать открыть? Хотя может быть я и не прав...
Бороться и искать, найти и перепрятать!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.07.2005 (Пн) 15:18

Может ты и прав, но так делать точно не надо :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.07.2005 (Вт) 4:37

Я согласен что нужно разобраться в сути «отчего тормозит»... Но трудно разобраться не видя кода, м.б. что-то в коде не так...
Бороться и искать, найти и перепрятать!


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

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

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

    TopList