测试VFP程序

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:19:24
SELE passwordinfo &&PASSWORDINFO是"表名"
IF ALLT(THISFORM.TEXT1.VALUE)=""
THISFORM.TEXT1.SETFOCUS
ELSE
IF ALLT(THISFORM.TEXT2.VALUE)=""
THISFORM.TEXT2.SETFOCUS
ELSE
LOCATE FOR ALLT(用户名)=ALLT(THISFORM.TEXT1.VALUE);
.AND.ALLT(密码)=ALLT(THISFORM.TEXT2.VALUE)
IF EOF()
MESSAGEBOX("用户名或密码有误,请重新输入!",64,"提示")
THISFORM.TEXT1.VALUE=""
THISFORM.TEXT2.VALUE=""
THISFORM.TEXT1.SETFOCUS()
ELSE
CYONGHU=ALLT(THISFORM.TEXT1.VALUE)
CMIMA=ALLT(THISFORM.TEXT2.VALUE)
DO 主界面.MPX
THISFORM.RELEASE
ENDIF
ENDIF
ENDIF

没有结果。
请高手看看,谢谢。越快越好。
为什么有时候系统会提示找不到PASSWORDINFO呢?

你的程序里有以下问题。

首先,你的locate 语句中and 前后有两个点,这个好像不对。

其次,紧接着不能判断eof(),这个的意思是当前表是不是到了末尾。你的locate是一个查找语句,所以应该把eof() 改为 not found().

然后,你的这个应该是系统登陆吧,为了防止暴力破解,一般系统都会增加对错误次数的限制,一般都是3次,如果第4次还是错误,将退出。而你的代码里好像没有这种保护机制。另外,你的用户名和密码是没有经过加密就存储到表里面的,如果你尝试用记事本打开表,你会发现,找到用户名和密码很容易。

最后,据我的经验来看,使用allt(thisform.text1.value)=="",这样的语句来判断用户是否输入了内容不是一个最佳的方法,应该改为
if empty(thisform.text1.value)
...
或者
if len(allt(thisform.text1.value))==0
...

因为系统对""(中间没有空格)的解释会给程序带来很大的不稳定因素,所以不建议使用。

最后一点, 你程序中的 do 命令好像有问题,应该是 do 主界面.mpr

如果还有问题,请留言。

locate 后面的and 有两个点是正确的.用记事本也是打不开dbf的表的,
什么有时候系统会提示找不到PASSWORDINFO呢?
可能是因为那个表ASSWORDINFO已经关闭