我想明早上能够看到答案的!!!来自MM的问题(100分)

  • 主题发起人 主题发起人 lunx
  • 开始时间 开始时间
L

lunx

Unregistered / Unconfirmed
GUEST, unregistred user!
我用database desktop 建了个数据库
四个字段name,password,unright,comment
name为关键字,当我在用时提示password不是索引
我把他设为关键字的结果是 在查找任何name时 总是提示用‘户名不存在’
程序如下:
请问我的表该如何建?索引该如何设(paradox7)??
procedure TForm1.BitBtn1Click(Sender: TObject);
var
cmusername,cmpassword:string[10];
tmppassword:string[10];
tmpunright:string[200];
tmpcomment:string[2];
begin
cmusername:= musername.text;//edit中的字符 ————就是我要找的
cmpassword:=mpassword.text;
table1.open;
table1.setkey;
table1.fieldbyname('password').asstring:=cmusername;
if table1.gotokey
then
begin
tmppassword:=table1.fieldbyname('password').asstring;//临时的保存
tmpunright:=table1.fieldbyname('unright').asstring;
tmpcomment:=table1.fieldbyname('comment').asstring;
if (tmppassword=cmpassword)and(length(tmppassword)=length(cmpassword))
then
begin
// gmusername:=cmusername;
// gmpassword:=tmppassword;
// gmunright:=tmpunright;
// gmcomment:=tmpcomment;
table1.close;
modalresult:=mrall;
close;
end
else
begin
application.messagebox('密码不对!','系统登录',mb_ok+mb_iconquestion);
Cishu:=cishu+1;
if cishu>3 then
begin
modalresult:=mrall;
close;
//main1.close;
end;
table1.close;
modalresult:=0;
end;
end
else
begin
application.messagebox('没有这个用户!','系统登录',mb_ok+mb_iconquestion);
Cishu:=cishu+1;
if cishu>3
then
begin
modalresult:=mrall;
close;
// main1.free;
end;
table1.close;
modalresult:=0;
end;
end;
 
好久没有用Delphi了,怎么都看不懂?
 
用SQL语句写吧。
select * from urTable
where password='''+musername.text+'''
 
登陆不用这样写吧?
 
其实我觉得你这样做效率会很低的,你可以在SQL用存储过程来做这个查询,这样效率会提高很多的!
 
用SQL寫﹐這種寫法效率又低﹐又易出問題。
下面是我的一個例子﹕
WhichTxt:=0;
SQLLogin.Active:=False;
SQLLogin.Params[0].AsString:=LoginUser;
SQLLogin.ExecSQL;
SQLLogin.Active:=True;
if SQLLogin.RecordCount=0 then begin
ShowMessage('沒有此用戶﹗請確定是否大小寫﹗');
LoginTimes:=LoginTimes+1;
WhichTxt:=1;
IsLogin:=False;
end
else if SQLLogin.Fields[1].AsString<>LoginPass then begin
ShowMessage('密碼錯誤﹗請確定后再重新輸入﹗');
LoginTimes:=LoginTimes+1;
WhichTxt:=2;
IsLogin:=False;
end
else if SQLLogin.Fields[1].AsString=LoginPass then begin
IsLogin:=True;
UserName:=LoginUser;
PassWord:=LoginPass;
try
WriteLog; /*寫入登入信息﹐是另一個過程里啦*/
finally
close;
end;
end;
if LoginTimes>=3 then begin
ShowMessage('你已出錯三次﹐程序即將關閉﹗');
IsLogin:=False;
Close;
end
else if WhichTxt=1 then
EditUser.SetFocus
else if WhichTxt=2 then
EditPass.SetFocus;
 
首先你要说明你是mm,还是mm问你的!嘻嘻
将要搜索的字段设为索引,不过你的问题是你的代码有问题哦:
table1.fieldbyname('password').asstring:=cmusername;
cmusername是用户名吧?怎么会和password匹配呢?

ps:1.你的问题用sql简单
2.还有可以用findkey或locate都可以实现,我个人喜欢用locate
 
用SQL语句写吧。
select * from Tablename
where password=cmpasswordand name=musername.text

 
索引和关键字是不同的概念
 
我希望明天这个帖子可以结束了
 
各位哥哥:
我才开始学编程,我对数据库了解很少
我对SQL了解很少是不是用table表可以直接可以SQL语句
还请各位推荐好的资料给我


谢谢!
 
Tquery,Tadoquery,Tadodataset可以用sql 语句
最好找个入门的书看看先,不太难
 
用这个办法实在太笨,建议用sql语句写。
而且用table写网络版程序时,比较危险,会使系统造成死锁!
 
我发誓:
当我把急需的两个 程序写完,我就转到用SQL
一定!一定!
所以还是把这个问题解决了
 
UTable.Locate('username;password', VarArrayOf([musername.text,mpassword]),[]);
 
这个 MM 有点意思。
 
如果是Paradox表,Password是它的保留字
请换一个词,(Name最好也不要用)
 
说locate会检索所有数据
网络和三层时可能对效率会有影响
 
唉!怎么搞得嘛!这么个小问题还没结束啊?
一句话,单机版的你高兴用什么就什么,网络版的除了sql还是sql
 
学了一招,以后提问时加上“来自MM的问题...“,就会有大把的人来答
 
后退
顶部