C++Builder
Начало
Форум
Помощь
Войти
Регистрация
C++Builder
>
Forum
>
Вопросы программирования
>
Работа с базами данных в C++Builder
>
Как программно проверить связь с сервером БД?
Страниц: [
1
]
Вниз
Печать
Автор
Тема: Как программно проверить связь с сервером БД? (Прочитано 11018 раз)
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Как программно проверить связь с сервером БД?
«
:
17 октября 2008, 12:51:17 »
Здравствуйте!
Может это немного и банальный вопрос, но все же перейду сразу к делу:
Требуется кусочек кода для проверки соединения с сервером БД (БД - MS SQL, соединение через BDE, компонент Builder'а - Database), т. е. как можно проверить есть ли связь с сервером и если ее нет, то выдать сообщение пользователю: либо нет сети, либо сервер занят, либо еще что-нить.
Как это все можно сделать программно?
Буду признателен всем, кто ответит... Заранее спасибо...
Записан
IT-IR
Участник
Сказали спасибо: +72/-22
Offline
Сообщений: 877
Плата за вход-Разум!
Re: Как программно проверить связь с сервером БД?
«
Ответ #1 :
17 октября 2008, 13:16:00 »
на работоспосбность не проверял но примерно так...(пишу по памяти)
Код:
try
{
AnsiString ConnectionString;
std::auto_ptr<TADOConnection> * con (new TADOConnection(this));
ConnectionString = PromptDataSource(reinterpret_cast<unsigned int>(Handle), ConnectionString);
con->ConnectionString = ConnectionString;
con->Active = true;
}
catch(Exception &E)
{
MessageBox( Handle
, ((AnsiString)"бла бла бла\n\n"+excp.Message).c_str()
, Application->Title.c_str()
, MB_APPLMODAL + MB_ICONERROR + MB_OK);
}
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с сервером БД?
«
Ответ #2 :
17 октября 2008, 14:19:49 »
Спасибо огромное!
Но тут речь идет об ADO, а я использую не ADO. Для связи с сервером я использую компонент Database.
Можно в принципе написать так:
Код:
try
{
Database->Connected = true;
}
catch(...)
{
ShowMessage("Not connected !");
}
Но этот кусочек ничего мне не дает... А хотелось бы действительно показать, что нет связи с сервером или нет сети... Как в этом случае сделать?
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с сервером БД?
«
Ответ #3 :
17 октября 2008, 14:22:02 »
Можно еще пинговать сервер... Но как это делается программно, к сожалению, я не знаю...
Записан
IT-IR
Участник
Сказали спасибо: +72/-22
Offline
Сообщений: 877
Плата за вход-Разум!
Re: Как программно проверить связь с сервером БД?
«
Ответ #4 :
17 октября 2008, 17:07:21 »
Код:
try
{
Database->Connected = true;
}
catch(Exception &E)
{
MessageBox( Handle
, ((AnsiString)"бла бла бла\n\n"+excp.Message).c_str()
, Application->Title.c_str()
, MB_APPLMODAL + MB_ICONERROR + MB_OK);
}
а так разве не проканает??? разинцы не должно быть
пинговать программно... хм...
смотри ниже
http://www.cyberguru.ru/cpp-sources/network/iskhodnik-pinga-ping.html
Записан
IVI_7777
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 3
Re: Как программно проверить связь с сервером БД?
«
Ответ #5 :
17 октября 2008, 22:51:29 »
Здрасте!!! А зачем использовать для connecta DBE? Лучше использовать DLL. Наличие сервера проверяется функцией ping()
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с сервером БД?
«
Ответ #6 :
18 октября 2008, 11:40:23 »
Зачем использовать BDE?
1. Нет желания использовать ADO.
2. Плохое преподавание программирования по БД в универе.
По поводу DLL. Можно по подробнее? Что именно за DLL???
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с серверо&
«
Ответ #7 :
18 октября 2008, 11:44:31 »
IT-IR!
Ваш код в принципе проканывает. СПАСИБО! Но есть одно НО:
Я не хочу, чтобы юзер видел ошибки сервера, а лучше показать ему из-за чего именно программа не пашет...
Можно ли как-нить прописать в этом коде кучу ошибок и вытаскивать их оператором CASE?
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с серверо&
«
Ответ #8 :
20 октября 2008, 08:05:16 »
И снова здравствуйте!
Помучившись еще 2 дня, нашел следующее решение для своей задачи (может кому интересно будет):
Код:
char *ip;
int er,po;
ip = "<вписываем IP>";
po = <порт, по которому идет соединение>;
er=tvain(ip,po);// функция проверки соединения
switch (er)
{
case 1: // если соединение прошло успешно
{
try
{
fAuthorisation->ShowModal();// загружаю формочку авторизации
}
catch(...)
{
Application->MessageBox("Не удалось создать форму!","ОШИБКА...",MB_OK+MB_ICONERROR);
}
}; break;
case 2: ShowMessage("Not connected!"); break;// если не удалось соединиться
default: ShowMessage("Unknown Error!"); break;// иная неизвестная ошибка
}
Код:
/*ФУНКЦИЯ ПРОВЕРКИ СОЕДИНЕНИЯ*/
int tvain(char *ip_ad, int p)
{
int res;
WSADATA WSAData;
SOCKET Client = INVALID_SOCKET;
SOCKADDR_IN rmTCP;
if (!WSAStartup(MAKEWORD(1,1), &WSAData))
{
res = 0;
Client = socket (AF_INET,SOCK_STREAM,0);
rmTCP.sin_family = AF_INET;
rmTCP.sin_addr.s_addr = inet_addr(ip_ad);
rmTCP.sin_port = htons (p);
if (connect (Client, (struct sockaddr *)&rmTCP,sizeof(rmTCP)) != 0)
{
Client = INVALID_SOCKET;
res = 2;
}
else
{
res = 1;
}
shutdown(Client,4);
WSACleanup();
}
else
{
res = 3;
};
return res;
Если понадобится, то не забудьте добавить следующее:
#include <stdio.h>
#include <winsock2.h>
Удачного компилирования!
Записан
olegenty
Администратор
Сказали спасибо: +16/-7
Offline
Сообщений: 520
Re: Как программно проверить связь с сервером БД?
«
Ответ #9 :
20 октября 2008, 15:33:28 »
Наличие сервера с указанным IP в сети не значит, что на нём стартовал/не висит сервис СУБД. В результате пинги пройдут, а сервера-то и нет...
Записан
EpoxDe1u
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 85
Re: Как программно проверить связь с сервером БД?
«
Ответ #10 :
18 ноября 2008, 01:04:13 »
Как функцией выше пингонуть Гугл ? какой порт нужно указать ?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
Сказали спасибо: +350/-28
Offline
Сообщений: 2181
Re: Как программно проверить связь с сервером БД?
«
Ответ #11 :
18 ноября 2008, 16:23:43 »
Код:
ping /?
и
Код:
cmd /c ping google.com
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с сервером БД?
«
Ответ #12 :
27 сентября 2009, 18:21:14 »
Цитата: olegenty от 20 октября 2008, 15:33:28
Наличие сервера с указанным IP в сети не значит, что на нём стартовал/не висит сервис СУБД. В результате пинги пройдут, а сервера-то и нет...
Вы правы! Но в данном случае коннект-то идет не только через IP-адрес, но и через номер порта на котором работает сервер. Для моей задачи этой проверки вполне достаточно, потому что наш админ фильтрует доступ к базе именно по этим параметрам.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
Сказали спасибо: +350/-28
Offline
Сообщений: 2181
Re: Как программно проверить связь с сервером БД?
«
Ответ #13 :
28 сентября 2009, 03:22:09 »
Код:
telnet host port
«
Последнее редактирование: 28 сентября 2009, 06:36:35 от Tantos
»
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с серверо&
«
Ответ #14 :
28 сентября 2009, 06:23:03 »
Цитата: Tantos от 28 сентября 2009, 03:22:09
Код:
[b]telnet[/b] host port
Да, есть такое. Но я имел в виду как на C++Builder все это реализовать?!
Мне бы кусочек кода...
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
Сказали спасибо: +350/-28
Offline
Сообщений: 2181
Re: Как программно проверить связь с сервером БД?
«
Ответ #15 :
28 сентября 2009, 06:36:59 »
CreatePocess/ShellExecute + Named Pipes
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с сервером БД?
«
Ответ #16 :
28 сентября 2009, 06:51:55 »
Цитата: Tantos от 28 сентября 2009, 06:36:59
CreatePocess/ShellExecute + Named Pipes
Спасибо! Попробую!
Записан
Gedeon
Ы
Администратор
Сказали спасибо: +6/-0
Offline
Сообщений: 291
Re: Как программно проверить связь с сервером БД?
«
Ответ #17 :
04 ноября 2009, 11:48:13 »
Проще всего проверить связь выполнив какой-то простой запрос. Я предпочитаю спрашивать у сервера дату.
Записан
L.e.o.n.i.D
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 31
Я здесь, я там, я всегда!
Re: Как программно проверить связь с сервером БД?
«
Ответ #18 :
04 ноября 2009, 11:51:15 »
Можно и дату проверить, но если нет сети, то запрос будет пытаться подключиться с серверу и это может немного затянуться...
Записан
Gedeon
Ы
Администратор
Сказали спасибо: +6/-0
Offline
Сообщений: 291
Re: Как программно проверить связь с сервером БД?
«
Ответ #19 :
04 ноября 2009, 12:32:16 »
Ну если с сервером связи нет, то от того что что-то затянется разницы никакой).
Записан
Страниц: [
1
]
Вверх
Печать
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Вопросы программирования
-----------------------------
=> Общие вопросы программирования в C++Builder
=> Программирование с FMX
=> Работа с базами данных в C++Builder
=> Windows API
=> Технологии COM/DCOM, ActiveX
=> Аспекты и идеология профессиональной разработки ПО
=> Компьютерное железо и системное администрирование
=> студенческий городок
-----------------------------
Обсуждение материалов на сайте
-----------------------------
=> Обсуждений статей на сайте
=> Обсуждение материалов из файлового архива
=> Компоненты сторонних разработчиков к С++Builder
-----------------------------
Работа сайта и новости
-----------------------------
=> Ищу/предлагаю работу
=> Новости из мира программирования
=> Новости - события календаря
=> Голосования
=> Компьютерный юмор и приколы
=> Работа сайта
=> Флейм
-----------------------------
FAQ - частозадаваемые вопросы/ответы
-----------------------------
=> FAQ, общие вопросы, посвящённые C++Builder
=> FAQ, вопросы по базам данных
=> FAQ, вопросы по компонентам