分享

VFP常用命令及用法、实例

 天行健、 2017-10-25


命令中用到的范围:

ALL: 命令对表中所有记录起作用,即执行时从首记录到末记录,最记录指针停在数据库的末尾。 
NEXT <expN> 命令作用于从当前记录开始到当前记录后<expN>条记录为止的范围内的记录,最后记录指针指向作用范围内的最后一条记录处。NEXT 1表示仅作用于当前记录。 
Record <expN> 命令作用于记录号为<expN>的记录。 
TEST 命令作用范围从当前记录开始到表的最后一个记录为止

命令中的FOR子句只作用于满足条件的记录。   
 

一、基本命令

1. 打开和关闭数据表
   USE [<数据表名>]         当省略选项时为关闭当前数据表
   CLOSE ALL                关闭所有数据表

2. 选择当前工作区
   SELECT <工作区号|数据表名|0>
   功能:选择当前工作区。可以直接选择工作区号,也可通过指定其中已经打开的数据表别名来指定工作区。
         SELECT 0  是选择当前未使用的最低编号的工作区

3. 增加记录
    APPEND BLANK        在当前表的尾部追加一个空白记录
    INSERT BLANK        在当前表的当前记录之后插入一条空白记录
    INSERT BLANK BEFORE   在当前表的当前记录之前插入一条空白记录
   注意:在表建立索引后,INSERT的功能与APPEND相同

4. 替换字段的值
    REPLACE [范围] <字段1> WITH <表达式1>[, <字段2> WITH <表达式2>, ...<字段n> WITH <表达式n>] [FOR <expL>]
   功能:计算表达式的值,并填入指定字段,当范围和条件选项省略时只对当前记录操作。

5. 删除记录
   DELETE [范围] [FOR 条件]
   功能:对记录加删除标记(即逻辑删除),当范围和条件选项省略时只对当前记录操作。

   RECALL [范围] [FOR 条件]
   功能:对记录去除删除标记(即恢复删除),当范围和条件选项省略时只对当前记录操作。

   PACK
   功能:删除带有删除标记的记录

   ZAP
   功能:物理删除当前表所有记录

6. 建立索引与选择主控索引
   INDEX ON <关键字表达式> TAG <索引标识符> [DESCENDING]
   功能:对当前表按<关键字表达式>建立结构复合索引,索引文件名与表名相同,扩展名默认为CDX。DESCENDING选项为按关键字降序排列,默认为升序。

   SET ORDER TO TAG <索引标识符>
   功能:在结构复合索引文件打开后,指定主控索引标识符。

7. 记录指针定位
   GO BOTTOM | TOP | <expN>
   功能:移动记录指针直接指定记录。BOTTOM为指向末记录,TOP为指向首记录,<expN>为指向记录号为<expN>的记录。

   SKIP [expN]
   功能:按expN的值,从当前位置出发移动记录指针。当expN为正时向尾部方向移动expN条记录,当expN为负时向首部方向移动expN条记录,当expN为1时可以省略。

8. 查找
   LOCATE [范围] [FOR 条件]
   功能:在数据表的指定范围中搜索满足条件的第一个记录。搜索成功,记录指针指向该记录,并将FOUND()置为.T.;否则,记录指针指数据表末尾,并将FOUND()置为.F.。<范围>缺省为ALL。

   CONTINUE
   功能:查找下一个满足LOCATE命令指定条件的记录,查找成功,将FOUND()置为.T.并将指针指向满足条件的记录;否则,记录指针指数据表末尾,将FOUND()置为.F.。

9. 数据表复制
   COPY TO <文件名> [范围] [FIELDS <字段名表>] [FOR 条件]
   功能:把已打开的表内容复制到新的表中。<范围>缺省值为ALL。<字段名表>规定了新表字段,缺省为全部字段。

   COPY STRUCTURE TO <文件名> [FIELDS <字段名表>]
   功能:把当前表的结构复制到新的表中。不复制记录。<字段名表>规定了新表字段,缺省为全部字段。

