Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406

Проверка связи с сервером

23.06.2016, 09:34. Показов 3876. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую
Как можно реализовать такую задачу - с интервалом времени в 10 секунд проводить запись в разделенную БД на сервере с локального компьютера и считывать результат, если результат не соответствует записи, выводить меседж что связь прервана.

Я предполагаю, что нужно создать таблицу с одним полем и 1 записью и переписывать эту запись двумя значениями по очереди с определенным интервалом и проверять соответствие записи последнему выбранному значению.

Запись желательно формировать в основной форме, с которой идет работа (форма1 например) в таблицу на сервере (таблица1, поле1, например).

Может кто уже реализовал такую проверку как то по своему, в общем подскажите пожалуйста как лучше.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2016, 09:34
Ответы с готовыми решениями:

Ошибка связи с сервером OLE
Привет. Недавно получил помощь на форуме, что помогло значительно упростить базу данных и начать "шаманить" на формах с объектами...

Произошла ошибка связи в приложении с сервером "Microsoft Access" OLE или элементом управления ActiveX
Произошла ошибка связи в приложении "Microsoft Access" с сервером OLE или элементом управления ActiveX. Что делать?! Пытаюсь добавить...

При создании нового файла "*.mdb" возникает "ошибка связи с сервером OLE"
При создании нового файла "*.mdb" "ошибка связи с сервером OLE". Выскакивают окна Окно 1 "Выбранный порядок сортировки не...

20
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 11:15
Цитата Сообщение от sysghost Посмотреть сообщение
меседж что связь прервана
А разве чтобы понять, что связь прервана, надо что-то писать в базу?
Нельзя ли просто попытаться открыть набор записей?:
Visual Basic
1
Set rec=currentdb.openrecordset(ИнструкцияSQL)
Если даст ошибку -- связи нет.
1
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 11:46  [ТС]
Цитата Сообщение от Nslava Посмотреть сообщение
А разве чтобы понять, что связь прервана, надо что-то писать в базу?
Ну я потому и спрашиваю, что не знаю как лучше выполнять такую проверку.
Записи я так понимаю можно открывать любые, и как это сделать по таймеру что бы в случае неудачи выводилось сообщение о потере связи?
Хотелось бы вменяемое сообщение о разрыве а не неопределенную ошибку, но я попробую приспособить Ваш вариант.

Добавлено через 7 минут
Возможно нужно описать ситуацию подробнее.
После того, как я принял все рекомендации по разделению БД и отключению кеширования такие разрывы стали достаточно редки, но если происходит, то сразу заметить не удается и несколько записей может быть не занесено в БД, хотя по интерфейсу видно, что они внесены.
Хотелось бы проводить регулярную проверку параллельно с основной работой что бы в случае разрыва сразу выводилось предупреждение независимо от того что в данный момент делается, подготовка данных или запись их в БД.
0
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 11:48
Цитата Сообщение от sysghost Посмотреть сообщение
Хотелось бы вменяемое сообщение о разрыве
Вот так примерно должна выглядеть процедурия:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Sub Проверка_связи()
Static Проверка_запущена As Boolean
If Проверка_запущена Then Exit Sub
On Error Resume Next
Проверка_запущена = True 'Флаг, показывающий, что проверка уже идет, чтобы не запускать одновременно несколько копий процедуры.
Err = 0
Set rec = CurrentDb.OpenRecordset(ИнструкцияSQL)
If Err <> 0 Then
    MsgBox "Нет связи."
