Игорь Столяров писал(а):Да, спасибо 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