當前位置:首頁 > 科技 > 正文

VFP與SQL Server的連接

VFP與SQLServer的連接 (2007-03-13 00:59:43) VFP與SQL Server的連接(1)
----建立ODBC數據源(DSN)                       

  摘要:本文主要講解VFP到SQL Server的連接以及連接中應該注意的問題和錯誤的解決方法
  這裡所指的連接關系(connection)指的是當VFP通過界面卡、SQL Server 的網絡架構、 傳輸媒介、通訊協議等複雜的作業組合後而連線到SQL Server的流程總稱。
  安全措施
  相信大家都了解數據的機密性和重要性,所以您最好采取一些安全防護措施來保護它不被非法存取和蓄意破壞。事前做好萬全的準備總比事後的懊悔好。
  至于設定和維護資料的安全性是系統管理員(Administrator)的職責。
  假如您的應用程序是C/S結構,那麼程序的使用者都必須先通過身份驗證以獲得存取資料的權限,亦即使用者可利用在SQL中設定的使用者名稱和密碼,或直接用Windows NT 目錄資料庫中的使用者名稱和密碼來存取SQL資料庫。(這種做法請與SQL系統管理員聯系)。
  輸入用戶名稱和密碼的一般做法
  假如您的程序需要輸入用戶名稱和密碼的話,一般的做法是在屏幕上顯示一個對話框讓用戶輸入。在VFP中有一個TEXTBox 控件非常适合來擔任這個工作,它有一個passchar屬性,可以讓開發者設計要以什麼字符來遮沒(通常是*,關于加密的程序以及算法可以參考VFP編程技巧)用戶輸入的密碼。
  建立ODBC數據源(DSN)
  ODBC數據源(Data Source Name : DSN)即是ODBC驅動程序的唯一識别名稱,DSN可以包含空白的字符,如 “FAVOR CAI” 由控制面闆的32BIt Odbc 圖标,可以進入ODBC數據管理器,如果沒有 32BIt Odbc 圖标,請先安裝ODBC驅動程序。
  用戶DSN是用戶用來存貯與數據庫的連接信息,用戶數據源隻對用戶可見而且隻能用于當前機器上。
  系統DSN是用來存貯與數據庫的連接信息,當前計算機上的所有用戶都可以使用系統數據源。
  文件DSN是用來存貯與數據庫的連接信息,可以由安裝了相同驅動程序的用戶共享。
  跟蹤允許創建調用ODBC驅動程序的日志,以供技術人員查看或輔助調試應用程序。
  雙擊[添加(D)]按鈕,可以自行添加ODBC DSN,在彈出的“選擇新數據源”對話框中,選擇SQL Server 驅動程序。
  接下來,讓我們來看看DSN的相關設定,在ODBC SQL Server 設定對話框提供了下列的設定選項:
  1、Date Source Name(DSN):每一個ODBC驅動程序都有一個唯一的識别名稱。
  2、Description(說明):此說明資料來源,可省略不輸入。
  3、Server (服務器): 即SQL Server 所在的服務器名稱,若SQL Server 在本機上執行的話,便可使用[Local ]預設值。
  4、 Network Address:(網絡地址):指SQL Server 資料庫管理系統(DBMS)的地址,SQL Server 驅動程序再從DBMS 取回要存取的資料。假如您用的是MicroSoft SQL Server 的話,隻要讓這個欄位保留預設值(Default)即可,當你是透過TCP/IP建立的連接關系時才需設定它。
  5、Network Library :指與網絡程序溝通的SQL Server 驅動程序的Network library DLL名稱
  6、Option按鈕:按一下,以設定Login 與Translation 的設定。
   (1):Database Name :要存取SQL資料庫的名稱。
   (2): Language Name:SQL Server 所指定的國家語言,除非你想讓SQL Server以法文或德文來傳遞信息,不然隻需讓它保留預設值(Default)即可。
   (3): Generate Stored Procedure for prepared Statements:這個選項被核取的話,SQL Server 将預備叙述PS(Prepared Statements)插入在程序中再加以編譯為預存程序SP(Stored Procedure)。若清除這個檢查框的核取,則PS将與SQL Server 驅動程序運作時執行與貯存。
   (4): Translation:按下[Select]按鈕後,選擇翻譯程序。
   (5):Convert OEM To ANSI characters: 若SQL Server 和SQL Server 驅動程序都不使用ANSI字符的話,請核取這個檢查框。

