VFP 筆記 Visual FoxPro Note

本網頁以打造無障礙閱讀為目標,可以用任何瀏覽器來觀看本網頁


簡介

VFP基本語法 vs. VFP的SQL語法

操作 VFP基本語法 VFP的SQL語法
瀏覽資料庫 use emp
browse
select * from emp
設定條件瀏覽資料庫 use emp
browse for salary>50000
select * from emp where salary>50000
建立資料庫 create emp CREATE TABLE emp (id c(6))
修改紀錄 use emp
replace salary with 60000 for name="Peter"
update emp set salary=60000 where name="Peter"
新增紀錄 use emp
append blank
replace name with "Tom"
INSERT INTO emp (name) values ("Tom")
刪除紀錄 use emp
delete for name="Tom"
delete from emp where name="Tom"

OLE/COM/ActiveX的使用

COM元件的註冊

就微軟的DCOM技術而言,可供重複使用的control必須先在 Windows 中註冊才能使用,註冊control一般來說有5種方法,它們有各自的優點,運用範圍也不同。

使用安裝程式註冊

使用regsvr32.exe註冊

利用微軟系統提供的regsvr32.exe可註冊指定的元件,若成功註冊,會跳出一視窗「DllRegisterServer in xxx.ocx succeeded」,若解除成功則會跳出「UnDllRegisterServer ...........」代表成功的執行了元件內部的註冊函數DllRegisterServer或解註冊函數UnDllRegisterServer。

使用VFP註冊

使用元件本身的註冊函數

VFP連接Sql Server的範例

*********************
* SQL Server 連結設定
*********************
lcUserName="sa"
lcServerName="127.0.0.1"
lcUserPass="123456"
lcDBName="master"
ConnectionHandle=SQLSTRINGCONNECT([DRIVER=SQL Server;SERVER=]+lcServerName+[;DATABASE=]+lcDBName+[;UID=]+lcUserName+[;PWD=]+lcUserPass )
if ConnectionHandle <= 0
    messagebox('無法連接至 SQL SERVER ('+ lcServerName +')',16,"SQL Connect Error" )
    quit
endif

*********************
* 執行 SQL
*********************
SQLCOMMAND="select a.uname, a.upass, a.udep ,s.address ;
from admin a, schools s where a.uname=s.scode and s.scode = '034729'"
mret=sqlexec(ConnectionHandle,SQLCOMMAND)
if mret<=0
    messagebox('sql敘述執行失敗' )
    quit
endif
*********************
* 取回後處理
*********************
copy to tmp\tmp.dbf
browse
*********************
* 離線與關閉
*********************
mret=SQLDISCONN(ConnectionHandle)
if mret<=0
    messagebox('離線失敗' )
    quit
endif

VFP讀寫與開啟excel的範例

開啟Excel 檔的範例

Exl_file = GETFILE('XLS', '選擇或取消', '選擇', 0, '請選擇要開啟的Excel檔')
DO CASE
CASE EMPTY(Exl_file)
Messagebox("並未選擇要開啟的Excel檔",1+32,"訊息視窗")
QUIT
OTHERWISE
? "你選擇要開啟的Excel檔是 "+Exl_file
ENDCASE
oExl=CREATEOBJECT("Excel.application")
if VARTYPE(oExl) <> "O"
= MESSAGEBOX("EXCEL沒有安裝或損壞或因為記憶體不足而無法使用!",64,"提示")
return
endif
oExl.SheetsInNewWorkbook?=1
oExl.Visible=.T.
oExl.workbooks.Open('&Exl_file')
oExl.activesheet.rows(1).insert
oExl.activecell.formular1c1 = "表頭"
with oExl.SELECTION.font
.name = "細明體"
.fontstyle = "normal"
.size = 20
.strikethrough = .f.
.superscript = .f.
.subscript = .f.
.outlinefont = .f.
.shadow = .f.
endwith

讀入Excel 檔的範例

Exl_file = GETFILE('XLS', '選擇或取消', '選擇', 0, '請選擇要讀入的Excel檔')
DO CASE
CASE EMPTY(Exl_file)
Messagebox("並未選擇要讀入的Excel檔",1+32,"訊息視窗")
QUIT
OTHERWISE
? "你選擇要讀入的Excel檔是 "+Exl_file
ENDCASE
import from &Exl_file Type xl8
browse

寫出為Excel檔的範例(含欄位名稱)

use Student
copy to stu_info type XL5

寫出為CSV 檔的範例(含欄位名稱)

use Student
copy to stu_info type CSV

寫出為文字檔的範例1(不含欄位名稱)

use Student
copy to stu_info type DELIMITED

寫出為文字檔的範例2(不含欄位名稱)

use Student
copy to stu_info type SDF

使用技巧

抓取指定目錄下的所有檔案

counter=adir(testarray,'*.txt')
dimension myarray(counter,5)
counter=adir(myarray,'*.txt')
for i =1 to counter
   filename=myarray(i,1)
   ? filename
next

錯誤攔截

ON ERROR DO errhand WITH ERROR(), MESSAGE(), MESSAGE(1), PROGRAM( ),LINENO( ) && Trap OLE & other errors.

******************************************
* 說 明:錯誤處理程式
******************************************
PROCEDURE errhand
PARAMETER merror, mess, mess1, mprog, mlineno
CLEAR
IF merror=1426
mlineno=LTRIM(STR(LINENO()))
merror=LTRIM(STR(merror))
MESSAGEBOX("發生了一個OLE的錯誤,例如:呼叫的OLE程式重複開啟了檔案 "+CHR(13)+;
"Usually this is caused by quitting Word or canceling out of a dialog box in Word. "+CHR(13)+;
"錯誤訊息為:"+mess)
ELSE
mlineno=LTRIM(STR(LINENO()))
merror=LTRIM(STR(merror))
MESSAGEBOX("發生錯誤在程式第"+mlineno+"行"+CHR(13)+;
"錯誤訊息為:"+mess+" 錯誤代碼為"+merror)
ENDIF
ON ERROR
quit
RETURN

設定預設目錄

cCurrentProcedure = SYS(16,1)
nPathStart = AT(":",cCurrentProcedure)- 1
nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart) + 1
SET DEFAULT TO (SUBSTR(cCurrentProcedure, nPathStart, nLenofPath))

跳出對話視窗選擇檔案

gcXLS=GETFILE('XLS', '選擇或取消', '選擇', 0, '請選擇要處理的 Excel 檔')
DO CASE
   CASE EMPTY(gcXLS)
      Messagebox("並未選擇要處理的 Excel 檔",1+32,"訊息視窗")
      QUIT
   OTHERWISE
      ? "你選擇要處理的 Excel 檔是 "+gcXLS
ENDCASE

偵測目錄存在與否,若不存在則建立之

IF !DIRECTORY("tmp")
   MKDIR tmp
ENDIF

網路資源

主 網 站:http://peterju.notlong.com (目前轉址至 http://irw.ncut.edu.tw/peterju/) Sitetag Logo

Level Triple-A conformance icon | [歡迎使用任何作業系統、瀏覽器觀看!] | Valid XHTML 1.0 Transitional | Valid CSS! | [Valid RSS] | [創意公眾許可証]
This work is licensed under a Creative Commons License