10. 统计
   COUNT [范围] [FOR 条件] TO <内存变量>
   功能:统计表中满足条件的记录个数,并存入指定的内存变量。<范围>缺省时为ALL

   SUM [表达式表] [范围] [FOR 条件] TO <内存变量表>
   功能:统计表中全部的或指定数值字段的值的和,并各个和存入指定的内存变量,内存就是的个数求和的数值表达式个数相同。<范围>缺省时为ALL

   AVERAGE [表达式表] [范围] [FOR 条件] TO <内存变量表>
   功能:统计表中全部的或指定数值字段的值的平均,并各个和存入指定的内存变量,内存就是的个数求和的数值表达式个数相同。<范围>缺省时为ALL


二、函数
1. 数学函数
   ABS(expN)
   功能:求数值表达式的绝对值。

   INT(expN)
   功能:对数值表达式expN取整数部分

   ROUND(expN, Dec)
   功能:对数值表达式expN精确到小数点后Dec位。

2. 字符函数
   SUBSTR(expC, expN1, expN2)
   功能:取字符串expC中从expN1开始的expN2个字符,若expN2省略,则从expN1开始一直取到最后。

   TRIM(expC)
   功能:取掉字符串expC的尾部空格。

   ALLTRIM(expC)
   功能:取掉字符串expC首尾的空格。

   SPACE(expN)
   功能:产生expN个空格。

   UPPER(expC)
   功能:将字符串expC转换成大写。

   LOWER(expC)
   功能:将字符串expC转换成大写。

   expC1 $ expC2
   功能:判断字符串expC1是否在expC2中出现,若出现则值为.T.,否则为.F.。

3. 日期函数
   DATE()
   功能:获取系统日期。

4. 类型转换
   VAL(expC)
   功能:将数字字符值转换成数值,如:VAL('123.45')的值为数值123.45

   STR(expN [, 宽度 [, 小数位数]])
   功能:将数值转换成字符串,当小数位数省略时不带小数,当宽度和小数位数都省略时宽度为10不带小数。

   DTOC(expD)
   功能:将日期表达式expD转换成字符表达式,格式与系统日期格式一致。

   DTOS(expD)
   功能:将日期表达式expD转换成字符表达式,格式为YYYYMMDD,前4位为年份中间2位为月份最后2位为日。

   CTOD(expC)
   功能:将符合当前系统日期格式的字符串转换成日期值。

5. 测试函数
   FOUND()
   功能:测试当前的查找(SEEK, LOCATE, CONTINUE)是否成功。查找成功函值为.T.否则为.F.。

   EOF()
   功能:测试当前记录指针是否到了数据表的末尾。当在末尾时函数为.T.否则为.F.。

   RECNO()
   功能:返回当前记录号。

 

 

 

 

 

我的主程序代码:
main.prg
DECLARE INTEGER FindWindow IN WIN32API STRING,STRING
LOCAL cTitle
cTitle="工资管理系统"
IF FindWindow(0,cTitle)<>0
    =MESSAGEBOX("该系统已运行,无需重复!",48,"错误信息")
    QUIT
ENDIF
CLEAR SCREEN
CLEAR
CLOSE ALL
CLEAR ALL
SET TALK OFF
SET SYSMENU OFF  &&使主菜单条不能被访问
SET SYSMENU TO     &&关闭主菜单条
SET TALK OFF      &&关闭对话框
SET STEP OFF
SET ECHO OFF
SET SAFETY OFF &&文件替换时不确认
SET DELETED ON  &&隐藏带删标记的记录
SET OPTIMIZE ON  &&使用优化技术
SET CENTURY ON  &&年月日显示格式为4位,
SET DATE TO ANSI  &&日期格式为“年-月-日”
SET MARK TO "-"  &&设置年月日之间的分隔符

ON ERROR DO errhand WITH ERROR(),MESSAGE(),MESSAGE(1),PROGRAM(),LINENO()   &&在编译成exe文件时要使用
RELEASE WINDOW 常用
RELEASE WINDOW 表单设计器

mypath=SYS(5)+SYS(2003)
set DEFA TO &mypath
set path to &mypath
DO form mm &&运行密码登录表单mm

READ EVENTS
QUIT