VFP與SQL Server的連接(2)       
  ----怎樣取得服務器名稱和ODBC數據源  
                                 
  怎樣取得服務器名稱和ODBC數據源
  通常程序不會詢問用戶所要使用的是那一個SQL Server 或是那一個數據源,但假如你必須這麼做的話,您可以在屏幕上顯示一個目前已在網絡上啟動或可被搜尋得到的SQL Server 或DSN 選擇清單(最好把用戶的使用權限也一起列舉),也不要讓用戶自行在TextBox上輸入,避免使用上的困擾。
  技巧:可以用SQL Server 上的函數SqlServerEnum來搜尋網絡上已經安裝的SQL 服務器。
ODBC登錄對話框照理來說,一般應用程序被執行時應該看不到ODBC 的登入對話框,但如果沒有作好适當的設定時,那麼一旦ODBC驅動程序管理員接收到應用程序存取ODBC失敗的信息時,屏幕上便會出現ODBC登錄對話框。也許您會感覺這個對話框跟您見到的對話框不同,這個對話框之所以出現,是因為用戶沒有通過DSN的身份驗證造成。假如您指定了一個确實可供存取的DSN的話,将出現另一種登錄對話框。這是正确指定DSN才出現的對話框,唯一美中不足的是無法禁止用戶按下[OPTION>>]按鈕,進而更改其登錄的高級設定。
  測試數據源
  為了避免在調試程序時,帶來不必要的麻煩,應該在建立好DSN後,對DSN進行測試。在VFP中你可以用 SqlConnect( )或者SQLSTRINGCONNECT( )函數來對DSN進行測試。
  下面說說詳細的測試方法
  測試方法:? SqlConnect(數據源,用戶,密碼)
  例如: ? SqlConnect("EDSTW","sa","") 如果函數返回-1,表明數據源無法連接,請檢查數據源或者檢查SQL服務器是否正常。返回正數,表明數據源連接成功。該返回數代表當前連接的SQL句柄。
  連接管理
  網絡上的數據庫若被單一用戶獨占的話,就豪無意義可言,SQL Server的資料庫界面改善了前端的應用程序來存取數據庫的效率,讓多個CLIENT可同時透過同一連接關系去存取數據。
  動态連接模式
  以往若應用程序需多次存取某一數據庫的話,便會與該數據庫一直保持連接關系,如此因長期獨占而導緻該連接關系處于空閑狀态,浪費資源。
  現在VFP加入連接共享以及空閑關閉的功能。 及時開啟連接關系:連接不活動前允許在指定的時間分鐘數内空閑。如果在指定時間内沒有請求使用服務器,則 Visual FoxPro 終止該連接。但是,連接超時後如果對服務器又有請求,則 Visual FoxPro 将試圖自動恢複這個連接。因為連接是作為數據庫的一部分存儲的,所以僅在有打開的數據庫時才能進行連接建立。
  1:指定的數據源:有兩種方式指定數據源,一種用字符串來指定,允許在文本框中鍵入連接串。另一種用DSN,用戶标識,密碼來指定:
   A:數據源 允許從已安裝的 ODBC 數據源列表中選擇一個數據源。
   B:用戶标識 如果數據源需要用戶名稱或标識,允許鍵入。
   C:密碼 如果數據源需要密碼,允許鍵入密碼。
   D:數據庫您可以選擇一個數據庫,作為所選數據源連接的目标。
  指定DSN後您可以對剛輸入了内容的連接進行連接驗證。如果連接成功,則顯示對話框提示此“連接成功”;如果連接失敗,則出現錯誤信息。如果沒有對連接指定内容,則顯示“選擇數據庫” 對話框,使您可以選擇數據源。
  新的數據源
  顯示“Data Sources”對話框,使您可以添加、删除或配置數據源。
  2:顯示 ODBC 注冊提示
  此項設定ODBC登錄信息對話框是否出現,什麼時候出現。
   A:僅當登錄信息沒有指定時:如果在命名連接定義中未存儲用戶标識和密碼,則 Visual FoxPro 用“ODBC 數據源注冊”對話框提示用戶。
   B: 每次都顯示: 指定 Visual FoxPro 總是使用“ODBC 數據源注冊”對話框提示用戶,該框允許用戶使用與存儲在命名連接中不同的注冊 ID 和密碼。
   C:從不指定: Visual FoxPro 從不提示用戶。此選項确保更高的安全性。
  3:數據處理
  這裡可以設置連接數據的處理方式
   A:異步執行 指定異步連接。
   B:顯示警告信息 指定顯示不可捕獲警告。
   C:批處理 指定以批處理方式進行連接操作。
    (1):批處理方式 ---- 分批從表中取出設定的記錄數(默認值100)
    (2):非批處理方式---- 一次取完整個表的數據 D:自動事務處理指定自動執行事務處理。
   E: 數據包大小當和遠程數據位置之間傳送信息時,您可以指定傳送信息網絡包的大小(以字節為單位)。在下拉列表中選擇或鍵入一個值。
  4:超時時間間隔
  這些選項設置連接屬性的值,也可用 DBSETPROP( ) 函數設置。
   A:連接(秒) 以秒為單位指定連接超時時間間隔。
   B:查詢(秒) 以秒為單位指定查詢超時時間間隔。
   C:空閑時間(分鐘)以分鐘為單位指定空閑超時時間間隔。在指定的時間間隔後,活動連接變為不活動。
   D:等待時間(豪秒) 以毫秒為單位指定在 Visual FoxPro 确定 SQL 語句是否執行完畢之前經過的時間。 設定完畢後按下CTRL+W 鍵存盤。

