ClarionHUB это конечно авторитетное издание ... но мы уже как-то обсуждали, что для проверки
соединения, лучше не делать тупо фиктивный запрос, а воспользоваться встроенными функциями ODBC.
Код: Выделить всё
   ! --- GlobalMap
   Module('ODBC32')
     SQLDriverConnect(LONG        hdbc,             |
                      UNSIGNED    hwnd,             |
                      *CSTRING    szConnStrIn,      |
                      SHORT       cbConnStrIn,      |
                      *CSTRING    szConnStrOut,     |
                      SHORT       cbConnStrOutMax,  |
                      *SHORT      pcbConnStrOut,    |
                      USHORT      fDriverCompletion),SHORT,RAW,PASCAL,NAME('SQLDRIVERCONNECT'),PROC!,DLL(1)
     SQLDisconnect(LONG hdbc),SHORT,RAW,PASCAL,NAME('SQLDISCONNECT'),PROC!,DLL(1)
     SQLConnect(LONG        hdbc,                   |
                *CSTRING    ServerName_,            |
                SHORT       LenServerName_,         |
                *CSTRING    UserName_,              |
                SHORT       LenUserName_,           |
                *CSTRING    Authentication_,        |
                SHORT       LenAuthentication_),SHORT,RAW,PASCAL,NAME('SQLCONNECT'),PROC!,DLL(1)
     SQLAllocHandle(SHORT HandleType,LONG InputHandle,*LONG OutputHandle),SHORT,RAW,PASCAL,NAME('SQLAllocHandle'),PROC!,DLL(1)
     SQLSetEnvAttr(LONG EnvironmentHandle,          |
           LONG Attribute, LONG Value,              |
           LONG StringLength),SHORT,RAW,PASCAL,NAME('SQLSetEnvAttr'),PROC!,DLL(1)
     SQLFreeHandle(SHORT HandleType, LONG Handle),SHORT,RAW,PASCAL,NAME('SQLFreeHandle'),PROC!,DLL(1)
   end
   
   ! --- GLOBAL DATA (ODBC)
   
SQL_HANDLE_ENV            EQUATE(1) 
SQL_HANDLE_DBC            EQUATE(2) 
SQL_NULL_HANDLE           EQUATE(0)        
SQL_DRIVER_COMPLETE_REQUIRED    EQUATE(3) 
SQL_ERROR               EQUATE(-1) 
SQL_SUCCESS             EQUATE(0) 
SQL_SUCCESS_WITH_INFO   EQUATE(1)
SQL_ATTR_ODBC_VERSION   EQUATE(200)
SQL_OV_ODBC3            EQUATE(3)
SQL_IS_INTEGER          EQUATE(-6)
   
   ! --- Проверка подключения
   
CheckSQLConnect      PROCEDURE
Loc:RetValue         BYTE                                  !
Loc:RetCode          LONG                                  !
Loc:S1               CSTRING(255)                          !
Loc:S2               CSTRING(1025)                         !
Loc:Short            SHORT                                 !
Loc:Henv             LONG                                  !
Loc:Hdbc             LONG                                  !
Loc:Window           &WINDOW                               !
  CODE
  Loc:RetValue = False   ! Предполагаем худшее
  Loc:Henv = 0
  Loc:Hdbc = 0
  ! === Allocate environment handle
  Loc:RetCode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,Loc:Henv)
  ! === Set the ODBC version environment attribute
  Loc:RetCode = SQLSetEnvAttr(Loc:Henv,SQL_ATTR_ODBC_VERSION,SQL_OV_ODBC3,SQL_IS_INTEGER)
  ! === Allocate connection handle
  Loc:RetCode = SQLAllocHandle(SQL_HANDLE_DBC,Loc:Henv,Loc:Hdbc)
  !Loc:S1 = 'Driver={{SQL Server};Server=90.0.0.2;Database=K_B;UID=sa;PWD=1;'
  Loc:S1 = 'Driver={{SQL Server};Server=' & Clip(Left(Setup.DBServer))   & |
           ';Database='                   & Clip(Left(Setup.DBName))     & |
           ';UID='                        & Clip(Left(Setup.DBUser))     & |
           ';PWD='                        & Clip(Left(Setup.DBPassword)) & |
           ';'
  Loc:RetCode = SQLDriverConnect(Loc:Hdbc,              |
                              Loc:Window{PROP:Handle},  |
                              Loc:S1,                   |
                              Len(Loc:S1),              |
                              Loc:S2,                   |
                              1024,                     |
                              Loc:Short,                |
                              SQL_DRIVER_COMPLETE_REQUIRED)
  ! SQL сервер жив !
  If ((Loc:RetCode = SQL_SUCCESS) Or (Loc:RetCode = SQL_SUCCESS_WITH_INFO)) then Loc:RetValue = True.
  RetCode# = SQLDisconnect(Loc:Hdbc)
  If Loc:Hdbc then Loc:RetCode = SQLFreeHandle(SQL_HANDLE_DBC,Loc:Hdbc); Loc:Hdbc = 0.
  If Loc:Henv then Loc:RetCode = SQLFreeHandle(SQL_HANDLE_ENV,Loc:Henv); Loc:Henv = 0.
  Return(Loc:RetValue)