标题:请将你自己做的VFP的技巧传上来
只看楼主
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
结帖率:100%
 问题点数:0 回复次数:22 
请将你自己做的VFP的技巧传上来
事由:
常常见到狐友为某些小的不如意而痛苦,也常见狐友取得一点进步而顿感成功。也许你的成功正好能帮助别的狐友的克服苦恼。建议将你自己做的VFP的技巧传上来,大家分享。当然你看到的某人做的东西也可以拿来分享,只是要注明作者和出处才是。

内容:
1.良好的编程习惯
2.解决问题的良好的思路
3.简洁的代码
4.高效的程序
5.意想不到的诀窍
6.其他

要求:
或仅仅是看看,学习学习;或者尽你自己所能,发点技巧上来,与狐友分享;或者发点心得过来,共同进步。但不要在这里灌水,关心每一个帖子,吸取每一个精华,奉献每一个爱心,需要你我的努力。


先来一个吧。关于程序设计格式的。
一般地,做了程序以后,如果遇到存在问题,要找到问题所在的话,好象不是一件容易的事情。我的通常的做法就是写成锯齿结构。这样就便于检查结构是否完整,根据不同的情况判断错误或有错误隐患的命令到底可能会出现在哪个语句块等。

循环语句(一):如计算1+...+100=?
STORE 0 TO SUM1,I
DO WHILE I<100
I=I+1
SUM1=SUM1+I
ENDDO
?SUM1

循环语句(二):
FOR 变量=起始值 TO 终止值 STEP 步长
...
...
ENDFOR

循环语句(三):
SCAN FOR <条件>
...
...
ENDSCAN

条件语句(一):如判断是否及格
IF 语文>=60
?"及格"
ELSE
?"不及格"
ENDIF

条件语句(二):如判断是第几个季度
N=MONTH(DATE())
DO CASE
CASE N<=3
?"第一季度"
CASE N<=6
?"第二季度"
CASE N<=9
?"第三季度"
CASE N<=12
?"第四季度"
OTHERWISE &&本句没有用,可删除
?"不合法的日期"
ENDCASE

复合结构:比如判断一个数321是否为素数
N=321
OK=.T.
FOR I=2 TO SQRT(N)
IF MOD(N,I)=0
OK=.F.
EXIT
ENDIF
ENDFOR
IF OK=.T.
?"N=",N,"是素数"
ELSE
?"N=",N,"是合数"
ENDIF

[此贴子已经被作者于2006-7-23 18:59:27编辑过]

搜索更多相关主题的帖子: VFP 技巧 事由 诀窍 心得 
2006-07-23 18:24
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
得分:0 
IF 语文>=60
?"及格"
ELSE
?"不及格"
ENDIF
可否改成:IFF(成绩>=60,及格,不及格)

我也传一个:在鼠标点击Grid时,相应的行变成反白显示:
在Grid 的AfterRowColChange事件输入以下代码:
Lparameters nColIndex
Local m_recn,m_recnnum,m_i
m_recn=recn()
M_RECNSTR=ALLTRIM(STR(m_recn))
For m_i=1 to THIS.ColumnCount
This.columns[M_I].DynamicForeColor="IIf(recn()="+M_RECNSTR+",RGB(255,255,255),RGB(0,0,0))"
This.columns[M_I].DynamicbackColor="IIf(recn()="+M_RECNSTR+",RGB(0,0,0),RGB(225,225,225))"
Endfor
This.REFRESH

[此贴子已经被作者于2006-7-24 10:18:45编辑过]


两人行已有我师……
2006-07-24 10:12
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
得分:0 


thisform.Grid1.SetAll("DynamicBackColor","IIF(rec=recno(),RGB(100,200,255),IIF(MOD(RECNO(),2)=0,RGB(240,255,180),RGB(100,255,192)))","Column")

试试这句~~~~~~当前的记录以RGB(100,200,255)显示,其它隔行换色~~~~
不需要循环.

[此贴子已经被作者于2006-7-25 10:19:39编辑过]

2006-07-25 10:16
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
得分:0 

高!


两人行已有我师……
2006-07-26 16:01
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
得分:0 

