注册 登录
编程论坛 PowerBuilder

帮下忙```找错```谢谢

incoolwen 发布于 2007-11-08 14:28, 1810 次点击

string str,passeword //定义游标变量
declare myyou cursor for //定义个游标
select yh,mima from T_yh; //从T_yh表找用户和密码
open myyou; //打开游标
do while (sqlca.sqlcode=0)
fetch myyou into :str,:password; //把找到的用户和密码分别给两个变量
where str=:sle_1.text //问一下,这里除了用IF还可以用什么语语判断
if sqlca.sqlcode=100 then
messagebox("提示","没有这个用户")
sle_1.text=""
sle_1.setfocus()
elseif password<>sle_2.text then
messagebox("提示","密码错了")
sle_2.text=""
sle_2.setfocus()
else
open(w_suan)
close(parent)
close(myyou)//关闭游标,问下``这句放到那个地方好```
end if


本人刚刚学PB``很多问题都不知道```还请大家帮帮我````谢谢```````

2 回复
#2
fyh2007-11-11 18:20

在程序中尽量不要用游标`````这样导致程序运行慢啊``
///以下是我个人的建议~`````````
String ls_Used,ls_Pass
Long ll_UsedC,ll_PassC

ls_Used = Trim(Sle_1.Text) ///用户名
ls_Pass = Trim(Sle_2.Text) //口令
///////用户
select Count(1) INTO :ll_UsedC from T_yh Where yh = :ls_Used ///用户是否存在
IF ll_UsedC = 0 Then ///未找到
MessaGeBox('提示','用户不存在!')
Sle_1.SetFocus()
Return ///返回不往下执行
End if
//////口令
select Count(1) INTO :ll_PassC from T_yh Where Mima = :ls_Pass ///口令是否正确
IF ll_PassC= 0 Then ///未找到
MessaGeBox('Error','你输入的口令错误!')
Sle_2.SetFocus()
Return ///返回不往下执行
End if
///以上IF条件不成立的情况执行
open(w_suan)
close(parent)



#3
jsxwr2007-11-14 20:41

实际程序编写时,应该多考虑其安全性,单独对用户名或密码报错,会带来不必要的麻烦,所以不如直接把两项写进一个条件语句中!另外应对用户尝试次数进行限制。
//在父窗口中定为局部变量 Long ll_times


String ls_Used,ls_Pass
Long ll_Used

ls_Used = Trim(Sle_1.Text) ///用户名
ls_Pass = Trim(Sle_2.Text) //口令

select Count(*) INTO :ll_Used from T_yh Where yh = :ls_Used and Mima = :ls_Pass ;///用户是否存在
IF ll_Used < 1 Then
MessaGeBox('提示','用户或密码错误!')
ll_times = ll_times +1
if ll_times >=3 then halt //最多给3次尝试机会!
Sle_1.SetFocus()
Return
End if

ywzX(w_suan)
close(parent)

[此贴子已经被作者于2007-11-14 20:42:53编辑过]

1