VFP與SQL Server的連接(3)       
   ----監視SQL Server 上的連接情況

  在SQL Enterprise manager中的[Server /Current Activity]可以讓您一目了然地看出SQL的連接情況,
是個非常好用的工具。
  在Current Activity中,可見到已登入的用戶清單、數據庫名稱、工作站名稱與應用程序名稱。下方的狀态欄顯示目前有多少連接關系正在運作,多少連接關系處于空閑。

  存取時限
  一般連接關系的存取時限從15秒到1、2分鐘不等,至于精确的數值要視你所選擇的程序界面與時限的設定值而定。亦即假如你要存取數據庫時,選擇了不正确的服務器或服務器已經關機,則CLIENT端便會沒有任何反應,一直到存取時限時,才會返回連接失敗信息。
  若要連接LAN網中的SQL SERVER不須耗費多少時間,約1至5秒内便能獲得回應,應用程序第一次連接會花費較長的時間,第二次後會比較短。因為Windows系統會将先前的連接關系所用的控件或DLL文件一直保留在内存。

  設定遠程數據的存取方式
  您可以自己設定取數據的處理方式,在VFP的TOOLS菜單裡,選中Options... 菜單項,彈出OPTIONS對話框,選中Remote Data 标簽:
 1: 共享連接 指定 Visual FoxPro 使用當前連接處理新的視圖。在數據源一次隻支持一個連接時,它很有用。它可以使一個連接處理多個視圖。
 2:取備注字段指定隻有在視圖輸出中激活一個備注或通用字段後才從數據源取備注或通用字段。清除該選項可以減少初始從遠程表中下載的數據量,這将提高性能。
 3:SQL 更新條件 指定當您試圖更新數據前的數據對比方式,Visual FoxPro 檢查遠程服務器上的字段來決定是否改變數據。如果選擇條件所指定遠程字段中的數據已經更改,則更新失敗。
  (1):Key Fieds Only 隻對比主鍵
  (2):Key and Updateble Fieds 對比主鍵和要更新的字段
  (3):Key and Modified Fieds 對比主鍵和修改過的字段(默認)
  (4):Key and Timestamp 對比主鍵和數據庫的時間截。
 4:SQL 更新 指定 Visual FoxPro 是使用 SQL UPDATE 還是使用 SQL DELETE,然後用 INSERT 來更新遠程服務器上的信息。
  (1):SQL Update 直接用SQL語言更新(默認)
  (2):SQL Delete + SQL Insert 删除舊記錄,然後增加一條新記錄
 5:每次取的記錄數 當用批處理方式時,指定 Visual FoxPro 從遠程數據源中一次返回多少條記錄。選定“全部”可以指定在第一次取操作中即返回所有的記錄。該設置受“要取的最大記錄數”中指定值的限制。  6:要取的最大記錄數指定一個視圖返回的記錄總數。如果您錯誤地建立了一個查詢,它可以防止返回過多的數據。選擇“全部”可以指定返回所有的記錄。
 7:使用備注字段的長度 >= 指定長字符型字段中數據的最大長度。指定在視圖輸出中,如果字符數據超出指定長度時,将長字符字段轉換成備注字段。默認值是255,等于 Visual FoxPro 中字符型字段的最大長度。
 8:成批更新的記錄數指定視圖一次發送的更新語句數目。調整這個值可以明顯地提高更新性能。默認值是 1。有關的詳細内容,請參閱“REPLACE 命令”以及“Scope 子句”。
 9:異步執行 指定把控制權返回給您的應用程序之後,Visual FoxPro 在後台執行 SQL pass-through 命令(使用 SQLEXEC( )、SQLMORERESULTS( )、SQLTABLES( ) 和 SQLCOLUMNS( ))。
  如果您選定了該選項,您的應用程序可以顯示過程信息,并且允許用戶使用 ESC 鍵中斷一個命令(如果 SET ESCAPE 已經設置為“真”)。您可以決定一個異步執行的 SQL 命令的狀态,方法是重複地調用其中一個 SQL pass-through 函數,直至它報告命令已經完成為止。這個選項的默認值是廢止(同步執行),它指定 Visual FoxPro 在把控制權返回您的應用程序之前一直等待,直至 pass-through SQL 命令完成為止。
 10:顯示警告信息 允許顯示警告信息。
 11:批處理 在使用 SQLEXEC( ) 發送多個 SQL pass-through 語句時,指定 Visual FoxPro 并不返回任何結果,直到所有結果集合都檢索到為止。
  對應于在 SQLSETPROP( ) 函數中設置 BatchMode。如果廢止了該選項,您必須調用 SQLMORERESULTS( ) 來确定數據是否可用。
 12:自動事務處理指定由遠程表上的連接自動處理事務。如果清除了該選項,您必須使用 SQLCOMMIT( ) 和 SQLROLLBACK( ) 人工處理事務過程。
 13:顯示登錄信息當一個連接激活時,指定是否顯示登錄提示(如果該連接需要用戶進行登錄)。例如,“隻在必要時”指出,隻有在連接或視圖定義中未指定登錄信息的情況下,才出現登錄提示。
 14:連接超時設定(秒)指定與遠程服務器建立一個連接所需等待的秒數(0 到 600 之間)。如果在指定時間内不能建立這個連接,則 Visual FoxPro 顯示錯誤。指定 0 為無限制地等待一個連接。
 15:空閑超時設定(分鐘)指定連接不活動前允許空閑時間的分鐘數。如果在指定時間内沒有請求使用服務器,則 Visual FoxPro 終止該連接。但是,連接超時後如果對服務器又有請求,則 Visual FoxPro 将試圖自動恢複這個連接。
 16:查詢超時設定(秒) 指定等待服務器響應一個請求的秒數(0 與 600 之間)。如果服務器在指定秒數的時間内還不處理查詢,則 Visual FoxPro 顯示錯誤。指定 0 可以無限制地等待查詢結果。 等待時間(毫秒) 指定 Visual FoxPro 檢查 SQL 語句是否執行結束之前經過的毫秒數。

