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

[原創]網路環境下, 用戶端自動更新程式
前往頁面 1, 2  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 1 樓

發表發表於: 星期三 四月 21, 2004 12:17 pm    文章主題: [原創]網路環境下, 用戶端自動更新程式 引言回覆

程式功能:
1.自動判斷SERVER上的主程式版本是否跟本機上的版本不同, 可自動複製一份到本機電腦中.
2.自動建立連線網路磁碟機.
3.主程式放在自己的電腦上, 減低網路資料流量, SERVER上的主程式可以隨時更新.
程式參數: 要判別的主程式名稱, 例: 建立捷徑 main.exe trade
SERVER的路徑資訊放在程式參數的.ini 檔中.
4.因為原始程式會複製一份在本機, 所以在你的程式一開始要加一段程式碼, 將你的路徑設成 .ini 檔中所設定的路徑.
*例:
代碼:

mexe_name = program(0)               &&--執行檔名
path_exe=SYS(5) + SYS(2003)      &&--執行檔目錄
path_dbf= properties( FILETOSTR(path_exe+'\'+MEXE_NAME+'.ini') ,'DbfPath' )

If !EMPTY( path_dbf )
   Set DEFA TO &path_dbf
   Cd &path_dbf
Endif


**原始程式碼
代碼:

para MEXE_NAME
* ?#123;式?#125;發: 尚易資訊有限公司 史嘉富
* 版本: 2.0   2004.04.21
Set excl off
Set safe off
Set dele on
Set esca off
Set talk off

if empty( mexe_name)
   messagebox( '執行方式:  Main 執行檔名'+cr()+'執行檔名不須在上.exe  , 會產生 執行檔名.ini檔, 其內容中 dbfpath=為?#123;式所顒漸媬?+cr()+'AutoConnect=T: \\ntsrv\trade 可自動建立對印磁碟機' )
   quitexe()
endif

*Local MDATA, path_exe      &&--ini資訊

path_exe=SYS(5) + SYS(2003)      &&--執行檔目錄

If FILE(path_exe+'\'+MEXE_NAME+'.INI')
   MDATA = FILETOSTR(path_exe+'\'+MEXE_NAME+'.ini')
Else
   MDATA = 'AutoConnect='+cr()+'DbfPath='+cr()+'DefaPRN='+cr()+'TempFilePath='
   Strtofile( MDATA , path_exe+'\'+MEXE_NAME+'.ini' )
Endif

path_dbf=''
MCAPTION=''

If empty(path_dbf)
   path_dbf = PROPERTIES( MDATA , 'DbfPath')
Endif
path_tmp = PROPERTIES( MDATA , 'TempFilePath')

If empty(path_tmp)
   path_tmp = GETENV('TEMP')
Endif
If !empty(path_exe) .and. empty(path_tmp)
   path_tmp = path_exe         &&--內定的暫存路徑,跟執行檔是放在一起
Endif
*!*   *WAIT WINDOW '='+path_dbf+'='

*!*   *********自動建立連線網路磁碟機
local mautoconnect, mdiskid , mdiskpath, mfound
mautoconnect = ltrim(PROPERTIES( MDATA , 'AutoConnect'))
if !empty( mautoconnect )
   mdiskid = upper(left( mautoconnect,1))
   if !isdirectory( mdiskid+':\')      &&--沒有建立連線網路磁碟機.
      mdiskpath = lower(alltrim(subs( mautoConnect , at(' ', mautoConnect)+1 )))
      NetworkInfo('MapDisk', mdiskid+':',mdiskpath )      &&--自動建立連線網路磁碟機.
   endif
endif

*********************
_SCREEN.VISIBLE=.F.

if file('autoup.zip')      &&--自動更新?#123;式
   zip( 'e', 'autoup.zip' )      &&-- 必須有安裝winzip
   dele file autoup.zip
endif
if file('update.zip')      &&--自動更新?#123;式
   zip( 'e' , 'update.zip' )
   dele file autoup.zip
endif
*!*   if file('main.zip')      &&--主機檢查?#123;式
*!*      zip( 'e' , 'main.zip' )
*!*      dele file main.zip
*!*   endif

If !EMPTY( path_dbf )
*內定目錄的地方
   If !FILE(path_dbf+'\'+mexe_name+'.exe')
      _SCREEN.VISIBLE=.T.
      Messagebox('請你確定一下, 是否有正確連上網路(或許主機已經關閉了)'+cr()+'或是 '+MEXE_NAME+'.INI 中網路路徑( '+alltrim(path_dbf)+' )?#93;定有問題')
      path_dbf=PADR(PATH_DBF,40)
      do inputpath
   Endif
*!*      Set DEFA TO &path_dbf
*!*      Cd &path_dbf
else
   path_dbf=space(40)
   do inputpath

*!*      Set DEFA TO &path_dbf
*!*      Cd &path_dbf
Endif

If !EMPTY(path_dbf) .AND. EMPTY( MCAPTION)
   mret =.F.
   if !file(path_exe+'\'+MEXE_NAME+'.EXE')
         _SCREEN.VISIBLE=.T.
         wait windows '更新?#123;式中.'  nowait
         * 2004.03.03   修正?#123;式
         i=["]+path_dbf+'\'+MEXE_NAME+'.EXE'+["]
         j=["]+path_exe+'\'+MEXE_NAME+'.EXE'+["]
         copy file &i to &j
   else
      *If FDATE(path_exe+'\'+MEXE_NAME+'.EXE') # FDATE(MEXE_NAME+'.EXE') .or. Ftime(path_exe+'\'+MEXE_NAME+'.EXE') # Ftime(MEXE_NAME+'.EXE')
      If Ftime(path_dbf+'\'+MEXE_NAME+'.EXE') # Ftime(path_exe+'\'+MEXE_NAME+'.EXE')
         _SCREEN.VISIBLE=.T.
         *Messagebox('請注意 : 你的?#123;式版本日期為:'+DTOC(FDATE(path_exe+'\'+MEXE_NAME+'.EXE'))+' 跟主機上的?#123;式版本:'+DTOC(FDATE(MEXE_NAME+'.EXE'))+' 並不相同, 請確定是否已更新?#123;式了' )
         *wait windows '請注意 : 你的?#123;式版本日期為:'+DTOC(FDATE(path_exe+'\'+MEXE_NAME+'.EXE'))+' 跟主機上的?#123;式版本:'+DTOC(FDATE(MEXE_NAME+'.EXE'))+' 並不相同, ?#123;在自動幫你更新?#123;式.'  nowait
         wait windows '更新?#123;式中.'  nowait
         i=["]+path_dbf+'\'+MEXE_NAME+'.EXE'+["]
         j=["]+path_exe+'\'+MEXE_NAME+'.EXE'+["]
         copy file &i to &j
         wait clear
      Endif
   endif
Endif
*run /n &mexe_name
runfile(mexe_name)

*!*   read events      &&--無法read

quitexe()
***********************
func inputpath
   _SCREEN.VISIBLE=.T.
   mread = .t.
   clear
   mautoconnect = space(60)
   @ 12,10 say '請輸入自坅堨葙鵀L磁碟機, 例如:  T:  \\NTSRV\SYS\ ,表示要自動將 \\ntsrv\sys 連線網路磁碟機代號T:'
   @ 13,30 get mautoconnect valid chkread2()
   @ 15,10 say '請輸入主?#123;式所存放的路徑, 例如:  T:\TRADE  或是 \\NTSRV\SYS\TRADE , 按下[Esc]放棄輸入'
   @ 16,30 get path_dbf valid chkread()
   read
   if empty( path_dbf)
      messagebox('請查明主?#123;式所存放的路徑後, 修正'+MEXE_NAME+'.INI, 再來執行')
      quitexe()
   endif
   path_dbf = alltrim( path_dbf)
   if lastkey()=27
      quitexe()
   endif
   If !file(path_dbf+'\'+MEXE_NAME+'.EXE')
      messagebox('你所輸入的地方找不到主?#123;式:'+path_dbf+'\'+MEXE_NAME+'.EXE  , 無法執行' )
      quitexe()
   else
         mdata = PROPERTIES( MDATA , 'AutoConnect','W', alltrim( mautoconnect ) )
         mdata = PROPERTIES( MDATA , 'DbfPath','W', alltrim(path_dbf) )
      Strtofile( MDATA , path_exe+'\'+MEXE_NAME+'.ini' )

*!*   *!*         *quitexe()
*!*         * 可能是?#123;式保護的關係, 直接執行會有問題. 只好重RUN一次
      messagebox('請重新執行一次就可進入主?#123;式中' )
      quitexe()
      
*!*         runfile('main.exe',mexe_name)
*!*         quitexe()
*!*   *!*         read events      &&--無法read
*!*   *!*         clear events
   endif
      read events      &&--無法read
return
*******************
func chkread2
if !empty( mautoconnect )
   mdiskid = upper(left( mautoconnect,1))
   if !isdirectory( mdiskid+':\')      &&--沒有建立連線網路磁碟機.
      mdiskpath = lower(alltrim(subs( mautoConnect , at(' ', mautoConnect)+1 )))
      NetworkInfo('MapDisk', mdiskid+':',mdiskpath )      &&--自動建立連線網路磁碟機.
   endif
endif

**************************
func chkread
local mret
if !FILE(alltrim(path_dbf)+'\'+mexe_name+'.exe') .and. lastkey()#27
   Messagebox('請你確定一下, 是否有正確連上網路(或許主機已經關閉了)'+cr()+'或是你所指定的網路路徑( '+alltrim(path_dbf)+' )有問題')
   mret = .f.
else
   mret = .t.
   clear events
endif
return mret
&&&&&&&&&&&&&&&&&&
func cr
return chr(13)+chr(10)
*****************
**********************************************************
Func PROPERTIES
*傳來 文字內容 , 所要找的 屬性名稱 , ( 內定為讀取R/寫入W/刪除D), 寫入的資料
* 傳回內容( 文字型態), 傳回後再用巨集來將資料改成所須的型態
*                所以資料如果要為字元型態, 則須在memodata中須在字串兩旁?#91;上 "
*   如果為寫入/刪除 資料, 它會傳回已變更資料後的 memodata, 請在自已的?#123;式中寫入
* 注意 , 如果要將資料寫入時, 它的值( pro_dat )皆為字串, 所以你的值為字串, 則請再?#91;上 "
* mdata = filetostr('legend.ini')
* mdata = properties( mdata , 'dbfpath', 'W' , 'c:\stock' )
Lpara MEMODATA, PROPERTIES_NAME , R_OR_W , PRO_DAT
Local MRET , I , MDATA , LINE_COUNT, MFIND
MRET = ''

*properties_name = upper( alltrim(properties_name ))

If type('r_or_w')#'C'
   R_OR_W = 'R'
Endif

R_OR_W = upper( R_OR_W)

*susp         &&--如果你要將更改後的資料存入, 請自行write到file中
Set MEMO TO 250             &&--將MEMO中的寬度?#93;成250 , 以免MLINE()截成不正確的長度
MFIND = .F.
LINE_COUNT = MEMLINES( MEMODATA )
For I=1 to LINE_COUNT
   MDATA = mline( MEMODATA , I )
   If upper(ltrim(MDATA)) = upper( alltrim(PROPERTIES_NAME))
      MFIND = .T.
      If at('=', MDATA) # 0
         Do case
         Case R_OR_W = 'R'      &&--讀
            MRET = subs( MDATA , at( '=', MDATA)+1 )
         Case R_OR_W = 'W'      &&--寫
            MRET = stuff( MEMODATA  , at(MDATA ,MEMODATA) , len(MDATA) , PROPERTIES_NAME+'='+PRO_DAT )
         Case R_OR_W = 'D'      &&--刪
            MRET = stuff( MEMODATA  , at(MDATA ,MEMODATA) , len(MDATA) , '' )
*WAIT WINDOW MRET
*要WRITE 一個FILE , 則須要將FILE刪除後, 再FCREATE(),才會將字串正確的寫入FILE中
         Endcase
*   wait mret
      Endif
      Exit
   Endif
Next

If !MFIND .and. R_OR_W = 'W'      &&--寫
   MRET = MEMODATA+ cr()+ PROPERTIES_NAME+'='+PRO_DAT
Endif

Return MRET
*********************
func networkinfo      &&--傳來何種類別, 傳回可知道的登入網路資訊
* ?#93;可使用 sys(0) 可傳回 : 電腦名稱 # 使用者名稱
Lpara mfunc , mdata1, mdata2
mfunc=lower( mfunc)

Local loNetwork
loNetwork = NewObject('wscript.network')
*使用 WSHom.Ocx
local mret
do case
case mfunc='computername' .or. mfunc='電腦名稱'
   mret = loNetwork.ComputerName
case mfunc='domain' .or. mfunc='網域'
   mret = loNetwork.UserDomain
case mfunc='username' .or. mfunc='使用者名稱'
   mret = loNetwork.UserName
case mfunc='connectdiskid' .or. mfunc='連線磁碟機'
   mret =loNetwork.EnumNetworkDrives(iif( empty( mdata1 ),0, mdata1 ) )      &&--第一台, mdata1=0
case mfunc='connectdiskpath' .or. mfunc='連線磁碟路徑'
   mret =loNetwork.EnumNetworkDrives(iif( empty( mdata1 ),0, mdata1 )+1)
case mfunc='connectprnid' .or. mfunc='連線連接埠'
   mret =loNetwork.EnumPrinterConnections(iif( empty( mdata1 ),0, mdata1 ) )      &&--第一台, mdata1=0
case mfunc='connectprnpath' .or. mfunc='連線連接名稱'
   mret =loNetwork.EnumPrinterConnections(iif( empty( mdata1 ),0, mdata1 )+1)
case mfunc='mapdisk' .or. mfunc='?#93;定磁碟機'
   * exp :      NetworkInfo('MapDisk','T:','\\ntsrv\trade' )
   if !empty( mdata2)
      mret =loNetwork.MapNetworkDrive( mdata1 , mdata2 )
   else
      mret =loNetwork.MapNetworkDrive( mdata1 )
   endif
case mfunc='removedisk' .or. mfunc='中止磁碟機'
   * exp :      NetworkInfo('RemoveDisk','T:')
   mret =loNetwork.RemoveNetworkDrive( mdata1 )
case mfunc='mapprn' .or. mfunc='?#93;定印表機'
   * exp :      NetworkInfo('MapPrn','LPT1:','\\ntsrv\Epson' )
   if !empty( mdata2)
      mret =loNetwork.AddPrinterConnection( mdata1 , mdata2 )
   else
      mret =loNetwork.AddPrinterConnection( mdata1 )
   endif
case mfunc='removeprn' .or. mfunc='中止印表機'
   * exp :      NetworkInfo('RemovePrn','LPT1:')
   mret =loNetwork.RemovePrinterConnection( mdata1 )
case mfunc='defaultprn' .or. mfunc='預?#93;印表機'
   * exp :      NetworkInfo('DefaultPrn','\\ntsrv\Epson')      &&--無法用 LPT1:
   mret =loNetwork.SetDefaultPrinter( mdata1 )
endcase
return mret
*****************
func isdirectory      &&--?#93;為某些中文目錄名稱用DIRECTORY("c:\蓋") 會無法辦識
lpara mdir
DECLARE INTEGER PathIsDirectory IN shlwapi STRING pszPath
mret =!empty(PathIsDirectory(mdir))
clear dlls shlwapi.dll
return mret
**********************
func runfile      &&--執行某一個檔案, 可以自行判斷副檔名(透過檔案總管來執行)
* exp : runfile( "c:\temp\myxls.xls" )   &&--?#125;啟 xls 檔
* exp: runfile( "c:\temp\myxls.xls",,,'print')   &&--直接列印
* 可以在列印前先?#125;那個物件, 先?#93;定印表機, 再來runfile , 就可以不會印到預?#93;印表機了.
* 在word中, 改印表機:    .ActivePrinter = "Epson LQ-300 ESC/P 2"
* 在Excel中, 改印表機:    .Application.ActivePrinter = pub_faxExceldriver
* mwindowstype = 0(內定)不顯示?#123;式畫面, 1 為顯示原畫面 , 3=最大化

lpara mfile , mparament , mpath , mactive , mwindowstype
if empty(mfile)
   mfile=''
endif
if empty( mparament )
   mparament = ''
endif
if empty(mpath)
   mpath = ''
endif

if empty(mactive) .or. type('mactive')#'C'
   mactive = 'open'
endif
if empty(mwindowstype)
   mwindowstype=0
endif

local mret
* 請注意 shellExecute 之大小寫
*declare integer ShellExecute in shell32.dll integer hWnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, integer nShowCmd
declare integer ShellExecute in shell32.dll integer, string, string, string, string, integer
mret =shellExecute( 0, mactive , mfile , mparament , mpath , mwindowstype )
*mret =shellExecute( 0, 'open' , .text1.value , "" , "" ,0 )
*mret=ShellExecute(0, 'open', 'XCOPY32.EXE','C:\TEST C:\TEMP\TEST1 /E /I /Q /Y', 'C:\TEMP', 0)
if mret<=31
   messagebox('這個檔案 '+trim(mfile)+' 並不支援動作('+mactive+')')
endif
*clear dlls shell32.dll
return mret
********************************************
proc quitexe         &&--利用強迫中止?#123;式
close table all
Close Data all
Clear DLLs
clear events
quit
Declare ExitThread in Win32API
ExitThread()
return
********************************
func zip
lpara mfunc , mzipfile , mtagfile
* mfunc = 'a'   append
*      ='e'   extract
* mzipfile 例:   c:\backup\20011231
* mtagfile 例:   c:\myprg\*.*      或將要ZIP之檔案清單,建立文字檔, 用@清單檔名
local mret
mret = ''
mfunc=lower( mfunc )
do case
case mfunc = 'a'
   mfunc='-a'
case mfunc = 'e' .or. mfunc='x'
   mfunc='-e -o'
endcase
mret = zipexepath()
if isnull( mret )
   messagebox('請先安裝WINZIP 才能執行資料壓縮及解壓縮的功能')
else
   mret = runfile( mret , mfunc+' '+mzipfile+' '+mtagfile )
endif
return mret
******************************
func zipexepath
#Define HKEY_LOCAL_MACHINE -2147483646
return  readregs(HKEY_Local_machine, 'Software\Microsoft\windows\CurrentVersion\App Paths\winzip.exe\' ,'' )
**************************************************
***  讀取字串值 ReadRegistryString
***  傳回值:字串或.NULL.表無此機碼
**************************************************
Func ReadRegs
LPARAMETERS HKey, Subkey, Entry
LOCAL nHandle, nResult, nSize, cDataBuffer, nType
nHandle=0

Declare INTEGER RegOpenKey IN Win32API INTEGER nHKey,STRING cSubKey,INTEGER @nHandle
*//?#125;啟機碼
nResult=RegOpenKey(HKey,SubKey,@nHandle)
IF nResult#ERROR_SUCCESS
   RETURN .NULL.
ENDIF   

*// 使用RegQueryValueEx決定資料型態
DECLARE INTEGER RegQueryValueEx  IN Win32API  INTEGER nHKey,;
   STRING lpszValueName,INTEGER dwReserved,;
   INTEGER @lpdwType, STRING @lpbData, INTEGER @lpcbData

*//將值傳回 buffer
cDataBuffer=space(256)
nSize=LEN(cDataBuffer)
nType=0
nResult= RegQueryValueEx(nHandle,Entry,0,@nType,@cDataBuffer,@nSize)

Declare INTEGER RegCloseKey IN Win32API INTEGER nHKey
=RegCloseKey(nHandle)

IF nResult#ERROR_SUCCESS
   RETURN .NULL.
ENDIF   

IF nSize <2
   RETURN ""       &&//空字串
ENDIF             &&//去除空白字元及字串後的 NULL
RETURN SUBSTR(CHRTRAN(cDataBuffer,CHR(0),""),1,nSize-1)

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.


garfield 在 星期一 五月 03, 2004 2:42 pm 作了第 3 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 2 樓

發表發表於: 星期三 四月 21, 2004 4:00 pm    文章主題: 引言回覆

這麼好的文章又實用的範例.

garfield 不會自己置頂嗎?

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 3 樓

發表發表於: 星期三 四月 21, 2004 4:40 pm    文章主題: 引言回覆

好吧, 既然你認為不錯, 那就給他置頂一陣子好了. 本來想說如果有人回覆他就自己會頂到上面去了, 以免置頂太多後, 想看到最新的文章還得翻頁, 因為我比較賴. 8-P

* 補充說明: 程式內有幾行 判斷某些zip 檔是否存在的也是為了自動更新另外的程式用的, 像是運用在利用FTP下載後,在進入程式前自行解壓縮, 另外程式內使用的ZIP解壓縮程式是採用winzip並不是很理想 , 當然你們也可以改用本論壇上其它解ZIP的工具.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
梅子



註冊時間: 2003-08-12
文章: 11


第 4 樓

發表發表於: 星期日 四月 25, 2004 2:00 pm    文章主題: 引言回覆

没有实验成功,能给个详细的示例吗?
_________________
欢迎光临梅子VFP论坛,http://meizibbs.3322.org
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 5 樓

發表發表於: 星期一 四月 26, 2004 10:56 am    文章主題: 引言回覆

附加檔中有三個檔案:
原始程式: main.prg
用VFP6編譯的執行檔: main.exe
給你們參考用的參數檔: trade.ini
***********
如果要使用這個工具原則上須要了解幾件事.
1.不是只有執行main.exe , 而是須要給他一個參數, 這個參數就是你的實際執行檔的名稱, 就是執行檔名而已, 不須要加上路徑. 例: 建立一個捷徑 main.exe trade
2.main.exe 在第一次執行時, 如果在放置main.exe 的那個地方的目錄沒有你要更新的那個執行檔.ini , 會要求你輸入二個資訊:
A.自動建立對映磁碟機:如果你不須要建立一個在本機電腦上有一個磁碟機代號的話, 這個地方可以保持空白, 如果須要做連線網路磁碟機, 它的原則是" 磁碟機代號: \\網路主機名\資源分享名" ,例如:" T: \\ntsrv\sys ", 但你前提是要已經確定可以連線到這台網路主機上才行.
B.執行檔(主程式)是放在網路主機上的那個位置, 例如: \\網路主機名\資源分享名\主程式所在目錄, 因為在你輸入這一行資料的同時, main.exe 會同時去做檢查你輸入的路徑有沒有存在你的主程式, 所以你必須在windows下先將連線網路這個動作先做好.
3.main.exe 依參數檔(.ini) 去主機路本機比對主程式執行檔的日期時間一不一樣, 以便複製一份主程式在本機上, 如果一切動作皆已OK, main.exe 就會去執行放在本機裡的主程式, 並且結束main的程式.
4.就因為是複製一份主程式在本機上, 但實際上的資料是放在主機上, 所以你必須要在你的主程式的開頭要設定path , 可以將以下的程式碼加你的程式開頭的地方
mexe_name = program(0) &&--執行檔名
path_exe=SYS(5) + SYS(2003) &&--執行檔目錄
path_dbf= properties( FILETOSTR(path_exe+'\'+MEXE_NAME+'.ini') ,'DbfPath' ) &&--利用.ini檔讀出所設定的server路徑.properties( ) 這個函數請參考main.prg
If !EMPTY( path_dbf )
Set DEFA TO &path_dbf
Cd &path_dbf
Endif

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
朱育興



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

第 6 樓

發表發表於: 星期一 四月 26, 2004 5:10 pm    文章主題: 引言回覆

TO garfield:

梅子版主將這篇介紹她的討論區,應該蠻熱鬧的,看你要不要去瞧一瞧呢!

http://meizibbs.3322.org/bbs/dispbbs.asp?boardID=2&ID=15780

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 7 樓

發表發表於: 星期二 四月 27, 2004 12:28 am    文章主題: 引言回覆

看了之後有幾個感想.
1.內地用VFP的人還真多.
2.以後應該提供簡體版的程式才對, 可以省下轉貼者修改的時間.
3.以後轉貼"梅子論壇"的文章, 應注意是否忘了加上原始出處. <== 酸.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
朱育興



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

第 8 樓

發表發表於: 星期二 四月 27, 2004 1:00 am    文章主題: 引言回覆

我現在正在寫簡繁轉換程式,它只是 ConvertZ 的擴充版,只是多了處理 VFP 的 DBF 格式的檔案。
_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 9 樓

發表發表於: 星期二 四月 27, 2004 2:13 am    文章主題: 引言回覆

garfield 寫到:
看了之後有幾個感想.
1.內地用VFP的人還真多.
2.以後應該提供簡體版的程式才對, 可以省下轉貼者修改的時間.
3.以後轉貼"梅子論壇"的文章, 應注意是否忘了加上原始出處. <== 酸.


Wink
至少他有標上台灣網站拉!!下次你最好在程式底下..

加註.若要轉貼,請著名來源出處..

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
梅子



註冊時間: 2003-08-12
文章: 11


第 10 樓

發表發表於: 星期二 四月 27, 2004 8:30 am    文章主題: 引言回覆

TO garfield
真不对不起,我已经改了!谢谢!

_________________
欢迎光临梅子VFP论坛,http://meizibbs.3322.org
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 11 樓

發表發表於: 星期二 四月 27, 2004 10:09 am    文章主題: 引言回覆

梅子你可不要介意啊, 本來開放程式碼就是要讓越多人用越好, 請看到的人知道文章是打那裡來的, 可以順便到那裡看看有沒有其它對自己有幫助的資料. 就像我們的ruey版主會造訪各大論壇搜集好的文章, 我們只要做享其成就好了, 但有時看到的文章只是擷取重點而已, 還是會想到原始出處看看, 這樣可以得到更多的資料. 有像你們這麼熱心的人真好, 便宜了我們這裡"懶人", 有現成的文章寶藏可以看, 不用四處去挖寶, 所以, 有你們真好 ^^
_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
tch888



註冊時間: 2004-04-27
文章: 1


第 12 樓

發表發表於: 星期二 四月 27, 2004 3:45 pm    文章主題: 引言回覆

调试通过了,太好用了.
可惜有一点,需要通过输入用户名和密码,先登录主机.才能用.不够"傻瓜式"
不知道是不是我用法不对,请老大指教.
再有一点,如果主机没有开等无法连通的时候,个人认为应该增加一个"忽略"之类的选项,以便可以执行已经下载在本地的程序.
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
TIM001



註冊時間: 2004-04-29
文章: 4


第 13 樓

發表發表於: 星期四 四月 29, 2004 10:54 am    文章主題: 引言回覆

呵呵,這個提議的确不錯!
回頂端
檢視會員個人資料 發送私人訊息
goto-dream



註冊時間: 2004-05-11
文章: 909


第 14 樓

發表發表於: 星期六 六月 04, 2005 3:13 pm    文章主題: 引言回覆

剛剛發覺一各有趣的現象
在這行的runfile(mexe_name)

mexe_name這支程式....
最好不要設定_SCREEN.Visible=.F.
以免程式沒辦法正常執行


但是直接執行mexe_name這支程式,又OK

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
goto-dream



註冊時間: 2004-05-11
文章: 909


第 15 樓

發表發表於: 星期二 六月 14, 2005 2:47 pm    文章主題: 引言回覆

這裡也有一篇寫的還不錯喔~

LiveUpdate para Mirror de Datos en Red LAN,WAN

http://www.portalfox.com/modules.php?op=modload&name=News&file=article&sid=1114

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 1, 2  下一頁
1頁(共2頁)

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


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