命令中用到的范围: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.prgDECLARE INTEGER FindWindow IN WIN32API STRING,STRINGLOCAL cTitlecTitle="工资管理系统"IF FindWindow(0,cTitle)<>0 =MESSAGEBOX("该系统已运行,无需重复!",48,"错误信息") QUITENDIFCLEAR SCREENCLEARCLOSE ALLCLEAR ALLSET TALK OFFSET SYSMENU OFF &&使主菜单条不能被访问SET SYSMENU TO &&关闭主菜单条SET TALK OFF &&关闭对话框SET STEP OFFSET ECHO OFFSET 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 &mypathset path to &mypathDO form mm &&运行密码登录表单mmREAD EVENTSQUITPROCEDURE errhand PARAMETER merror,MESS,mess1,mprog,mlineno =MESSAGEBOX("错误代码:"+LTRIM(STR(merror))+", 错误信息:"+MESS+" 错误代码串:"+mess1+", 错误行号:"+LTRIM(STR(mlineno))+", 出错程序名:"+mprog +" 请退出系统!!!重新运行!!") QUIT RETURN如果不要菜单系统可把主表单作为顶层表单时要创建文件config.fpw内容为:sysmenu=offscreen=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.EXERUN /n7 rar a -Y bakfile b*.dbf c*.dbf... &&在后台最小化运行RAR.EXE且不等待。4、**-----------------**if bof() =messagebox(' 到最前一个了! ',0,' 提 示 ') goto topelse skip -1endif 5、**-----------------**if eof() =messagebox(' 到最后一个了! ',0,' 提 示 ') goto bottelse 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 quitENDIF 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 应发合计-扣除合计ENDIF13、**---------------------**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.REFRESHthis.SetFocus14、**----------------------**release extended aa_x && aa_x为内存变量,一定要加上extended,才真正释放15、**----------------------**数据表到文本use cxjgcopy to b type deli with " "useuse pappend 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 retuendif 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 elseENDIF 20、**-------------------**public 如果有重复调用代码时应在主程序“main.prg”定义全局变量21、**-------------------**导出xls文件SELE old_tmpcpath_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,' 提 示 ') retuendif 22、**-------------------**if nKeyCode=13 &&在密码文本框text的KeyPress方法上使“确定”执行 thisform.command1.clickendif23、**-------------------*************表单“释放对象时发生”事件的方法释放内存变量release extended aa_x && aa_x为内存变量,一定要加上extended,才真正释放**-------------------**24、用SQL-SCLECT 查询生成临时表是不能修改的。25、数据排序if used('gz') select gzelse use gz in 0 select gzendif ps_tm=ThisForm.Combo2.valueif 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 zapappend from ps_tmperase 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 prtmp30、设置打印机IF PRINTSTATUS()=.T. =SYS(1037)ELSE ??CHR(7) MESSAGEBOX("请在 Windows 控制面板下安装打印机!!!",48,"提示信息") RETURNENDIF

评论