以下是引用无心在2006-5-16 9:10:00的发言:
本人是VF菜鸟,自已写了一个登录的程序,但总不能实现,特来请哪位高手指教下,先谢谢了!
public sf,user_name,pwd
sf=thisform.optiongroup1.value
user_name=thisform.text1.value
pwd=thisform.text1.value
i=0
use 用户表
go top
do while .not.eof()
if 用户名=user_name .and. 密码=pwd .and. 身份=sf
   thisform.release
else
    i=i+1
    if i>=3 
      =messagebox("3次输入错误!将自动关闭窗口!",48,"警告!")
      thisform.release
    else 
      thisform.text1.setfocus
      =messagebox("用户名或密码或身份错误!",48,"错误!")      
    endif
endif   
skip
enddo
实在不好意思,没有能很好地看看你的程序就给你支招。现看了你的程序,确实有些问题。
(1)在FORM1.INIT()将次数i设成全局变量
CLOSE ALL
IF FILE([用户表.DBF])
  USE 用户表.DBF
ELSE
  CREATE TABLE 用户表 (用户名 C(12),密码 C(12))
  APPEND BLANK
  REPLACE 用户名 WITH [SYSYTEM],密码 WITH [SYSTEM]
ENDIF
PUBLIC I
I=0
(2)在COMMAND1.CLICK()判断
LOCATE ALL FOR 用户名=THISFORM.TEXT1.VALUE .and.  密码=THISFORM.TEXT2.VALUE .and.  身份=THISFORM.optiongroup1.value
I=I+1
IF EOF()
  IF I>3
    =messagebox("3次输入错误!将自动关闭窗口!",48,"警告!")
    thisform.release
    QUIT
  ELSE
    thisform.text1.setfocus
    =messagebox("用户名或密码或身份错误!",48,"错误!")      
  ENDIF
ELSE
  THISFORM.RELEASE
  DO MENU.MPR  &&进入主控程序
ENDIF
(3)主要的错误,在于你每次判断所输入的用户名和密码是否正确的时候,没有用LOCATE命令,而是用IF命令。前者在整个表中找需要的信息,而后者只在当前记录进行判断。