Игорь Столяров писал(а):Да, спасибо SQLDriverConnect (или SQLConnect) - это видимо то, что нужно.
Начал разбираться, но там куча предустановленных в заголовках C констант и флагов - не подскажите, есть ли в природе эти заголовки для Clarion (или хотя бы для C) ? 

 
Код: Выделить всё
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)
 
Код: Выделить всё
    SQLAllocHandle(SHORT HandleType,LONG InputHandle,*LONG OutputHandle),SHORT,RAW,PASCAL,NAME('SQLAllocHandle'),PROC!,DLL(1)
SELF.henv и SELF.hdbc понятно из прототипа - LONG
Код: Выделить всё
 ! === Allocate environment handle
 SELF.retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, SELF.henv)
 
Код: Выделить всё
 ! === Allocate connection handle
 SELF.retcode = SQLAllocHandle(SQL_HANDLE_DBC, SELF.henv, SELF.hdbc)
class_W - любое открытое окно, можно воспользоваться и 0
SELF.ConnectString.S - CSTRING - собслвенно строка соединения
SELF.ConnectString.Pos - LEN(SELF.ConnectString.S)
SELF.szOutConn - CSTRING(256) ! output
255 - LEN(SELF.szOutConn)
SELF.cbOutConn - SHORT
ну а последний параметр на усмотрение, надо тебе штатное логин окно DRIVERа при неправильных параметрах соединения или нет
Код: Выделить всё
 SELF.retCode = SQLDriverConnect(SELF.hdbc,class_W{PROP:Handle},SELF.ConnectString.S,|
        SELF.ConnectString.Pos,SELF.szOutConn, |
    255, SELF.cbOutConn, CHOOSE(NOT DefaultLogon,0,SQL_DRIVER_COMPLETE_REQUIRED))
SELF.retCode после каждого вызова проверяй на ошибку:
Код: Выделить всё
 IF ~(SELF.RetCode = SQL_SUCCESS OR SELF.RetCode = SQL_SUCCESS_WITH_INFO)
   ! ошибка
 END