当前位置:主页>仓库管理软件> 列表

请问数据库比较字符问题 找东莞进销存软件

进销存软件版1楼: 下面是一段根据数据库某表的用户名和密码登陆的判断。

数据库为SQL SERVER 2000,存储用户密码的表为userpassword
字段名user_id即用户名为字符 admin
可是我用ADMIN或Admin等都可登陆,我明明设置了loCaseInsensitive区分大小写
代码如下:其中TeacherDM.LoginADOQR是AdoQuery控件, SQL 属性为select * from userpassword

With TeacherDM.LoginADOQR do begin
If not Active then Active:=true;
if (not Locate(''user_id'',trim(UserIDEdt.text),[loCaseInsensitive])) or (FieldByName(''password'').AsString<>Trim(PasswordEdt.text)) then //搜寻对比用户名和密码

begin
Application.MessageBox(''用户名或密码错误!'',''验证出错'',MB_ICONWARNING);
UserIDEdt.SetFocus;
exit;
end;
谢谢!

2楼: 不建議用定位查詢。
建議先OPEN,然後再可多次比較等。 如东莞进销存软件

3楼: 同意楼上,^_^

4楼: userpassword.filter:=''user_id=''''''+trim(UserIDEdt.text)+'''''''';
userpassword.filtered:=true;


userpassword.open;
if userpassword.recordcount=1 then
begin
if trim(denglutable.fieldbyname(''password'').asstring)=Trim(PasswordEdt.text)) then
begin
//登陆成功,进行其他操作
end
else showmessage(''密码错误,请与系统管理员联系!'') ;
end
else showmessage(''用户名重复,请与系统管理员联系!'') ;

5楼: 很奇怪,我到SQL SERVER中看了下,userpassword表中的user_id为varchar型,且为Primary key
原先只有一行数据,user_id列的值为 admin
我试着插入 ADMIN ,居然提示插入重复值,我想难道SQL SERVER没有区分大小写!!
后来仔细看了下该列的排序规则,默认为
我修改为Chinese_PRC_CS_AS(区分大小写),在SQL SERVER中该列可插入 ADMIN 了
以为这下区分大小了,可到Delphi一试无论用原来的代码或者 ahhlian大哥的代码都不行,
用ADMIN仍能登陆~ 修改为 Chinese_PRC_BIN 也一样没区分大小写
注:修改后我有重启SQL SERVER!


procedure TLoginFrm.BitBtn1Click(Sender: TObject);
begin
With TeacherDM.LoginADOQR do begin
filter:=''user_id=''''''+trim(UserIDEdt.text)+'''''''';


filtered:=true;
open;
if recordcount=1 then
begin
if (trim(FieldByName(''password'').AsString)=Trim(PasswordEdt.text)) then
begin
If MainFrm=nil then MainFrm:=TmainFrm.Create(self);
MainFrm.showModal;
LoginFrm.close;
end
else showmessage(''密码错误,请与系统管理员联系!'') ;
end
else showmessage(''用户名重复,请与系统管理员联系!'') ;
end;

end;

6楼: 可以对你的用户名进行一下转换,比方说将其中的字母转换成对应的ANSI码,然后比较就可以区分大小写了.

进销存软件版7楼: 多人接受答案了。