VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

[日誌] SQL Server 開發(僅供自覽)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
朱育興



註冊時間: 2003-08-25
文章: 661
來自: 台中市大里區

第 1 樓

發表發表於: 星期一 六月 09, 2008 1:44 pm    文章主題: [日誌] SQL Server 開發(僅供自覽) 引言回覆

這是開發 SQL Server 版 (與 VFP Free Table 版合用) 過程中的過渡程式碼,畢竟是花了時間,現在沒用上也許以後還會用上,所以留此做為筆記。
_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
朱育興



註冊時間: 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
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
朱育興



註冊時間: 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
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作