End If
Проверка_запущена = False
End Sub
1
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 12:25  [ТС]
Почему то выдает ошибку при обращении к БД через форму, куда я поместил Ваш код, что я накосячил?
Bыpaжeниe пocлe oбнoвлeния, ввeдeннoe в пoлe cвoйcтвa coбытия, вызывaeт oшибкy: Variable not defined.
Пpичинoй вoзникнoвeния этoй oшибки являeтcя нeвoзмoжнocть зaпycкa coбытия вcлeдcтвиe нapyшeния лoгики
oбpaбoтки coбытия. Нaпpимep, ecли cвoйcтвo фopмы "Oткpытиe" имeeт знaчeниe =[Field], вoзникнeт этa oшибкa,
тaк oжидaлocь имя мaкpoca или coбытия, кoтopыe дoлжны быть выпoлнeны пpи aктивaции этoгo coбытия.
0
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 12:30
Наверное, в модуле формы прописана инструкция "Option Explicit"
Тогда надо определить переменную:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub Проверка_связи(ИнструкцияSQL)
Static Проверка_запущена As Boolean
Dim rec As Recordset
If Проверка_запущена Then Exit Sub
On Error Resume Next
Проверка_запущена = True 'Флаг, показывающий, что проверка уже идет, чтобы не запускать одновременно несколько копий процедуры.
Err = 0
Set rec = CurrentDb.OpenRecordset(ИнструкцияSQL)
If Err <> 0 Then
    MsgBox "Нет связи."
End If
Проверка_запущена = False
End Sub
1
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
23.06.2016, 12:33
Цитата Сообщение от Nslava Посмотреть сообщение
Наверное, в модуле формы прописана инструкция "Option Explicit"
С моей точки зрения Option Explicit главная опция редактора ВБА. В конечном счете экономит массу времени и избавляет от множества трудноуловимых ошибок
1
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 12:43  [ТС]
Я так понимаю проблема в указании рекордсета
CurrentDb.OpenRecordset(ИнструкцияSQL)
Но что мне указать в качестве записей если у меня форма с множеством вкладок и на этих вкладках множество разных форм и контролов, любую запись?
А если эта запись недоступна так как с ней работает кто то другой, ошибки не будет?
Кроме того, как выбрать интервал проверок в 10 секунд?
Я не настолько хорошо еще освоил VBA что бы все схватывать на лету, увы.

Добавлено через 5 минут
Цитата Сообщение от Nslava Посмотреть сообщение
Наверное, в модуле формы прописана инструкция "Option Explicit"
Тогда надо определить переменную:
Да, ошибка не появляется, но вышеуказанные вопросы все же остаются.
У функции OpenRecordset достаточно много опций и я не знаю что выбрать.
И да, функция Option Explicit включена.
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
23.06.2016, 12:47
Вы бы код свой показали или нужно угадать?
0
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 12:52
Цитата Сообщение от sysghost Посмотреть сообщение
как выбрать интервал проверок в 10 секунд
В свойствах формы поставить интервал таймера 10 секунд
В событии Таймер прописать например:
Visual Basic
1
2
3
Private Sub Form_Timer()
Проверка_связи "SELECT Моя_таблица.* FROM Моя_таблица"
End Sub
0
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 13:00  [ТС]
Цитата Сообщение от corbis Посмотреть сообщение
Вы бы код свой показали или нужно угадать?
Код чего?

Добавлено через 3 минуты
Цитата Сообщение от Nslava Посмотреть сообщение
В свойствах формы поставить интервал таймера 10 секунд
Ну вот мы и возвращаемся к вопросу, к какой из таблиц обращаться, если я верно понял.
Что бы избежать нестыковок похоже нужно создать отдельную таблицу специально для этой процедуры, верно?
0
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 13:07
Цитата Сообщение от sysghost Посмотреть сообщение
отдельную таблицу специально для этой процедуры, верно?
Можно отдельную, а можно и уже существующую. При открытии набора записей конфликта быть не должно, если только база не с монопольным доступом открыта.
0
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 13:10  [ТС]
Цитата Сообщение от Nslava Посмотреть сообщение
Можно отдельную, а можно и уже существующую. При открытии набора записей конфликта быть не должно, если только база не с монопольным доступом открыта.
А если например в один и тот же момент будет проводиться запись в эту таблицу и считываться данные этой процедурой, то же не должно быть проблем?
Мне просто хотелось бы знать, какие возможные не стыковки могут возникнуть при таком методе проверки.
Нет, доступ не монопольный.
0
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 13:16
Не должно быть проблем. Попробуйте.
1
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 13:31  [ТС]
Цитата Сообщение от Nslava Посмотреть сообщение
Не должно быть проблем. Попробуйте.
Хорошо
Вот такой код например верен, если обращаться к таблице "Сотрудники" и её полю "Фамилия":
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Sub Проверка_связи(ИнструкцияSQL)
Static Проверка_запущена As Boolean
Dim rec As Recordset
If Проверка_запущена Then Exit Sub
On Error Resume Next
Проверка_запущена = True 'Флаг, показывающий, что проверка уже идет, чтобы не запускать одновременно несколько копий процедуры.
Err = 0
Set rec = CurrentDb.OpenRecordset("Сотрудники", dbOpenForwardOnly)
If Err <> 0 Then
    MsgBox "Нет связи."
