 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 1 樓
|
發表於: 星期一 六月 09, 2008 1:44 pm 文章主題: [日誌] SQL Server 開發(僅供自覽) |
|
|
這是開發 SQL Server 版 (與 VFP Free Table 版合用) 過程中的過渡程式碼,畢竟是花了時間,現在沒用上也許以後還會用上,所以留此做為筆記。 _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 2 樓
|
發表於: 星期一 六月 09, 2008 1:45 pm 文章主題: |
|
|
FUNCTION F1_GetAvailableServersList(L_cArrayName AS String)
* 功能:擷取可用的 SQL Server 伺服器名稱清單
* -------------------------------------------------------------------------- *
* 參數名稱 型態 說明
* -------------- ---- ------------------------------------------------------
* Input:
* L_cArrayName C 1.陣列名稱。代表要接收可用的 SQL Server 伺服器名稱。
* 2.此陣列變數需事前宣告。
* 3.本函數執行完畢後會將可用的 SQL Server 伺服器名稱清單
* 存入 L_cArrayName 所代表的 n × 1 陣列中。
* -------------------------------------------------------------------------- *
LOCAL W1_iEnvHandle AS Integer, W1_iConnectionHandle AS Integer, W1_cOutString AS String, W1_iLenOutString AS Integer
LOCAL W1_iSUB_A AS Integer, W1_iSUB_B AS Integer, W1_cInString AS String, W1_iAscan AS Integer, W1_cCurServerName AS String
LOCAL ARRAY W1_aInString(2,1) AS String, W1_aOutString(1) AS String
DIMENSION &L_cArrayName.(1)
STORE "" TO (L_cArrayName+"(1)")
#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
DECLARE SHORT SQLAllocHandle IN ODBC32.DLL ;
INTEGER HandleType, ;
INTEGER InputHandle, ;
INTEGER @OutputHandlePtr
DECLARE SHORT SQLSetEnvAttr IN ODBC32.DLL ;
INTEGER EnvironmentHandle, ;
INTEGER Attribute, ;
INTEGER ValuePtr, ;
INTEGER StringLength
DECLARE SHORT SQLBrowseConnect IN ODBC32.DLL ;
INTEGER ConnectionHandle, ;
STRING InConnectionString, ;
INTEGER StringLength, ;
STRING @OutConnectionString, ;
INTEGER BufferLength, ;
INTEGER @StringLength2Ptr
DECLARE SHORT SQLFreeHandle IN ODBC32.DLL ;
INTEGER HandleType, ;
INTEGER Handle
W1_iEnvHandle = 0
W1_iConnectionHandle = 0
W1_aInString(1,1) = "DRIVER={SQL Native Client};"
W1_aInString(2,1) = "DRIVER={SQL Server};"
W1_cComputerName = ALLTRIM(GETENV("COMPUTERNAME"))
IF EMPTY(W1_cComputerName)
W1_cComputerName = ALLTRIM(STREXTRACT("#"+ID()+"#","#","#",1))
ENDIF
WAIT WINDOW "尋找可用的 SQL 伺服器 ... 請稍待" NOWAIT
TRY
IF SQLAllocHandle(SQL_HANDLE_ENV, W1_iEnvHandle, @W1_iEnvHandle) = SQL_SUCCESS
IF SQLSetEnvAttr(W1_iEnvHandle, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0) = SQL_SUCCESS
IF SQLAllocHandle(SQL_HANDLE_DBC, W1_iEnvHandle, @W1_iConnectionHandle) = SQL_SUCCESS
FOR W1_iSUB_A = 1 TO ALEN(W1_aInString,1)
W1_cInString = W1_aInString(W1_iSUB_A,1)
W1_cOutString = SPACE(DEFAULT_RESULT_SIZE)
W1_iLenOutString = 0
IF SQLBrowseConnect(W1_iConnectionHandle, @W1_cInString, LEN(W1_cInString), @W1_cOutString, DEFAULT_RESULT_SIZE, @W1_iLenOutString) = SQL_NEED_DATA
IF ALINES(W1_aOutString, STREXTRACT(W1_cOutString, '{', '}'), 1+4+8, ',') > 0
FOR W1_iSUB_B = 1 TO ALEN(W1_aOutString,1)
W1_cCurServerName = ALLTRIM(W1_aOutString(W1_iSUB_B))
IF UPPER(W1_cCurServerName) = UPPER("(local)") && 用本機電腦名稱取代
W1_cCurServerName = W1_cComputerName
ENDIF
W1_iAscan = ASCAN(&L_cArrayName.,W1_cCurServerName,-1,-1,-1,15)
IF W1_iAscan <= 0
IF !EMPTY(EVAL(L_cArrayName+"(1)"))
DIMENSION &L_cArrayName.(ALEN(&L_cArrayName.)+1)
ENDIF
STORE W1_cCurServerName TO (L_cArrayName+"("+LTRIM(STR(ALEN(&L_cArrayName.)))+")")
ENDIF
ENDFOR
ENDIF
ENDIF
ENDFOR
=ASORT(&L_cArrayName.)
ENDIF
ENDIF
ENDIF
CATCH TO oException
* ignore error
FINALLY
IF W1_iConnectionHandle != 0
SQLFreeHandle(SQL_HANDLE_DBC, W1_iConnectionHandle)
ENDIF
IF W1_iEnvHandle != 0
SQLFreeHandle(SQL_HANDLE_ENV, W1_iEnvHandle)
ENDIF
ENDTRY
WAIT CLEAR
CLEAR DLLS "SQLAllocHandle" ,"SQLSetEnvAttr" ,"SQLBrowseConnect" ,"SQLFreeHandle"
RETURN .T. _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 3 樓
|
發表於: 星期一 六月 09, 2008 1:45 pm 文章主題: |
|
|
FUNCTION F1_GetPhyComputerNameByRunThis
* 功能:取得執行本函數所在的電腦名稱
* ------------------------------------------------- *
* 參數名稱 型態 說明
* ----------------- ---- --------------------------
* OutPut:
* L_cComputerName C 執行本程式的實體電腦名稱。
* ------------------------------------------------- *
LOCAL L_cComputerName AS String
LOCAL W1_cDriver AS String, W1_cComputerName AS String
LOCAL ARRAY W1_aAdir(1)
L_cComputerName = ""
W1_cDriver = ALLTRIM(JUSTDRIVE(FULLPATH(CURDIR())))
IF !EMPTY(W1_cDriver)
* ---------------------------------------- *
* ComputerNameByRunThis.TXT 的內容範例:
* 0 1 2 3 4
* 1234567890123456789012345678901234567890
* ----------------------------------------
* 本機名稱 O:
* 遠端名稱 \\Remote02\D
* 資源類型 Disk
* 狀態 OK
* # 開啟 35
* # 連線 1
* 命令執行成功。
* ---------------------------------------- *
DECLARE INTEGER ShellExecute IN shell32;
INTEGER hwnd,;
STRING lpOperation,;
STRING lpFile,;
STRING lpParameters,;
STRING lpDirectory,;
INTEGER nShowCmd
=ShellExecute(0,"Open",GETENV("COMSPEC"),"/c NET.EXE USE "+W1_cDriver+" > ComputerNameByRunThis.TXT","",0)
=INKEY(1) && 延遲時間以供檔案產生
CLEAR DLLS "ShellExecute"
IF ADIR(W1_aAdir,"ComputerNameByRunThis.TXT") > 0
L_cComputerName = ALLTRIM(STREXTRACT(MLINE(FILETOSTR("ComputerNameByRunThis.TXT"),2),"\\","\"))
DELETE FILE ComputerNameByRunThis.TXT
ENDIF
ENDIF
IF EMPTY(L_cComputerName)
W1_cComputerName = ALLTRIM(GETENV("COMPUTERNAME"))
IF EMPTY(W1_cComputerName)
W1_cComputerName = ALLTRIM(STREXTRACT("#"+ID()+"#","#","#",1))
ENDIF
L_cComputerName = W1_cComputerName
ENDIF
RETURN UPPER(L_cComputerName) _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|