PROCEDURE errhand
    PARAMETER merror,MESS,mess1,mprog,mlineno
    =MESSAGEBOX("错误代码:"+LTRIM(STR(merror))+", 错误信息:"+MESS+"  错误代码串:"+mess1+", 错误行号:"+LTRIM(STR(mlineno))+", 出错程序名:"+mprog +"   请退出系统!!!重新运行!!")
    QUIT
    RETURN
如果不要菜单系统可把主表单作为顶层表单时要创建文件config.fpw内容为:
sysmenu=off
screen=off
然后把该文包含进项目中,就可编译进EXE文件中,不必另外提供
退出系统”的按纽见第9点


1、**----------------**
save to <file> [all like]内存变量保存

    yfd=alltrim(ThisForm.Combo1.value)

    save to yf               &&将内存中的“所有”变量存入文件yf.mem 中
    
    save to yf all like yfd  &&将内存中所有以yfd匹配的变量存入文件yf.mem 中
    
    save to yf all like yf*  &&将内存中所有以yf打头的变量存入文件yf.mem 中
   
2、**-----------------**
restore from <file>
restore from nf.mem additive &&把内存变量从文件 nf.mem 恢复,选参数 additive 项时,不对其它内存变量产生复盖。

3、**-----------------**后台最小化运行RAR.EXE

RUN /n7 rar a  -Y bakfile  b*.dbf c*.dbf...  &&在后台最小化运行RAR.EXE且不等待。

4、**-----------------**
if bof()
    =messagebox('   到最前一个了!   ',0,'    提 示    ')
        goto top
else    
    skip -1
endif   

5、**-----------------**
if eof()
    =messagebox('   到最后一个了!   ',0,'    提 示    ')
        goto bott
else    
    skip 
endif    
6、**-----------------**
COPY TO dbk.dbf TYPE XL5 数据表复制成xls文件

7、**-----------------**
=messagebox('      完成!    ',0,'    提 示    ')

8、**------------------**
hzdx="零壹贰叁肆伍陆柒扒玖拾佰仟万拾佰仟亿拾佰仟"

9、**------------------**
IF MESSAGEBOX("真的退出系统吗?",4+32+256,"提示")= 6
    CLOSE DATABASES
        clear all
        close all
    CLEAR EVENTS
    thisform.Release 
    quit
ENDIF

10、**-------------------**
表数据更新:
update 表名 SET 字段名1 =表达式,字段名1 =表达式,...WHERE [条件]

11、**--------------------**
从其它表取数据:
把已有表的记录成批追加到当前表中
append from 文件名 [for  条件1] [while 条件2]

12、**--------------------**
ThisForm.grdGzk 的refresh &&表格内运算

IF USED("gzk")
  replace 应发合计  with 等级工资+责任津贴+奖资+干资+书报+单车+燃料+考勤+临职补贴+;
                         地区津贴+城市补贴+节支奖+奖励工资+清饮+洗理+电费+报刊+粮差+肉菜+;
                         劳保+职务保贴+出纳劳保+保健+医药+家属医药+妇卫+会计补贴+其它
  replace 扣除合计  with 水电+保险+工会+其他                       
  REPLACE 结余合计  WITH 应发合计-扣除合计
ENDIF

13、**---------------------**
ThisForm.grdGzk 的AfterRowColchange &&表格变色

Mcurrec=STR(RECN())  && 获取当前所在记录号
THIS.SETALL("dynamicbackcolor",'IIF(RECNO()=&Mcurrec.,RGB(145,236,252),RGB(255,255,255))') && 设置背景色,满足条件为黄色,不满足为黑色
THIS.SETALL("dynamicforecolor",'IIF(RECNO()=&Mcurrec.,RGB(255,0,0),RGB(0,0,0))',"column") && 设置前景色,满足条件为红色,不满足为白色
THIS.REFRESH
this.SetFocus

14、**----------------------**
release extended  aa_x  && aa_x为内存变量,一定要加上extended,才真正释放