End If
Проверка_запущена = False
End Sub
 
Private Sub Form_Timer()
Проверка_связи "SELECT [Фамилия].* FROM [Сотрудники]"
End Sub
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12213 / 5056 / 812
Регистрация: 07.08.2010
Сообщений: 14,913
Записей в блоге: 4
23.06.2016, 13:33
видимо
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Sub Проверка_связи(ИнструкцияSQL)
Static Проверка_запущена As Boolean
Dim rec As Recordset
If Проверка_запущена Then Exit Sub
On Error Resume Next
Проверка_запущена = True 'Флаг, показывающий, что проверка уже идет, чтобы не запускать одновременно несколько копий процедуры.
Err = 0
Set rec = CurrentDb.OpenRecordset(ИнструкцияSQL, dbOpenForwardOnly)
If Err <> 0 Then
    MsgBox "Нет связи."
End If
Проверка_запущена = False
End Sub
 
Private Sub Form_Timer()
Проверка_связи "SELECT [Сотрудники].[Фамилия] FROM [Сотрудники]"
 
End Sub
1
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 13:41  [ТС]
Благодарю, я думал в опциях рекордсета нужно указать и к какой таблице конкретно обращаться, вот и ломаю голову к какой и как, возможно тогда и dbOpenForwardOnly будет лишним указывать?
0
 Аватар для Nslava
458 / 75 / 13
Регистрация: 06.03.2015
Сообщений: 148
23.06.2016, 14:30
Лучший ответ Сообщение было отмечено sysghost как решение

Решение

Цитата Сообщение от sysghost Посмотреть сообщение
dbOpenForwardOnly будет лишним указывать
Думаю, не обязательно:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Sub Проверка_связи()
Static Проверка_запущена As Boolean
Dim rec As Recordset
If Проверка_запущена Then Exit Sub
On Error Resume Next
Проверка_запущена = True 'Флаг, показывающий, что проверка уже идет, чтобы не запускать одновременно несколько копий процедуры.
Err = 0
Set rec = CurrentDb.OpenRecordset("Сотрудники")
If Err <> 0 Then
    MsgBox "Нет связи."
End If
Проверка_запущена = False
End Sub
 
Private Sub Form_Timer()
Проверка_связи
End Sub
1
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
23.06.2016, 14:48  [ТС]
Цитата Сообщение от Nslava Посмотреть сообщение
Думаю, не обязательно:
Благодарю, ошибка пока не возникала, разрывы не часты, сработает отпишусь.
0
 Аватар для sysghost
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
30.06.2016, 14:07  [ТС]
В общем не работает код, да же получал окно самого access что доступ к сети прерван а данного сообщения ни разу не появлялось, хотя разрывы были.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2016, 14:07
Помогаю со студенческими работами здесь

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

Восстановление связи с сервером
Есть некий обработчик входных данных на сервер: public class obrabotchik { public static void main(Stringargs){ Server...

Настройка связи клиента с сервером БД
Всем добрый день. Я столкнулся с такой проблеммой в файле tnsnames.ora - нет дескриптора соединений с удаленными БД а связь всеравно есть...

нет связи с сервером аутентификации
Доброго времени суток! Понимаю, проблема в общем- то и не проблема, наверное: При попытке зайти в гугл: планета земля выдаётся...

Настройка связи между клиентом и сервером
Пишу курсовую, тема звучит примерно &quot;Программа для текстовых конференций&quot;, но хочу еще добавить поддержку голосового (возможно еще и видео)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru