VFP下客戶機訪問任意映射服務器的方法
發表時間:2024-02-17 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在開發網絡多用戶應用系統時,VFP的程序員常采用如下方法:將1個或多個數據庫(.DBC及.DBF)作為共享資源放在1臺或多臺NOVELL,WIN-NT(或在WIN9X對等網上所設定)的服務器上,應用程序及臨時文件放在本地客戶的機WIN9X環境下,在客戶機上開發時將本機對這些服務器訪問盤符預先映射成...
在開發網絡多用戶應用系統時,VFP的程序員常采用如下方法:將1個或多個數據庫(.DBC及.DBF)作為共享資源放在1臺或多臺NOVELL,WIN-NT(或在WIN9X對等網上所設定)的服務器上,應用程序及臨時文件放在本地客戶的機WIN9X環境下,在客戶機上開發時將本機對這些服務器訪問盤符預先映射成指定的F:(H:..)等。最后編譯成.EXE文件生成安裝系統安裝到每臺客戶機上。
---- 實際應用中局域網內各客戶機因本身盤符數量的原因,對這指定的1臺或多臺服務的映射盤符可能并不是開發機上的F:(H:)。這時麻煩來了,程序一運行,屏幕提示“‘定位數據庫’—‘初始化臨時表對象時發生錯誤。找不到F:…???.DBC’” 。如果整個應用軟件有.DBC庫表和各種自由表,又有許多表單組成,此時讓用戶去定位數據庫或自由表在什么位置,簡直是不可能的。
---- 筆者是這樣解決這個問題的(大致方法如下):
---- 1. 建立一個包含文件:如info.h
#include DBCname1_loc drv1_loc+’\citicmis1.dbc’
;服務器1上的庫1
#include DBCname2_loc drv2_loc+’\citicmis2.dbc’;
服務器2上的庫2
#include DBCusrinf_loc drv1_loc+’\citicmis1!usrinf.dbf’
;庫1中表
#include DBCEMP_loc drv2_loc+’\citicmis2!emp.dbf ‘ ;
庫2中的表
#include dbcjgbh_loc drv1_loc+’\rsc\jgbh.dbf’;
庫中表或自由表
---- 2. 在應用系統的某目錄中建文本文件:如.\bmp\serdrv.txt, 內有二行文本
F:\acc ;某客戶機對第1臺服務器的映射盤符
H:\acc ;某客戶機對第2臺服務器的映射盤符
---- 3. 在軟件的主程序main.prg中 建全局變量 drv1_loc,drv2_loc,一開始就用低級文件操作命令fopen,fget等將serdev.txt中的二行 f:\acc,h:\acc分別讀入并賦值給drv1_loc,drv2_loc。
---- 4. 應用軟件中的表單或其他過程都包含info.h 文件。
---- 4.1 對于自由表:
---- 可在表單的LOAD 事件中 用如 use (dbcjgbh_loc) in 0 alia jgbh shar打開表,在UNLOAD事件中用 USE in jgbh 關閉表。
---- 4.2 對于數據庫的表:
---- 可在表單設計時的數據環境中打開表(如打開了 usrinf.dbf,emp.dbf),此事 數據環境中的 Dataenvironmnet.cursor?.database屬性 自動設定為所在的服務器的數據庫,如本例為 f:\acc\citicmis1.dbc,h:\acc\citicmis2.dbc 。
---- 這時可以在Dataenvironmnet對象的 BeforeOpenTables 方法中寫入如下代碼:
---- This.Cursor1.database=DBCNAME1_LOC
---- This.Cursor2.database=DBCNAME2_LOC 就可解決問題。
---- 以上方法生成的.EXE系統,安裝到各客戶機上后,只要修改各客戶機的.\bmp\serdrv.txt中為實際對服務器盤符指向就能使用應用系統運行自如了!用此方法開發的系統已在筆者所在系統各單位的WIN9X對WIN9X,WIN9X對NOVELL服務器,VFP6.0環境中運行著!