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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2012, 03:30   #1
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
Радость Ежесекундные обращения к таблице БД

Всем доброй ночи!
Вот у меня такой глупый вопрос
Стоит задача следить за изменением записей в таблице БД.
Я решил воспользоваться таймером, закинул в него запрос на получение нужной мне записи, ну и соответсвенно там и провожу необходимые действия с записью.
Время срабатывания таймера - 500мс. (и тут же возникает другой вопрос, действительно ли мой таймер успеет выполнить запрос к БД чуть менее чем за 500 мс?)
Второй таймер у меня обращается к этой же таблице, но его роль немного другая - собственно производить изменения записей в таблице.
Время тоже - 500мс.
У меня возникает вопрос, возможен ли такой вариант, что в какой-либо момент, два запроса из двух таймеров столкнутся и произойдет конфликт - один попытается забрать запись, а другой в этот же момент попытается ее изменить, ну или что-то в этом роде
Или это я накручиваю себе что-то?
P.S. MySQL.
P.P.S. Так как мое приложение однопоточное, чисто теоретически(насколько я понимаю), это исключено, но все-таки, вдруг есть какие-либо нюансы о которых мне неизвестно.

Последний раз редактировалось Базиля; 22.08.2012 в 03:35.
Базиля вне форума Ответить с цитированием
Старый 22.08.2012, 09:22   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Я решил воспользоваться таймером, закинул в него запрос на получение нужной мне записи, ну и соответсвенно там и провожу необходимые действия с записью.
Время срабатывания таймера - 500мс. (и тут же возникает другой вопрос, действительно ли мой таймер успеет выполнить запрос к БД чуть менее чем за 500 мс?)

Второй таймер у меня обращается к этой же таблице, но его роль немного другая - собственно производить изменения записей в таблице.
Время тоже - 500мс.
А почему бы не сделать все в одном таймере?
Цитата:
Время тоже - 500мс.
сначала изменил (если надо)
потом прочитал что
можно и наоборот (прочитал, потом изменил).
И никаких проблем с синхронностью.
Цитата:
два запроса из двух таймеров столкнутся и произойдет конфликт
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.08.2012, 00:42   #3
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Спасибо.
Что - то я неудачный пример привел со вторым таймером.
Конечно же в данном случае надо было бы пользоваться 1 таймером
А вот как например быть в том случае, если добавление записи происходит по нажатии на кнопку. Есть возможность получения конфликта?
Если по прожнему учитывать, что 1 таймер обращается к таблице бд.

Последний раз редактировалось Базиля; 23.08.2012 в 00:47.
Базиля вне форума Ответить с цитированием
Старый 23.08.2012, 01:09   #4
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Я думаю, что конфликта не должно быть.
Delphi_ProGer вне форума Ответить с цитированием
Старый 23.08.2012, 02:07   #5
alekola
gcc 4.7.1 Opensuse
Пользователь
 
Аватар для alekola
 
Регистрация: 07.03.2012
Сообщений: 22
По умолчанию

Конфликта не будет, если спать спокойно все равно не получается можно буллеву переменную переключать во время считывания и возвращать после. А перед нажатием на запись поставить проверку если false то sleep и goto к началу если
alekola вне форума Ответить с цитированием
Старый 23.08.2012, 02:07   #6
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

1) а зачем так быстро? 5-10 сек думаю бы хватило
2) Для таймера надо объявить несколько переменных которые отвечают за состояние "запроса". То есть если запрос еще выполняется, то процедура таймера завершается через exit() и запросов не выполняет.
Lesha вне форума Ответить с цитированием
Старый 24.08.2012, 03:36   #7
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Delphi_ProGer
alekola
Lesha
Спасибо за отклик!
Ваши мысли я уловил.
Еще раз благодарю

Цитата:
Сообщение от Lesha Посмотреть сообщение
1) а зачем так быстро? 5-10 сек думаю бы хватило
Ну конечно же я выставил промежуток не от балды, так сказать, на то есть свои потребности
Базиля вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа обращения слова modm C++ Builder 7 12.06.2012 12:14
Частые обращения к БД Newpitbull SQL, базы данных 5 14.02.2012 20:00
мониторинг обращения к папке matue Общие вопросы Delphi 2 20.07.2011 10:03
Параллельные обращения к mysql sunnmas БД в Delphi 1 12.10.2009 22:07
Слияние шаблона с данными из таблице, и как подсичтать значение количества полей в таблице n4ela Microsoft Office Access 3 07.03.2009 12:04