15、**----------------------**数据表到文本
use cxjg
copy to b type deli with " "
use
use p
append from b type deli with '|' &&********文本到数据表
repl all zd  with stuff(zd,1,3,"") &&******对数据表中的字段修改内容
REPL all zd WITH STRTRAN(zd,'m',',')
REPL all zd WITH STRTRAN(zd,' ','')

16、**-----------------------**
if empty(ThisForm.Text1.value)
   =messagebox('    文件名不能为空!    ',0,'     提 示     ')
    ThisForm.Text1.setfocus
   retu
endif

17、**-----------------------**数据表记录转成文本行,使用低级函数fwrite(),fclose()
    ...
    use p
     goto top
     wait wind "  正在转入数据文件到软盘,请等候...... " nowait at 22,43
     scan
     za=alltrim(zd) &&去掉表p.dbf字段“zd”内容的前后空格
      if fwrite(eff,za+chr(13)+chr(10))=0 &&chr(13)为回车,chr(10)为换行 ------------重点
         =messagebox('磁盘已经损坏失效!请换盘!重试!',0,'        提 示    ')
      else         
      endif
      endscan
      =fclose(eff)
      wait clear
      =messagebox('数据成功转入软盘,文件名为:'-("&cpath_n")-'!',0,'    提 示    ')
   endif
   ...
18、**-------------------**
         public _Totalpage
          _Totalpage=0
          report form dy1 noconsole
          _Totalpage=_pageno         &&得总页数
         REPORT FORM dy1 to printer prompt noconsole  && dy1打印表单
         DO FORM rpform &&  RPFORM 是最大化且防止其它窗口遮挡表单的表单
         REPORT FORM dy8 PREVIEW WINDOW RPFORM &&dy8
         RPFORM.RELEASE()
19、**-------------------**备份数据、软盘写保护及损坏检测
IF MESSAGEBOX("真的备份本月数据吗?",4+32+256,"提示")= 6
   restore from nf.mem additive  &&  nf.MEM  保存年份内存变量的文件(4位如2004)
   restore from yf.mem additive  &&  yf.MEM  保存月份内存变量的文件(2位如06)
******文件压缩
    CLOSE DATABASES
    m_af=nfd+yfd
    m_bf=m_af+".rar"
    IF FILE("&m_bf")
        ERASE &m_bf
    ENDIF
    RUN /n7 rar a  -Y &m_bf  b*.dbf c*.dbf g*.dbf j*.dbf *.mem p.dbf r*.dbf tmp.dbf
    WAIT WINDOW "正在压缩文件,请稍等……" NOWAIT AT 20,30
    cOK=.F.
    nSj_m1=MINUTE(DATETIME())
    nSj_1=nSj_m1*60+SEC(DATETIME())
    nSj_2=nSj_1
    DO WHILE .T.
        IF FILE("&m_bf")  &&如果存在文件xxx.rar 且文件大于100字节,则压缩成功。
            =ADIR(m_aa1,m_bf )
            IF m_aa1[2]>100
                cOK=.T.
                EXIT
            ENDIF
        ENDIF
        nSj_m2=MINUTE(DATETIME())
        IF nSj_m2<nSj_m2
            nSj_2=nSj_m2*60+3600+SEC(DATETIME())
        ELSE
            nSj_2=nSj_m2*60+SEC(DATETIME())
        ENDIF
        IF nSj_2-nSj_1>180   && 如果3分钟后不成功则退出
            cOK=.F.
            EXIT
        ENDIF
    ENDDO
    WAIT CLEAR
    IF !cOK
        MESSAGEBOX("文件压缩失败!请检查。",16 ,"错误信息")
        RETURN
    ENDIF