VFP與SQL Server的連接(4)       
   ----解決區域網絡方面的連接問題          

  排除連接錯誤
  C/S程序結構的運作就像是主人與仆人之間的互動一樣,仆人偶爾會因溝通不良而抱怨。這種情況在C/S程序中即所謂的錯誤信息(Error message ),每個錯誤信息都包含了一個錯誤代碼與描述問題的說明文字。由于各種程序的錯誤處理方式不盡相同,所以當我們在做除錯工作之前,除了要參考錯誤信息外,還應當注意下列幾個問題,以掌握可能的原因,提高效率。
  錯誤原因
  1:程序以往在執行時是否曾成功建立連接關系?如果是,後來有沒有變更過什麼設定?因為若曾經連接成功的話,那麼在設定、安全、通訊協議等方面應該不會有問題。之後,假如有安裝新版的應用程序、操作系統後升級驅動程序的話将影響連接情況。
  2:屏幕上顯示什麼信息?Modem 或網絡卡的LED顯示是否正常?屏幕上的信息可以引導我們朝正确的方向排除錯誤。Modem 或網絡卡的LED顯示網絡交通是否正常運作。
  3:網絡是否已超出負荷?用戶是否搭錯線,連接到其他的網絡?也有可能許多應用系統一直站用網絡資源造成網絡異常。
  4: 碰到錯誤時、程序有沒有做除錯措施或者直接關機。
  程序庫所引發的連接問題很多問題的發生都因為動态連接程序庫(DLL)或控制元件(Control,即OCX),存放到其它目錄或者根本沒有安裝到系統中,或由于安裝了新版的ODBC 而覆蓋掉舊版的ODBC所引起的。他們必須被放置到程序載入器(WIndows loader)在執行期間能找到的地方,一般在Windows\system之下,而且這些程序應該在系統注冊、安裝,而不是直接放置到該目錄就可以。
  所有Windows 平台的Windows loader作業流程都是相同的,一旦程序檔案總管、浏覽器、執行.......等方式啟動後,Windows loader 便會依次往下列幾個地方搜尋相關的程序庫或元件:
  1: Momery
  2: 應用程序所在的目錄
  3: Windows 的目錄
  4: Windows\system目錄
  5: 環境變數所指定的目錄
  如果以上五個地方都找不到相關的程序庫或元件的話,Windows便會告知用戶錯誤信息。
  Microsoft SQL Server 的Client 端是籍由named pips 與Server端溝通的,為了支持named Pips ,所有程序界面都采用16位元的DBNMP3.DLL或32位元的DBNMPNTW.DLL程序庫。在強調一次,這些DLL檔必須被放置在Windows\System或其他Windows loader 能找到的目錄。
  解決區域網絡方面的連接問題
  通常根據下列的問題及步驟來處理這方面的問題:
  1:用戶是否确實登入網絡?這是常見的疏忽,因為用戶經常隻登入到工作站本身,而沒有進入網絡,這是您可以選擇開始/關閉系統來關閉所有程序,登入成其他的用戶,重新做一次登入。
  2:是否還有連接空間讓用戶使用? 假如用戶建立許多的連接關系後,忘了切斷它,那麼操作系統有可能無法建立新的連接,有些操作系統可供同時連接的數目是有限的,預設的狀況下,假如用戶同時用4、5條的遠端連接關系後,這個用戶若想再連線到SQL Server 就會有問題。
  3:網絡是否癱瘓?假如執行了很多個遠端數據庫存取程序都無回應的話,您可用[網絡鄰居]來檢查其他機器上的共用目錄是否依舊可以存取。
  4:您是否曾用Client Configuration Utility 去設定裝置的驅動程序後網絡地址?當SQL Server 支援TCP/IP後,系統會要求您做相關的設定。因系統将參照網址而非用名稱來存取服務器。
  與SQL有關的連接問題通常根據下列的問題及步驟來處理這方面的問題
  1:用戶是否輸入正确的登入ID和PASSWORD。
  2:服務器有沒有運作?當服務器開機時,是否有自動開啟SQL Server?您可以在控制台的服務程序或用Startup.cmd 這個批處理文件來檢視這項設定。也可以用SQL Server Manager 來确定SQL Server 是否正常運作:
  (1):服務器的RAM或硬盤空間是否太小了?
  (2):SQL Server 數據庫中的資料是否以壞掉?
  (3):SQL SERVER 是否處于單機模式運作?或SQL的ADMINISTRATOR正在維護系統。
  用戶權利和授權問題
  SQL SERVER 具有可連接超過1000個的用戶的能力,但真正可同時連接的數目就要看Administrator 的設定了,每一條的連接關系都會消耗37KB至42KB大小不等的RAM,這些RAM是被用來充當程序或資料的快取空間之用。微軟公司要求所有要存取WIndows NT 或SQL Server 的用戶都必須取得用戶端存取授權(Client Access License :ACL)。用戶端存取授權和操作系統授權是分開的,用戶端存取授權有兩種:
  1:每服務器模式(Per Server Mode):用戶在用戶端可與SQL Server 或Windows NT 建立n條連接關系。換而言之,不能同時有超過n個的連接關系存取服務器。
  2:每一客戶模式(per Seat Mode ):每個用戶端都必須購買用戶段存取權限,若同時連到NT & SQL Server 的連接關系已經超過每一客戶的授權數目,用戶端的用戶仍然可繼續連線上來。

你可能想看:

有話要說...

取消
掃碼支持 支付碼