Проблема с методом .Requery

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Flo
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 09.03.2004 (Вт) 16:43
Откуда: Таллинн, Эстония

Проблема с методом .Requery

Сообщение Flo » 18.03.2004 (Чт) 13:35

Работаю с базой Access, открыто два Recordset'а для одной базы - из разных таблиц.

Set DB = OpenDatabase(dbDir & "\Dosdata.mdb", False)

Set rstJuht = DB.OpenRecordset("SELECT * FROM Juht WHERE ID_juht>0 ORDER BY Nimi")
Set rstHaag = DB.OpenRecordset("SELECT * FROM Haagis WHERE ID_haag>0 ORDER BY HaagNumb")

Хочу после определенных действий пользователя их поочереди обновить, потому что предполагается, что таблицы могли измениться.
DB.Recordsets("SELECT * FROM Haagis WHERE ID_haag>0 ORDER BY HaagNumb").Requery
Set rstHaag = DB.Recordsets("SELECT * FROM Haagis WHERE ID_haag>0 ORDER BY HaagNumb")

а потом чуть погодя

DB.Recordsets("SELECT * FROM Juht WHERE ID_juht>0 ORDER BY Nimi").Requery
Set rstJuht = DB.Recordsets("SELECT * FROM Juht WHERE ID_juht>0 ORDER BY Nimi")

Пытаюсь пользоваться для этого методом .Requery (если он конечно годится для того, для чего был .Refresh в объекте Data), но получается такая ерунда, что первое обновление проходит, а при попытке обновить второй рекордсет выдается ошибка "Object invalid or no longer set" или еще что-то вроде "Not a valid bookmark". Хотя в коллекции этот рекордсет есть...

Из-за чего это может быть? Я наверное что-то не так делаю :shock: :oops:

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 18.03.2004 (Чт) 15:53

Ошибка на строчке DB.Recordsets(...).Requery?
Это похоже на потерянную коннекцию к БД. Совершенно случайно между этими 2мя действиями не было вызвано db.Close?.. Впрочем, если каким-то образом удалось выяснить, что коллекция рекордсетов жива, то вряд ли...

И еще - не проще вызывать rstJuht.Requery? Это не эквивалент написанным 2м строчкам?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Flo
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 09.03.2004 (Вт) 16:43
Откуда: Таллинн, Эстония

Сообщение Flo » 18.03.2004 (Чт) 16:01

Да, ошибка именно на этой строчке.

разумеется, rstJuht.Requery - то же самое, но так как появлялась
вышеописанная ошибка, хотелось как-то подстраховаться. А то опыта у меня не густо... :roll:

Большое спасибо за ответ, а по поводу потерянного соединения - это натолкнуло на мысль - db.close точно не было, но вот может где на уровне другого модуля еще одна переменная с таким же именем объявлялась и закрывалась, это может помешать? Буду проверять...
Еще раз спасибо.

Flo
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 09.03.2004 (Вт) 16:43
Откуда: Таллинн, Эстония

Сообщение Flo » 18.03.2004 (Чт) 16:10

Да, а выяснить, что коллекция жива просто - в Debug режиме после ошибки - Add Watch DB.Recordsets, и там все в наличии имеется, как это ни странно.

Flo
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 09.03.2004 (Вт) 16:43
Откуда: Таллинн, Эстония

Сообщение Flo » 18.03.2004 (Чт) 16:23

Нет, переменные других модулей тут не при чем, может еще какие-то мысли есть? Похоже придется кучу объектов Data на форму вешать и ими работать, ими у меня получается, а через объявления - нет :?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 18.03.2004 (Чт) 17:06

Есть еще идея... Ошибка нестабильная? Тогда, возможно, это ошибка в Microsoft Jet...
Инфа тут: http://support.microsoft.com/default.as ... -us;304536

Для лечения надо установить сервис пак для Jet (тестовый пример и ссылкана сервис пак там). Для запуска тестового примера открой новый проект, подключи библиотеку Microsoft ADO, поменяй путь к базе на свой и запусти....
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Flo
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 09.03.2004 (Вт) 16:43
Откуда: Таллинн, Эстония

Сообщение Flo » 18.03.2004 (Чт) 17:10

Rainbow, большое спасибо, буду ковыряться дальше.


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

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

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

    TopList  
cron