********复件rar文件
IF MESSAGEBOX("请插入磁盘,按“确定”继续,退出按“取消”",1+32,"请选择") = 1
   close database
    wait wind "正在检测 A:软盘..." nowait at 20,30
    X=Adir(Myml,'a:\nul')
    IF X#0
       ef=fcreate('a:\备份时间.txt')
       if ef<0
          wait clear
          =messagebox('磁盘写保护!或已经损坏失效!',0,'        提 示    ')
       else
          if fwrite(ef,'备份数据文件的时间是:'+dtoc(date()))=0
             =messagebox('磁盘已经损坏失效!请换盘!重试!',0,'        提 示    ')
          else
          endif
          =fclose(ef)
         wait wind "正在备份数据文件到软盘,请等候......" nowait at 20,30
         copy file &m_bf  to a:
         wait clear
         =messagebox('     数据备份完成!    ',0,'    提 示    ')
         ERASE &m_bf
       endif
    ELSE
        wait clear
        =messagebox('     磁盘没有准备好!    ',0,'    提 示    ')
        retu
    ENDIf 
else
  retu    
endif    
else
ENDIF

20、**-------------------**
public  如果有重复调用代码时应在主程序“main.prg”定义全局变量

21、**-------------------**导出xls文件
SELE old_tmp

cpath_name=GETFILE('xls','文件名','保存')  &&重点

IF !EMPTY(cpath_name)
    if file("&cpath_name")
       =messagebox('文件已存在!请重输新名 ',0,'    提 示    ')
    else   
      COPY TO &cpath_name TYPE XL5   &&重点
      =messagebox('成功导出为文件'-("&cpath_name")-'!',0,'    提 示    ')
    endif 
else
  =messagebox('文件名不能为空! ',0,'    提 示    ')
  retu
endif     

22、**-------------------**
if nKeyCode=13     &&在密码文本框text的KeyPress方法上使“确定”执行
   thisform.command1.click
endif

23、**-------------------**
***********表单“释放对象时发生”事件的方法释放内存变量
release extended  aa_x  && aa_x为内存变量,一定要加上extended,才真正释放

**-------------------**
24、用SQL-SCLECT 查询生成临时表是不能修改的。

25、数据排序

if used('gz')
   select gz
else 
   use gz in 0
   select gz
endif   
ps_tm=ThisForm.Combo2.value
if  ThisForm.Optiongroup2.value=1 &&升序
    sort to ps_tmp on &ps_tm /A  &&按ps_tm的值的字段按升序重排
else
    sort to ps_tmp on &ps_tm /D  &&&&按ps_tm的值的字段按降序重排
endif    
select gz 
zap
append from ps_tmp
erase ps_tmp.dbf
=messagebox('    重新排序完成!要恢复原来请按编号升序排序!    ',0,'     提 示     ')
26、向表格添加新记录
将表格的AllowAddNew属性设置为“T”用户选择最后一记录按下DOWN ARROW键
时就添加了新记录;或将AllowAddNew属性设置为“F”使用APPEND BLANK或INSERT添加

27、表格列中加入控件
在“属性”窗口的“对象”框中为控件选择列如:选择第二列“Column2”,再选择要加
入的控件单击该列,(注:复选框的“Caption=" "”)并设该列(Column2)的“Sparse=.F.”
该列(Column2)的“数据”的“CurrentControl”选择为刚加入的控件名称即可。
28、移去表格中的控件
在“属性”窗口“对象”中选择要移去的控件,激活“表单设计器(单击表单设计器上
兰横条)”按DELETE键即可.
29、SQL查询满足条件的记录生成dbf数据表文件
SELECT * FROM fhz WHERE SUBSTR(账号,1,11)=m_JGM+'012' AND 组号=m_zuh AND 类型=1 ORDER BY 账号 INTO TABLE prtmp
30、设置打印机
IF PRINTSTATUS()=.T.
   =SYS(1037)
ELSE     
  ??CHR(7)
  MESSAGEBOX("请在 Windows 控制面板下安装打印机!!!",48,"提示信息")
  RETURN
ENDIF
**************************************************************************************************
**************************************************************************************************

vfp 函数大全整理(转)

