Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для DPS
43 / 41 / 20
Регистрация: 12.11.2011
Сообщений: 188
RAD XE4+

Timer - проверка подключения к БД ADOConnection

11.06.2019, 17:43. Показов 2444. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день!
Прошу помочь)


На форме имеются:
  • ADOConnection
  • Panel
  • Timer
  • Memo

имеется БД, которую необходимо опрашивать с интервалом в 1 сек,- если база доступна, Panel подкрашивается в зеленый, при недоступности - в красный цвет. Дальше уже выполнять SQL-запрос.
Подскажите, это корректная проверка доступности\отображения состояния БД?
Еще один вопрос:
Таймер приостанавливает свое действие на момент выполнения функции? Интервал таймера 1000мс, при отсутствии подключения программа будет нормально себя вести ?)Экспериментальным путем пробовал несколько раз останавливать/запускать службу SQLServer, вроде бы ничего не висло,- интерфейс конечно, морозится, но потом развисает.
Что-то подсказывает, что это дилетантский подход) Или необходимо задействовать thread?
Тайминги на ADOConnection - commandtimeout и connectiontimeout = 1 (это, кстати, сек или мс?)


//запись логов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//---------------------------------------------------------------------------
const String LOG_FILE_NAME                  =   "Log_";
 
 
bool Log_File_Write(const String &str_for_write)
{
    try
    {
        TStringList *SL_Log     = new TStringList();
 
        try
        {
            String name_log_file    =   LOG_FILE_NAME   +
                                        Now().FormatString("yyyy_mm_dd")    +
                                        ".log";
 
            if(FileExists(name_log_file))
            {
                SL_Log->LoadFromFile(name_log_file);
            }
 
            SL_Log->Add(DateTimeToStr(Now())                + "\t" + str_for_write);
            Form3->Memo1->Lines->Add(DateTimeToStr(Now())   + "\t" + str_for_write);
 
            SL_Log->SaveToFile(name_log_file);
        }
        __finally
        {
            delete SL_Log;
        }
    }
    catch(...)
    {
        return false;
    }
 
    return true;
}
//---------------------------------------------------------------------------

//Функция запроса к БД:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//---------------------------------------------------------------------------
bool TForm3::Connection_with_Database()
{
    ADOConnection1->Connected   =   false;
 
    ADOConnection1->ConnectionString    =
    "Provider=SQLOLEDB.1;"
    "Password=Intellect_default_DB_4;Persist Security Info=True;User ID=sa;"
    "Initial Catalog=123456;Data Source="
    "SRV\\SQLEXPRESS2014";
 
    try
    {
        ADOConnection1->Connected   =   true;
    }
    catch(...)
    {
        ADOConnection1->Connected   =   false;
        return false;
    }
 
    return true;
}
//---------------------------------------------------------------------------
Сам таймер:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//---------------------------------------------------------------------------
void __fastcall TForm3::Timer1Timer(TObject *Sender)
{
    Log_File_Write("Таймер - начало");
 
    if(!Connection_with_Database())
    {
        Panel1->Color   =   clRed;
    }
    else
    {
        Panel1->Color   =   clGreen;
    }
 
    Log_File_Write("Таймер - конец");
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2019, 17:43
Ответы с готовыми решениями:

Изменение подключения ADOConnection програмно
Знающие люди, поскажите: Имеется объект ADOConnection (создан не программо, а через палитру компонент ADO). Соединение не установлено....

Изменить строку подключения у ADOConnection
Всем доброго время суток. Хочу программно изменить строку подключения ADOConnection. Вот мой код: with DataModule2.ADOConnection1 do ...

Проверка пути AdoConnection
Всем привет:) задача в следующем: соединяюсь с базой данных указывая путь в ADOConnection.connectionstring через OpenDialog, подскажите...

3
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.06.2019, 18:12
Цитата Сообщение от DPS Посмотреть сообщение
Подскажите, это корректная проверка доступности\отображения состояния БД?
По таймеру лучше не разрывать коннект, а посылать какоё-нибудь простой запрос, типа select 1.
В случае ошибки - закрывать. И при следующем таймере попытаться открыть
Что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ool TForm3::Connection_with_Database()
{
 
    try
    {
if (ADOConnection1->Connected)
    ADOConnection1->Execute("select 1");
else
{
    ADOConnection1->ConnectionString    =
    "Provider=SQLOLEDB.1;"
    "Password=Intellect_default_DB_4;Persist Security Info=True;User ID=sa;"
    "Initial Catalog=123456;Data Source="
    "SRV\\SQLEXPRESS2014";
   ADOConnection1->Connected   =   true;
}
   
 return true;
     
    }
    catch(...)
    {
        ADOConnection1->Connected   =   false;
        return false;
    }
 
   
}
1
 Аватар для DPS
43 / 41 / 20
Регистрация: 12.11.2011
Сообщений: 188
11.06.2019, 22:46  [ТС]
Спасибо)
Так в моем варианте нет необходимости использования потоков???
Мне непонятна ситуация:
интервал таймера 1000мс
каждую секунду он вызывает функцию соединения с БД. При доступности базы соединение выполняется очень быстро, а если база недоступна, проходит много времени, прежде чем выполняется проверка (т.е. > 1 сек). Так вот вопрос - таймер в таком случае "заморажвается" на некоторое время, пока вызываемая функция не завершится???
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.06.2019, 23:00
Цитата Сообщение от DPS Посмотреть сообщение
Так в моем варианте нет необходимости использования потоков???
Мне непонятна ситуация:
интервал таймера 1000мс
каждую секунду он вызывает функцию соединения с БД. При доступности базы соединение выполняется очень быстро, а если база недоступна, проходит много времени, прежде чем выполняется проверка (т.е. > 1 сек). Так вот вопрос - таймер в таком случае "заморажвается" на некоторое время, пока вызываемая функция не завершится???
Особой необходимости нет.
Да, замораживается, но на самом деле эти дисконнекты - довольно редкая штука. Здесь лучше, пока коннект есть проверять раз в секунду, когда нет - пореже.
Я обычно ещё перед тем как послать запрос отправлял "select 1" и , если он давал ошибку, переоткрывал коннект.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2019, 23:00
Помогаю со студенческими работами здесь

Проверка имени пользователя в ADOConnection
Всем доброго времени суток. Смысл задачи - доступ к базе через ADOConnection определенным пользователям (по списку логинов). Нужно сделать...

ADOConnection, не пройдена проверка подлинности
имеется следующий код. база находится в папке с программой. procedure TForm1.FormCreate(Sender: TObject); begin ...

Проверка наличия подключенной БД, с помощью ADOConnection
Искал по интернету, нигде ничего толкового не нашел. Если кто знает, помогите Plz. БД подключена с помощью ADOConnection. Суть в том,...

Проверка подключения
У нас не очень хорошая связь и регулярно бывают сбои с подключением к Интернету, но странное дело: два компа на работе и дома, на обоих XP...

Проверка подключения к БД
Доброго времени суток! Подскажите пожалуйста, как возможно осуществить проверку подключения к БД в режиме реального времени? Поясню....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru