>LPARAMETERS tcServer >WAIT WINDOW NOWAIT "Getting databases on " + ALLTRIM(m.tcServer) > >lcCS = [DRIVER=SQL SERVER;SERVER=] + ALLTRIM(m.tcServer) + [;Trusted_Connection=Yes] >* >* try to SQLSTRINGCONNECT() with the connection string >* >lnDispLogin = SQLGETPROP(0,"DispLogin") >SQLSETPROP(0,"DispLogin",3) &&& never >lnHandle = SQLSTRINGCONNECT(m.lcCS,.T.) &&& 2nd parameter as .T., as the single-connection-per user, shared by remote views >SQLSETPROP(0,"DispLogin",lnDispLogin) >IF m.lnHandle < 0 > lcMessage2 = "A connection handle could not be established to the server." > WAIT CLEAR > MESSAGEBOX(m.lcMessage2, 0+16, _screen.caption) > RETURN .F. >ENDIF > >llSuccess = SQLEXEC(m.lnHandle,"sp_helpdb")>0 >IF m.llSuccess > SCAN ALL > ?RTRIM(SQLResult.NAME) > *!*RTRIM(SchemaCursor.Owner) > *!*SchemaCursor.db_size > ENDSCAN > USE IN SELECT("SQLResult") > >ELSE > SQLDISCONNECT(m.lnHandle) > lcMessage2 = "Unable to connect to the server using the specified connection." > WAIT CLEAR > MESSAGEBOX(m.lcMessage2, 0+16, _screen.caption) > RETURN .F. >ENDIF >WAIT CLEAR >>
>>>>* Populate collection with available SQL servers >>>>#DEFINE SQL_HANDLE_ENV 1 >>>>#DEFINE SQL_HANDLE_DBC 2 >>>>#DEFINE SQL_ATTR_ODBC_VERSION 200 >>>>#DEFINE SQL_OV_ODBC3 3 >>>>#DEFINE SQL_SUCCESS 0 >>>>#DEFINE SQL_NEED_DATA 99 >>>>#DEFINE DEFAULT_RESULT_SIZE 2048 >>>>#DEFINE SQL_DRIVER_STR "DRIVER=SQL SERVER"; >>>> >>>>LOCAL hEnv >>>>LOCAL hConn >>>>LOCAL cInString >>>>LOCAL cOutString >>>>LOCAL nLenOutString >>>>LOCAL ARRAY aServerList[1] >>>> >>>>DECLARE SHORT SQLBrowseConnect IN odbc32 ; >>>> INTEGER ConnectionHandle, ; >>>> STRING InConnectionString, ; >>>> INTEGER StringLength1, ; >>>> STRING @ OutConnectionString, ; >>>> INTEGER BufferLength, ; >>>> INTEGER @ StringLength2Ptr >>>> >>>>DECLARE SHORT SQLAllocHandle IN odbc32 ; >>>> INTEGER HandleType, ; >>>> INTEGER InputHandle, ; >>>> INTEGER @ OutputHandlePtr >>>> >>>>DECLARE SHORT SQLFreeHandle IN odbc32 ; >>>> INTEGER HandleType, ; >>>> INTEGER Handle >>>> >>>>DECLARE SHORT SQLSetEnvAttr IN odbc32 ; >>>> INTEGER EnvironmentHandle, ; >>>> INTEGER ATTRIBUTE, ; >>>> INTEGER ValuePtr, ; >>>> INTEGER StringLength >>>> >>>> >>>>hEnv = 0 >>>>hConn = 0 >>>>cInString = SQL_DRIVER_STR >>>>cOutString = SPACE(DEFAULT_RESULT_SIZE) >>>>nLenOutString = 0 >>>> >>>>ZAP IN (m.tcCursor) >>>> >>>>TRY >>>> IF SQLAllocHandle(SQL_HANDLE_ENV, hEnv, @hEnv) == SQL_SUCCESS >>>> IF (SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)) == SQL_SUCCESS >>>> IF SQLAllocHandle(SQL_HANDLE_DBC, hEnv, @hConn) == SQL_SUCCESS >>>> IF (SQLBrowseConnect(hConn, @cInString, LEN(cInString), @cOutString, DEFAULT_RESULT_SIZE, @nLenOutString)) == SQL_NEED_DATA >>>> nCnt = ALINES(aServerList, STREXTRACT(cOutString, '{', '}'), .T., ',') >>>> FOR i = 1 TO nCnt >>>> ?(RTRIM(aServerList[i])) >>>> ENDFOR >>>> ENDIF >>>> ENDIF >>>> ENDIF >>>> ENDIF >>>>CATCH TO oException >>>> MESSAGEBOX(oException.Message, 0+16, _screen.caption) >>>>FINALLY >>>> IF hConn <> 0 >>>> SQLFreeHandle(SQL_HANDLE_DBC, hConn) >>>> ENDIF >>>> IF hEnv <> 0 >>>> SQLFreeHandle(SQL_HANDLE_ENV, hConn) >>>> ENDIF >>>>ENDTRY >>>>>>>>