好象是什么FormInForm.......... [转自http://www.programfan.com/club/showbbs.asp?id=182653] Vii就是我~~~~


以下尽我所能讲解下,初学请看,高手移步~~~~~~
1:设计一个主窗体,显示模式为 顶层

2:设计左窗体(name属性为:frmleft),设计右窗体(name属性为:frmright),其他属性随意。

3:在主窗体的Activate过程加入以下代码

IF TYPE("thisform.oToolbar")="O" AND !ISNULL(thisform.oToolbar)
RETURN
ENDIF
SET CLASSLIB TO ToolBar additive
this.AddProperty("otoolbar","")
thisform.otoolbar =createObject("mytoolbar")
thisform.otoolbar.show()
RELEASE CLASSLIB toolbar

*以上这段为加入TOOLBAR,如无须此功能可删除,设计TOOLBAR类请参考其他有关资料。


DEFINE WINDOW frmlchild FROM 0,0 TO 38,30 //定义左窗体(frmlchild),此窗体非设计时的frmleft窗体,而是frmleft窗体要激活的父窗体,下同。
ACTIVATE WINDOW frmlchild IN WINDOW (thisform.name)//在主窗体激活该左窗体

DEFINE WINDOW frmrchild FROM 0,30 TO 38,105
ACTIVATE WINDOW frmrchild IN WINDOW (thisform.name)


DO FORM 'D:\hgfeng\Temp\frmleft.scx' noshow //运行设计好的左窗体,路径请自行设定。(我的为VFP9.0,如无NOSHOW请删除)

ACTIVATE WINDOW ('frmleft') IN WINDOW ('frmlchild')//在左窗体(frmlchild)激活左窗体(frmleft,设计的左窗体),下同

DO FORM 'D:\hgfeng\Temp\frmright.scx' noshow
ACTIVATE WINDOW ('frmright') IN WINDOW ('frmrchild')


如有疑问,请联系QQ:69160346

[此贴子已经被作者于2006-7-27 9:51:13编辑过]

2006-07-27 09:44
fyyylyl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:16
帖 子:287
专家分:676
注 册:2006-5-22
得分:0 
很多狐友要用到控制POS打印机及开启钱箱的程序,现贴上来:
Use 数据表
Sum 金额 To 合计金额
Go Top
my_open = FOPEN("LPT1",1) &&打开通讯口
=FWRITE( my_open , " 购物明细 №:"+单据号+CHR(10))
=FWRITE( my_open , "---------------------------------------"+ CHR(10))
=FWRITE( my_open , "品名 数量 单位 单价 金额"+ CHR(10))
=FWRITE( my_open , "---------------------------------------"+ CHR(10))
Do Whil !Eof()
=FWRITE( my_open , 商品名称+Str(数量,4)+" "+单位+" "+Str(单价,6,1)+" "+Str(金额,8,1)+CHR(10))
Skip
Enddo
=FWRITE( my_open , CHR(10))
=FWRITE( my_open , "---------------------------------------"+ CHR(10))
=FWRITE( my_open , "合计金额:"+Alltrim(Str(合计金额,8,1))+CHR(10))
=FWRITE( my_open , "谢谢惠顾 收银员:"+Alltrim(收银员)+CHR(10))
=FWRITE( my_open , CHR(10)) &&换行,即空行,根据用纸大小适当增减
=FWRITE( my_open , Chr(27)+"p"+Chr(0)+Chr(60)+Chr(255))&&打开钱箱
=FCLOSE(my_open) &&关闭

[此贴子已经被作者于2006-7-29 18:10:01编辑过]


2006-07-29 18:08
hdzqs
Rank: 1
等 级:禁止访问
帖 子:218
专家分:0
注 册:2006-4-25
得分:0 
**福彩快乐8数据整理程序
** klbtxt文件klb为备注字段
**下列程序可把网上的历史数据自动转入数据表中(kl8),kltxt为中间数据文件,txt字段设置较长100
**字段名qh(期号,8),rq(日期,10),jh(开奖号,60),参考实际数据
sele klbtxt
if recc()=0
retu
endi
copy memo klb to mtxt.txt
sele 1
use cptxt excl
dele all
pack
sele 1
appe from mtxt.txt sdf
go 9
mrq=subs(txt,3,10)
use cptxt excl
repl qh with subs(txt,1,6) all
repl jh with subs(txt,8,60) all
repl rq with mrq all
dele for val(subs(txt,1,2))=0
pack
sele 2
use kl8 excl
dele for jh=" "
pack
sele 1
go top
do whil .not.eof()
mrq=rq
mjh=jh
mqh=qh
sele 2
loca all for qh=trim(mqh)
if .not.foun()
appe blan
repl rq with mrq,jh with mjh,qh with mqh
endi
sele 1
skip
endd
use
dele file mtxt.txt

把您的需求变成我们的信息 让我们的信息成为您的财富
2006-08-04 11:37
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:0 
在梅子论坛看到一个帖子,解答了出来,因无法发帖,现放在这里,希望能对大家有所帮助。
* 有两个表TABLE_A和TABLE_B
* TABLE_A内容为
* A1 A2
* AAA
* BBB
* CCC
* DDD
* EEE
* FFF
*
* TABLE_B内容为
* A1 A2
* AAA 1
* CCC 2
* DDD 3
* EEE 4
*
*要求使用一条UPDATE命令使得TABLE_A的内容变为
* A1 A2
* AAA 1
* BBB
* CCC 2
* DDD 3
* EEE 4
* FFF
*
* 事实上如果直接用UPDATE语句,则会出现找不到别名的错误;
* 如果两个表分别在不同的工作区打开而不用建立关联的话,也最多只能替换1条记录;
* 因此建立关联后在用UPDATE就会有相应的效果。
*
CLOSE ALL
USE TABLE_B
INDEX ON A1 TO A1.IDX
SELECT A
USE TABLE_A
SET RELATION TO A1 INTO B
UPDATE TABLE_A SET TABLE_A.A2=TABLE_B.A2 WHERE TABLE_A.A1=TABLE_A.A1
CLOSE ALL
ERASE A1.IDX
USE TABLE_A
BROW

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-08-05 11:04
btchongzi
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2006-8-22
得分:0 
自动排编号问题,设置编号为2006-08-0001型式
日期取自系统日期

SELECT 入库单明细
CALCULATE MAX(VAL(SUBSTR(入库编号,10,4))) TO I
c=alltrim("R"+str(YEAR(DATE()),4)+"-"+CHRTRAN(str(MONTH(DATE()),2)," ","0")+"-"+CHRTRAN(STR(i+1,4)," ","0"))
txt入库编号=c

[此贴子已经被作者于2006-8-28 11:04:53编辑过]

2006-08-25 09:52
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
得分:0 
楼上,不知道您有没考虑Set Centry ON|OFF 的情况

两人行已有我师……
2006-09-01 10:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-79864-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.538056 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved