Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать, запущен ли FireBird 
V
    Опции темы
GrigoriyFomin
Дата 4.1.2011, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 16.11.2010

Репутация: нет
Всего: нет



Как корректно узнать - запущен ли сервис FireBird? Delphi XE + IBDAC
PM MAIL   Вверх
Данкинг
Дата 4.1.2011, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Отловить ошибку подключения IBDatabase. smile

Добавлено через 1 минуту и 11 секунд
А, IBDAC какой-то, ну, всё равно же там есть момент подключения к БД.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
GrigoriyFomin
Дата 4.1.2011, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 16.11.2010

Репутация: нет
Всего: нет



Ошибка может генериться от разных причин, а мне нужно отловить именно отсутствие запущенного сервиса
PM MAIL   Вверх
Keeper89
Дата 4.1.2011, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



firebirdfaq.org/faq123/


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 4.1.2011, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(GrigoriyFomin @  4.1.2011,  01:38 Найти цитируемый пост)
Ошибка может генериться от разных причин, а мне нужно отловить именно отсутствие запущенного сервиса 

Получай список сервисов и ищи среди них fbserver.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
GrigoriyFomin
Дата 4.1.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 16.11.2010

Репутация: нет
Всего: нет



Спасибо ответившим, работает сейчас так

Код


uses Tlhelp32

function IsFireBirdRunning: boolean;
const
  PROCESS_TERMINATE = $0001;
var
  Co: BOOL;
  FS: THandle;
  FP: TProcessEntry32;
  s:  string;
begin
  FS := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FP.dwSize := Sizeof(FP);
  Co := Process32First(FS, FP);
  while integer(Co) <> 0 do
  begin
    s := s + FP.szExeFile + #13;
    Co := Process32Next(FS, FP);
  end;
  CloseHandle(FS);
  if pos('fbserver', s) > 0 then result := true
  else result := false;

end;




PM MAIL   Вверх
Akella
Дата 4.1.2011, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Данкинг @  4.1.2011,  02:48 Найти цитируемый пост)
Получай список сервисов и ищи среди них fbserver. 

как у удалённой машины запросить список сервисов? а если это линукс или др. ОС?

Добавлено @ 13:31
Вот ещё код by Alex
потребуются компоненты FIB, но можно попробовать переделать на др.
Код

function TDM.TestConnectServerFB(aDB: TpFIBDatabase): Boolean;
// Проверка возможности соединения с БД
const
  cnstProtokolName: array [TProtocol] of string = ('TCP', 'SPX', 'NamedPipe', 'Local');

   constDeffVerFbClient1                = 'Версия клиентской библиотеки отличается от версии сервера FireBird.';
   constDeffVerFbClient2                = 'Версия клиента(';
   constDeffVerFbClient3                = 'Версия сервера: "';
   constDeffVerFbClient4                = 'Нажмите "ДА" для продолжения работы';
   constDeffVerFbClient5                = 'Нажмите "НЕТ" для отмены';
   constServerName                      = 'Имя сервера: ';
   constProtoTCP                        = 'Протокол TCP';


var
  h: Cardinal;
  buffer: array [0..MAX_PATH] of Char;
  VerClient: string;
  VerServer: string;
  FI : TFileInfo;
begin
  Result:= False;

  //нужно ли проверять версию FB-сервера и клиента(fbClient.dll)
   if not bCheckServer then begin
     Result := true;
     exit;
   end;

  h:= LoadLibrary(PAnsiChar(aDB.LibraryName));

  if h = 0 then
    begin
      Showmessage(constClientDllFirebird + aDB.LibraryName + constNotFoundClientDllFirebird);
      Exit;
    end;

  GetModuleFileName(h, buffer, MAX_PATH);
  FreeLibrary(h);

  FI := fmMain.xGetExeFileInfo(buffer);
  VerClient := fi.FileVersion;

  with GetConnectServerInf(aDB.DBName) do begin
    with TpFIBServerProperties.Create(nil) do try
      LibraryName:= buffer;
      LoginPrompt:= False;
      Params.Add('user_name=' + aDB.ConnectParams.UserName);
      Params.Add('password='  + aDB.ConnectParams.Password);
      ServerName := NameServer;
      Protocol   := ConnectProtocol;
      try
        Active:= True;
      except
        on e: EFIBError do
        begin
          case e.IBErrorCode of
            isc_network_error: begin
              log(constFirebirdOnCompNotFound1 + ServerName + constFirebirdOnCompNotFound2);
              ShowMessage(constFirebirdOnCompNotFound1 + ServerName + constFirebirdOnCompNotFound2);
              Exit;
            end;
            isc_login : begin
              log(constInvalidLoginPass + Params.Text);
              ShowMessage(constInvalidLoginPass + Params.Text);
              Exit;
            end;
          else//case
            begin
              log('Ошибка "'+IntToStr(e.IBErrorCode)+'" при попытке подключиться к серверу базы данных');
              ShowMessage(constError + ' "' + IntToStr(e.IBErrorCode) + constWhileConnectingToServer);
              raise;
            end;//case-else
          end;//case
        end;
      else
        raise;
      end;
      try
        FetchVersionInfo;
        VerServer:= VersionInfo.ServerVersion;
      finally
        Active:= False;
      end;
    finally
      Free;
    end;
  end;

  if pos(VerClient, VerServer) = 0 then
  begin
    case MessageBox(Application.ActiveFormHandle, PAnsiChar(constDeffVerFbClient1 + #13 +
                                                            constDeffVerFbClient2 + buffer +'): "' + VerClient + '"' + #13 +
                                                            constDeffVerFbClient3 + VerServer + '"' + #13 +
                                                            #13+
                                                            constDeffVerFbClient4 + #13 +
                                                            constDeffVerFbClient5 + #13), constMsgAttention, MB_ICONWARNING or MB_YESNO) of
     ID_YES: Result := True;
     ID_NO : exit;
    end;//case
  end;//if

  Result:= True;
end;





function TDM.GetConnectServerInf(const DBName:string): tConnectServerInf;
// Получение из строки соединения БД имени сервера, на котором
// лежит БД и тип протокола соединения
var Idx1, Idx2: Integer;
    Temp: string;
begin
  Result.ConnectProtocol:= Local;
  Result.NameServer:= 'localhost';

  if Pos('\\', DBName) = 1 then
    begin
      Temp := Copy(DBName, 3, Length(DBName));
      Idx1 := PosCh('\', Temp);
      if Idx1 <> 0 then
        begin
          Result.ConnectProtocol:= NamedPipe;
          Result.NameServer:= Copy(Temp, 1, Idx1 - 1);
        end;
    end
  else
    begin
      Idx1 := PosCh(':', DBName);
      if (Idx1 <> 0) and (Idx1 <> 2) then
        begin
          Idx2 := Pos('@', DBName);
          if Idx2 = 0 then
            begin
              Result.NameServer:= copy(DBName, 1, Idx1 - 1);
              log(constServerName + Result.NameServer);
              Result.ConnectProtocol:= TCP;
              log(constProtoTCP);
            end
          else
            begin
              Result.NameServer:= copy(DBName, 1, Idx2 - 1);
              log(constServerName + Result.NameServer);
              Result.ConnectProtocol:= SPX;
              log(constProtoTCP);
            end;
        end;
    end;
end;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.