初学PB,做了个登陆界面,但没有成功,还有些问题需要大家帮忙解决,先谢谢。

dingd 2002-09-21 10:38:15
我用PB自带的数据库Adaptive Server Anywhere 7建立了个Password.db的数据库,想学习一下,怎么
做个用户登陆界面。

在这个数据库中建了一张Password的表,里面有两个项,name 和 password
并且输入了一些数据。

然后建立好了ODBC连接,

并在PB8中建立好了所有内容,
password.pbw password.pbl password的应用 一个w_logon的窗口,设计好了界面。

其中:
姓名 对应 sle_name的对象名,密码 对应 sle_password的对象名 都是单行编辑框
下面还有两个按钮, 确认(cb_enter) 和退出(cb_exit)


password应用程序的代码:
//连接数据库
sqlca.DBMS = ProfileString("pb.ini","Database","DBMS","")
sqlca.dbParm = ProfileString("pb.ini","Database","DBParm","")

//打开窗口
open(w_logon)

w_logon的代码
//通过SQLCA全局变量传送数据库表中的数据
connect using SQLCA;
这后面还要写些什么吗??


确认按钮的代码
//定义两个字符串变量
String vPw,vName,vPw_temp,vName_temp,temp

if IsNull(sle_name.text) or len(trim(sle_name.text))=0 then
MessageBox("提示","请输入!",stopSign!)
sle_name.SetFocus()
end if

vPw_temp = trim(sle_password.text)
vName_temp = trim(sle_name.text)

select "Password"."Name","Password"."Password" INTO :vName, :vPw
from "password"
where "Password"."Name"=:vName_temp;

if vPw_temp = vPw and vName_temp = vName then
MessageBox("提示","完全正确!")
else
MessageBox("警告!","口令错误!重新输入!",stopSign!)
sle_name.SetFocus()
end if

上面我的代码还有很多问题,我发现我好像并没有 vName 和 vPw 并没有从数据库中取出来,不知道这是为什么????


还有一个问题:就是,像这样的判断,我看过好像还有一种方法:
最后是用下面的代码判断输入正确与否的,可是他前面的部分是什么????
if SQLCA.sqlcode = 100 then
MessageBox("提示","完全正确!")
end if
if SQLCA.sqlcode =-1 then
MessageBox("警告!","口令错误!重新输入!",stopSign!)
sle_name.SetFocus()
end if



或者还有其他什么代码判断也可以做所要的功能??谁能帮帮忙,谢谢。
...全文
102 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyactiveboy 2002-10-07
  • 打赏
  • 举报
回复
一般如果称得上是软件的话,都有自己的*.INI文件,如果自己学习学习么,都可以试着做做的。
sweetgirl 2002-10-07
  • 打赏
  • 举报
回复
同意楼上的
Libra_Chen 2002-10-07
  • 打赏
  • 举报
回复
没必要自己写ini。
把代码从database profiles里拷出来,加个connect,if……,就完事了。
登陆界面简单一些就可以了。
steve0531 2002-10-07
  • 打赏
  • 举报
回复
是的.
dzhcheng 2002-10-07
  • 打赏
  • 举报
回复
up
lishiqian 2002-10-07
  • 打赏
  • 举报
回复
为何要那么麻烦去做*.ini文件,真接拷好了
dingd 2002-09-22
  • 打赏
  • 举报
回复
那我原来最初的
vPw_temp = trim(sle_password.text)
vName_temp = trim(sle_name.text)

select "Password"."Name","Password"."Password" INTO :vName, :vPw
from "password"
where "Password"."Name"=:vName_temp;

if vPw_temp = vPw and vName_temp = vName then
MessageBox("提示","完全正确!")
else
MessageBox("警告!","口令错误!重新输入!",stopSign!)
sle_name.SetFocus()
end if

多错在一些什么地方了?
dingd 2002-09-22
  • 打赏
  • 举报
回复
不行!

我在
w_logon的代码
//通过SQLCA全局变量传送数据库表中的数据
connect using SQLCA;
后面加入了::
If SQLCA.SQLCODE <> 0 Then
MessageBox('错误','连接数据库失败!',StopSign!)
Halt Close
End If


可是运行,提示错误!没有成功连接!!!
可是我的数据库 Adaptive Server Anywhere 7 Password.db
已经用Sybase central打开了!!
并且在PB8中的Database profiles里也连接了!!
怎么会还连不上??

难不成:我的
password应用程序的代码:
//连接数据库
sqlca.DBMS = ProfileString("pb.ini","Database","DBMS","")
sqlca.dbParm = ProfileString("pb.ini","Database","DBParm","")

//打开窗口
open(w_logon)
这段程序有问题。
可是书上的例子,对与这样的数据库都是这样写的呀!!急。
dingd 2002-09-22
  • 打赏
  • 举报
回复
没有pb.ini。

不过PB8安装文件夹下有个pb.ini,可是用不了。

我改了:就是用
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=password;UID=dba;PWD=sql'"
可以成功了!!

而且不用什么*.ini

我还想再问一下:书上的那种方法是不是要自己编写*.ini文件???
所以我才不成功??
Functions 2002-09-22
  • 打赏
  • 举报
回复
那就按照 zhdleo(叮东)的方法连接吧,保险一点。
你编写的应用程序所在的文件夹中有PB.ini吗?
如果有,PB可能首先寻找着一个。而 在PB8中的Database profiles里也连接时,使用的是PB8.exe路径中的ini文件。
zhdleo 2002-09-22
  • 打赏
  • 举报
回复
这个怎么和你的另外的问题一样?
把:sqlca.DBMS = ProfileString("pb.ini","Database","DBMS","")
sqlca.dbParm = ProfileString("pb.ini","Database","DBParm","")
改成:
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=password;UID=dba;PWD=sql'"

除非你自己编写:*.ini文件。
Functions 2002-09-21
  • 打赏
  • 举报
回复
--- 1 ---
//connect using SQLCA;
//这后面还要写些什么吗??
这个后面要判断是否连接成功
If SQLCA.SQLCODE <> 0 Then
MessageBox('错误','连接数据库失败!',StopSign!)
Halt Close
End If
--- 2 ---
//vPw_temp = trim(sle_password.text)
//vName_temp = trim(sle_name.text)
//
//select "Password"."Name","Password"."Password" INTO :vName, :vPw
//from "password"
//where "Password"."Name"=:vName_temp;
我常使用的方法是:
SELECT COUNT(*) FROM "password" WHERE "Password"."Name"=:vName_temp AND
"Password"."Password" = :vPw_temp ;
方法来检查登录是否正确。请大家评论这个方法是否合适?
--- 3 ---
//if SQLCA.sqlcode = 100 then
// MessageBox("提示","完全正确!")
//end if
//if SQLCA.sqlcode =-1 then
// MessageBox("警告!","口令错误!重新输入!",stopSign!)
// sle_name.SetFocus()
//end if
关于SQLCA.SQLCODE,我的理解是:如果SQL语句检索数据成功,发现没有所要的数据,返回100;如果检索失败,则返回-1
因此,上面的SQLCA.SQLCODE=100,应该是没有这个用户。
--- 4 ---
//if vPw_temp = vPw and vName_temp = vName then
既然是使用你所写的SELECT语句,vName_temp = vName是必然的吧?只需判断vPw_temp = vPw 即可。
dingd 2002-09-21
  • 打赏
  • 举报
回复
自己先up.

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