Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2014, 16:37   #1
zakat2
 
Регистрация: 07.08.2014
Сообщений: 3
По умолчанию Не работает поиск записи методом seek.

Всем доброго дня.
Несколько лет назад написал базу Access, сначала она работала на 97 потом перевел на 2000, а немного позже на 2003. Все прекрасно работало до недавнего времени. Перестало работать после покупки нового ПК и переходе на Win 7 (до этого крутилось на XP). Все работает на Access 2003 Немного о базе.
База разделенная, таблицы прилинкованны. Не работает блок поиска записи с использованием метода seek.

Код:
Set myrst = dbTab.OpenRecordset("Рейсы", dbOpenTable)
    myrst.Index = "PrimaryKey"
    myrst.Seek "=", current
    data = myrst!date_out
    avto = myrst!avto
myrst.close
Причем не хочет искать именно последнюю запись, предыдущие ищет нормально. До перехода на Win 7 даже сейчас на старой машине XP все работает нормально.
Подскажите пожалуйста хоть куда копать. Я не программист access, хотя несколько баз и написал (до 30 таблиц), одну даже прикрутил к mysql. Все работает, а тут на тебе...

Всем спасибо за возможные ответы.

Последний раз редактировалось Stilet; 07.08.2014 в 17:17.
zakat2 вне форума Ответить с цитированием
Старый 07.08.2014, 17:29   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
Причем не хочет искать именно последнюю запись, предыдущие ищет нормально
последняя--это только что введенная
или введенная в предыдущем сеансе?
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 07.08.2014, 17:43   #3
zakat2
 
Регистрация: 07.08.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от shanemac51 Посмотреть сообщение
последняя--это только что введенная
или введенная в предыдущем сеансе?
И так и так, запись точно есть, сам вначале думал что запись не проводится. Но даже при перезапуске базы, последняя запись не отрабатывает, а предыдущая как часики.
zakat2 вне форума Ответить с цитированием
Старый 07.08.2014, 19:09   #4
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

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

Код:
private sub mmm_click()
..............
.............
............
end sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 07.08.2014, 22:35   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте zakat2.
Метод Seek не зависит от системы, он является инструментом DAO.

Ваша конструкция не обрабатывает исключения, её стоит доработать хотя бы так:
Код:
    Set myrst = dbTab.OpenRecordset("Рейсы", dbOpenTable)
    myrst.Index = "PrimaryKey"
    myrst.Seek "=", Current
    If rs.NoMatch Then
        'не найдено
    Else
        Data = myrst!date_out
        avto = myrst!avto
    End If
    myrst.Close
Но я бы предпочел увидеть не "полный код", а БД целиком для определения других возможных источников "проблемы".

мнение : Поиск по индексу выполняется быстро (так объявляет документация), но выполнения
других вариантов поиска вполне удовлетворяет большинству задач.
Например такой:
Код:
Dim rs As ADODB.Recordset
Set rs = CurrentProject.Execute("select date_out, avto from  Рейсы where ID=" & Current)
If Not rs.EOF Then
        Data = rs(0)
        avto = rs(1)
End If
rs.Close
или такой:
Код:
Data = DLookup("date_out", "Рейсы", "ID = " & Current)
avto = DLookup("avto", "Рейсы", "ID = " & Current)
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 08.08.2014, 12:51   #6
zakat2
 
Регистрация: 07.08.2014
Сообщений: 3
По умолчанию

Еще раз всем здравствуйте и спасибо за активность. Тему прошу закрыть проблему решил. Хотя так ничего и не понял...
Вариант с использованием NoMatch проверял, просто по коду мне он не нужен, запись которую я ищу "всегда" есть. То бишь проверка в этом куске не нужна. Пробовал явное указание переменной Current, результат тот же последняя запись не находится а предыдущая запросто. Самое обидное что ранее все нормально работало. Так как текущую установку и перенос баз выполнял не я, решил перенести еще на одну машинку с WIN 7, что бы снять все ошибки по переносу и установке самой OS. И тут выяснилось...
Ранее(совсем давно) база(и база и рабочее место) располагалась на C:\Base , потом была перенесена на криптодиск(пусть будет U, а сам диск подключен как C:\Base и все нормально работало. Специалист который переносил очевидно что то не вкурил или просто не знал. Он положил оба файла и по пути C:\Base и на криптодиск, но диск как C:\Base не подключил. Ярлык на рабочее место вытащил с криптодиска, а база бралась с папки C:\Base (на рабочем месте явно прописаны пути на линк базы C:\Base) и в результате я получал такую ошибку. Перелопатил весь код и нашел проблему. Я иногда брал путь хранения рабочего места, а иногда явно указывал C:\Base (конечно это моя ошибка, но это была моя первая база, учился я). И получалось что запись создавалась в одной базе, а поиск велся в другой, ну в общем простите за беспокойство, тормознул я.
Просмотрел код, да, конечно много чего сейчас я бы сделал по другому, но переписывать сотню процедур и функций как то лень, да и работает все нормально уже 12 лет. Сама программа предназначена для обслуживания международной логистики , отслеживание топлива, расходов и тому подобное. При запуске позволяла экономить $400-$600 на каждом рейсе, ну а потом конечно водители поняли что ничего не поделаешь, все учтено и подзаработать не получится.
На данный момент программкой пользуются две небольшие компании на 15-25 фур. Жалоб нет, все довольны.
Еще раз всем спасибо, извините за беспокойство.

P/S. Это типа извинения.
При попытке клеить рабочее место к MySQL базе через ODBC многие получают ошибку "Данные изменены другим пользователем". Ошибка возникает после выполнения кода и обновления страницы формы. В свое время обрыл весь инет и ничего не нашел. У народа таких ошибок полно, а решения нет, некоторые от идеи отказались. Я нашел причину и хочу нею поделиться. Около года назад писал базу для обьединения логистики и OpenGTS("Open GPS Tracking System") и попался на указанную ошибку, потратил неделю но ошибку (а точнее причину) нашел. Как всегда все очень просто, хотя на базах access или MsSQL такая ошибка не возникает.
Причина в следующем. Допустим Вы из кода переписываете несколько полей записи. Пусть это поля П1, П2 и П3 и их значения 1, 2 и 3. Вы находясь на форме через код меняете значения на 3, 2, 1 соответственно и выполняете рефреш формы - вот тут и получите "Данные изменены другим пользователем"
Оказывается ошибка появляется в случае перезаписи поля тем же значением, в данном примере я 2 менял на 2, если выполнять проверку и в моем примере переписать только первое и третье поле, то ошибки не будет а результат тот же 3, 2 и 1. Странно но факт!!!
А вообще база MySQL работает отлично, быстро (в некоторых таблицах уже более 5млн записей-тормозов нет) и надежно(более года - все чик). Весь интерфейс через Access 2003. Рекомендую.
zakat2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу решения уравнения методом дихотомии, комбинированным методом секущих хорд, методом простых итераций (на C++) Bloody_Mary Помощь студентам 0 14.05.2014 21:05
Поиск экстремумов методом линеаризации Irina999 Помощь студентам 0 14.12.2013 19:04
seek & textfile dukales Помощь студентам 3 06.09.2011 18:17
Pascal нахождение детерминанты методом гауса Программа не работает( Студент13 Помощь студентам 1 19.04.2011 20:17
Реализация класса с методом поиска записи по файлу (используя компонент Memo) Dem.IG Общие вопросы Delphi 2 05.11.2009 16:02