一.字符及字符串处理函数:字符及字符串处理函数的处理对象均为字符型数据,但其返回值类型各异.
  1.取子串函数:
  格式:substr(c,n1,n2)
  功能:取字符串C第n1个字符起的n2个字符.返回值类型是字符型.
  例:取姓名字符串中的姓.
  store \"王小风\" to xm
  ?substr(xm,1,2)
  结果为:王
  2.删除空格函数:以下3个函数可以删除字符串中的多余空格,3个函数的返回值均为字符型.
  trim(字符串):删除字符串的尾部空格
  alltrim(字符串):删除字符串的前后空格
  ltrim(字符串):删除字符串的前面的空格
  例:去掉第一个字符串的尾空格后与第二个字符串连接
  store \"abcd \" to x
  store \"efg\" to y
  ?trim(x)+y
  abcdefg
  3.空格函数:
  格式:space(n)
  说明:该函数的功能是产生指定个数的空格字符串(n用于指定空格个数).
  例:定义一个变量dh,其初值为8个空格
  store space(8) to dh
  4.取左子串函数:
  格式:left(c,n)
  功能:取字符串C左边n个字符.
  5.取右子串函数:
  格式:right(c,n)
  功能:取字符串c右边的n个字符
  例:a=\"我是中国人\"
  ?right(a,4)
  国人
  ?left(a,2)
  我
  6.empty(c):用于测试字符串C是否为空格.
  7.求子串位置函数:
  格式:At(字符串1,字符串2)
  功能:返回字符串1在字符串2的位置
  例:?At(\"教授\",\"副教授\")
  2
  8.大小写转换函数:
  格式:
  lower(字符串)
  upper(字符串)
  功能:lower()将字符串中的字母一律变小写;upper()将字符串中的字母一律变大写
  例:
  bl=\"FoxBASE\"
  ?lower(bl)+space(2)+upper(bl)
  foxbase FOXBASE
  9.求字符串长度函数:
  格式:len(字符串)
  功能:求指定字符串的长度
  例:a=\"中国人\"
  ?len(a)  
    6
 二.数学运算函数:
  1.取整函数:
  格式:int(数值)
  功能:取指定数值的整数部分.
  例:取整并显示结果
  ?int(25.69)
  25
  2.四舍五入函数:
  格式:round(数值表达式,小数位数)
  功能:根据给出的四舍五入小数位数,对数值表达式的计算结果做四舍五入处理
  例:对下面给出的数四舍五入并显示其结果
  ?round(3.14159,4),round(2048.9962,0),round(2048.9962,-3)
  3.1416 2049 2000
  3.求平方根函数:
  格式:sqrt(数值)
  功能:求指定数值的算术平方根
  例:?sqrt(100)
  10
  4.最大值、最小值函数:
  格式:
  Max(数值表达式1,数值表达式2)
  Min(数值表达式1,数值表达式2)
  功能:返回两个数值表达式中的最大值和最小值
  例:
  x1=123.456
  x2=234.567
  ?max(x1,x2)
  234.567
  ?min(x1,x2)
  123.456
  5.求余数函数:
  格式:mod(表达式1,表达式2)
  功能:求表达式1对表达式2的余数
  例:
  ?mod(10,3)
  1
  6.求指数、对数函数:
  格式:
  exp(数值表达式)
  log(数值表达式)
  功能:
  (1).exp()计算自然数e??表达式的值为指数的幂
  (2).log()计算表达式值的自然对数,返回lnx的值.
  例:
  x=1
  y=exp(x)
  ?exp(x),log(x)
  2.72 1
三.转换函数:
  1.数值转数字字符串函数:
  格式:str(n,n1,n2)
  功能:将数值n转换为字符串,n1为总长度,n2为小数位
  例:?str(321.56)
  322 &&隐含四舍五入取整转换为字符型数据
  ?str(321.56,6,2)
  321.56
  2.字符转数值函数:
  格式:val(s)
  功能:将数字字符串s转换为数值
  例:x=\"23\"
  y=\"76\"
  ?val(x)+val(y)
  100
  3.字符转日期函数:
  格式:ctod(c)
  功能:将日期字符串c转换为日期
  例:set date ansi &&日期格式设为美国标准化协会格式
  ?ctod(\"^2005.11.14\")
  2005.11.14
  4.日期转字符函数:
  格式:dtoc(d)
  功能:将日期d转化为日期字符串
  例:将日期型数据转化为字符型日期数据并显示汉字日期.
  set century on &&开启世纪前缀,即日期中年份用4位表示
  set date ansi
  rq={^2005.11.14}
  rq=dtoc(rq)
  ?substr(rq,1,4)+\"年\"+substr(rq,6,2)+\"月\"+substr(rq,9,2)+\"日\"
  2005年11月14日
  5.时间转字符函数:
  格式:ttoc(时间)
  功能:将时间转为时间字符串
  6.字符转时间函数:
  格式:ctot(c)
  功能:将时间字符串转化为时间
  7.字符串替换函数:
  格式:stuff(<字符表达式1>,<起始位置>,<字符个数>,<字符表达式2>)
  功能:从指定位置开始,用<表达式2>的值去替换<表达式1>中指定个数字符.若<字符个数>为零,直接插入;若<表达式2>为空字符串,则删除<表达式1>中指定个数的字符.
  例:X=\"祝大家新年好!\" 
  ?stuff(X,7,4,\"春节\")
  祝大家春节好
  ?stuff(X,11,0,\"春节\")
  祝大家新年春节好
  ?stuff(x,7,4,\" \")
  祝大家好
  8.字符转ASCⅡ码函数:
  格式:Asc(<字符表达式>)
  功能:把<字符表达式>左边第一个字符转成相应的ASCⅡ码值
  例:x=\"Foxpro\"
  ?Asc(x),Asc(lower(x))
  70 102
  9.ASCⅡ码值转字符函数:
  格式:chr(数值表达式)
  功能:把数值转成相应的ASCⅡ码字符,返回值为字符型
  例:?chr(70)+chr(111)+chr(111+9)
  Fox
四.日期函数:
  1.系统日期函数:
  格式:date()
  功能:给出系统的当前日期,返回值是日期型数据.
  例:显示系统日期
  ?date()
  11/14/05
  set date ansi
  set century on
  ?date()
  2005.11.14
  2.年、月、日函数:
  格式:(1).year(日期表达式):从日期表达式中返回一个由四位数字表示的年份.
  (2).month(日期表达式):从日期表达式中返回一个用数字表示的月份.
  (3).day(日期表达式):从日期表达式中返回一个用数字表示的日数.
  例:测试系统日期
  rq=date()
  ?year(rq),month(rq),day(rq)
  2005 11 14
  3.系统时间函数:
  格式:time()
  功能:得到当前时间字符串
  例:?time()
  20:32:26
  4.系统日期时间函数:
  格式:datetime()
  功能:得到当前日期时间
  例:?datetime()
  2005.11.14 08:35:12 PM
  5.星期函数:
  格式:dow(日期表达式)
  cdow(日期表达式)
  功能:dow用数字表示星期,1表示星期日,7为星期六;cdow用英文表示星期
  例:?date()
  2005.11.15
  ?dow(date()),cdow(date())
  3 Tuesday
五.测试函数:
  1.测试文件尾函数:
  格式:eof([n])
  说明:
  (1).n指定被测工作区号,其范围为1~32767
  (2).该函数用于测试指定工作区中的表的记录指针是否指向文件尾,是则返回真值;否则返回假值;省略可选项指当前工作区.
  例:测试文件记录指针是否指向文件尾
  use 职工档案
  go bottom
  ?eof()
  .F.
  skip
  ?eof()
  .T.
  2.测试文件头函数:
  格式:bof([n])
  说明:
  (1).n指定被测工作区号,其范围为1~32767
  (2).用于测试指定工作区中的表的记录指针是否指向文件头,是则返回真值;否则返回假值;省略可选项指当前工作区.
  例:测试记录指针是否指向文件头
  use 职工档案
  go top
  ?bof()
  .f.
  skip -1
  ?bof()
  .t.
  3.测试当前记录号函数:
  格式:recno()
  功能:得到当前的记录号
  例:
  use 职工档案
  ?recno()
  1
  skip
  ?recno()
  2
  4.测试表文件记录数函数:
  格式:reccount()
  功能:得到表的记录数
  例:测试\"职工档案\"表的记录数
  use 职工档案
  ?reccount()
  5
  5.测试表字段数函数:
  格式:fcount()
  功能:得到当前的字段数
  例:测试\"职工档案\"表共有多少个字段
  use 职工档案
  ?fcount()
  9
  6.测试查找记录是否成功函数:
  格式:found()
  功能:测试find、seek和locate命令查找记录是否成功.如成功则返回真值,否则为假值.
  例:在\"职工档案\"表中查找\"小刚\"的文化程度
  use 职工档案
  locate for 姓名=\"小刚\"
  ?found()
  .t.
  display
  7.文件测试函数:
  格式:file(字符表达式)
  功能:测试字符表达式指定的文件是否存在
  例:?file(\"e:\\myvfp\\职工档案.dbf\")
  .t.
  8.数据类型测试函数:
  格式:type(字符表达式)
  功能:测试表达式的数据类型,返回大写字母:N(数值)、C(字符)、L(逻辑)、D(日期)、M(备注)
  例:
  x=1236
  y=\"hello\"
  ?type(\"x\")
  N
  ?type(\"y\")
  C
  9.测试工作区函数:
  格式:select()
  功能:返回当前工作区的区号
  10.测试别名函数:
  格式:alias()
  功能:测试当前工作区的别名
  例:
  select 1
  use 职工档案 alias zgda
  select 2
  use 工资情况
  ?alias()
  工资情况 &&打开表时,不指定别名,表名即为别名
  select zgda &&通过别名选择工作区
  ?select()
  1
  11.表文件名函数:
  格式:dbf()
  功能:返回当前工作区打开的表名
  例:
  use 工资情况
  ?dbf()
  e:\\myvfp\\工资情况 
六.其它函数:
  1.宏替换函数:
  格式:&变量名
  说明:vfp中只有宏替换函数没有括号.功能是返回指定字符型变量中所存放的字符串.
  例:为\"工资情况\"表中每个人加100元工资
  gz=\"工资\"
  use 工资情况
  replace all &gz with &gz+100
  2.条件函数:
  格式:iif(表达式,表达式1,表达式2)
  功能:若表达式值为真,则返回表达式1的值;否则返回表达式2的值;函数返回值类型与表达式1或表达式2类型一致 
  a=3
  b=5
  ?iif(a>b,\"高兴\",\"开心\")
  开心
  3.消息框函数:
  格式:messagebox(提示文本[,对话框类型[,对话框标题文本]])
  功能:显示提示对话框
  说明:
  (1)对话框类型见表1:
  对话框类型功能
  0仅\"确定\"按钮
  1\"确定\"和\"取消\"按钮
  2\"终止\",\"重试\"和\"忽略\"按钮
  3\"是\",\"否\"和\"取消\"按钮
  4\"是\"和\"否\"按钮
  5\"重试\"和\"取消\"按钮
  16stop图标
  32?图标
  48!图标
  64i图标
  0默认第1个按钮
  256默认第2个按钮
  512默认第3个按钮
  (2).返回值见表2:
  返回值按钮
  1确定
  2取消
  3终止
  4重试
  5忽略
  6是
  7否
  例:分析messagebox(\"您确实要退出系统吗?\",4+64,\"提示信息\")会弹出什么样的窗口.
  分析:回头观察此函数的格式,弹出的对话框中的提示文本是\"您确实要退出系统吗\",对话框标题是\"提示信息\",
  函数中间有\"4+64\",其中4指定对话框中出现\"是\"和\"否\"两个按钮(见表1),64指定对话框中出现i图标(见表2)
  ok,我们在命令窗口依次执行下列命令:
  tui=messagebox(\"您确实要退出系统吗?\",4+64,\"提示信息\")
  &&变量tui用于接收messagebox函数的返回值,弹出的窗口如图1
  ?tui
  &&变量tui值取决于运行时用户点了哪个按钮,如果点了\"是\",返回6,如果点了\"否\",返回7,见表2
  说明:实际应用中,我们常在系统菜单或在表单的\"退出\"按钮中添加如下代码:
  tui=messagebox(\"您确实要退出系统吗?\",4+64,\"提示信息\")
  if tui=6 &&如果此条件成立,说明用户点了\"是\"按钮,执行quit命令,安全退出
  quit
  endif

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多