procedure Tform1.edit1Exit(Sender: TObject); begin while length(edit1.text)<8 do edit1.Text:=edit1.Text+' '; end;
select ltrim(rtrim(Password)) from 用户表 where userid=登录名
to :noil0125(珏心) 我是觉得我的程序有问题,不应该有这样的效果啊。你有现成模块的代码吗?我想学。还有一点,如果我在用户名称DBCOMBOBOX1中输入一个不在ITEM中的人名时,会直接出现数据库中的第一个记录的人名,为什么? 你的代码好用,谢谢。
如果是Access,把字段设成可压缩; 如果是SQL Server,把字段设成varchar;
TO:RockEx(石头_) 不行啊,怎么比较了?
procedure TFrm_Logo.FormShow(Sender: TObject); begin with Frm_data.ADOQuery do//----提取表里的用户名! begin Close; SQL.Clear; SQL.Add('Select * from User_Info Where User_type=:t1'); Parameters[0].Value:='0';//----表示操作员 Open; if RecordCount>0 then begin Combobox1.Clear; while not eof do begin Combobox1.Items.Add(FieldByName('User_Name').AsString); Next; end; end; end; Edit1.Clear; end; procedure TFrm_Logo.BitBtn1Click(Sender: TObject); var tmp_pass:string; begin if Length(Trim(Combobox1.Text))>0 then begin // Try with Frm_data.ADOQuery do begin Close; SQL.Clear; SQL.Add('Select * from User_Info Where User_Name=:t1'); Parameters[0].Value:=trim(Combobox1.Text); Open; // Mydecrypt( tmp_pass:=MyDecrypt(FieldByName('User_pass').AsString,'jing');//------提取密码! if Trim(Edit1.Text)=tmp_pass then begin Tmp_Name:=Trim(combobox1.Text);//----提取的姓名! Frm_Main.ShowModal; Frm_Logo.Close; end else begin Application.MessageBox('您输入的密码不正确,请重新输入!','图书管理系统',Mb_IconQuestion+Mb_ok); Edit1.SetFocus; Edit1.SelectAll; end; end; end else begin Application.MessageBox('请选择用户名!','图书管理系统',Mb_IconQuestion+Mb_ok); end; end; 程序里的一段,自己研究研究
var StrUser,StrPsd:string; begin StrUser:=edit1.Text; StrPsd:=edit2.Text; ADODataSet1.Close; ADODataSet1.CommandText:='select * from Tuser where UserName ='+ quotedstr(StrUser) +' and Pwd='+quotedstr(StrPsd); ADODataSet1.Open; if ADODataSet1.RecordCount<>0 then begin showmessage('a');// end; end;
var StrUser,StrPsd:string; begin StrUser:=edit1.Text; StrPsd:=edit2.Text; ADODataSet1.Close; ADODataSet1.CommandText:='select * from Tuser where UserName ='+ quotedstr(StrUser) +' and Pwd='+quotedstr(StrPsd); ADODataSet1.Open; if ADODataSet1.RecordCount<>0 then begin showmessage('a');//要实现的事件 end; end;
procedure Tfrmpass.BtnOkClick(Sender: TObject); var s:string; p:string; begin p:=edtpass.Text; {adoquery1.close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select name,code,password from login_user where name='+#39+dbcombobox1.Text+#39); adoquery1.Open; //adoquery1.FieldByName('name').AsString:=dbcombobox1.Items.Text; s:=adoquery1.fieldbyname('password').AsString; //}//注释掉了。如果我将数据库中的字段改成可压缩的是不是就这样用? adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add('select name,code,ltrim(rtrim(password)) as 密码 from login_user where name='+#39+combobox1.Text+#39); adoquery2.Open; s:=adoquery2.Fieldbyname('密码').AsString; if (p<>s) then begin messagedlg('密码错误!',mtConfirmation,[mbyes],0); edtpass.Text:=''; edtpass.SetFocus; end else begin form2.show; //adoquery1.close; adoquery2.Close; frmpass.Hide; end; end; 这是我目前用的,有比这再简便的吗?
trim 的用法很简单 它是过滤掉内容的最前边和最后边的空格,但是过滤不掉中间的空格
imc没有人有更好的方法?现在还有个问题,下面的这个查询查不出结果,为什么? procedure Tfrmsfkp.Button1Click(Sender: TObject); var strsql:string; begin adoquery1.Close; adoquery1.SQL.Clear; //strsql:='select date,xm,sl from mz11,mz22 where mz11.id=mz22.mz11_id '; strsql:='SELECT date,mz11.id,mz11.fph,xm,price_item.name,sl,(retail_price/big_small),mz22.je,dr.name,dpt.name,login_user.name as czy from mz11,mz22,price_item,dr,dpt,login_user '; strsql:=strsql+' where mz11.id=mz22.mz11_id and dr.id=mz11.dr and login_user.id=sf_op and price_item.id=mz22.yp_id and dpt.id=mz11.dpt_id '; if trim(datetimetostr(Dtp1.Date ))<>'' then strsql:=strsql+' between #'+datetimetostr(dtp1.DateTime)+'# and #'+datetimetostr(dtp2.DateTime)+'# ' else showmessage('请选择查询日期!') ; adoquery1.SQL.Add(strsql); try adoquery1.Open; except adoquery1.ExecSQL; end; end; procedure Tfrmsfkp.FormCreate(Sender: TObject); begin dtp1.DateTime:=now; dtp2.DateTime:=now; end; 而且报错:--------------------------- Debugger Exception Notification --------------------------- Project mainProject.exe raised exception class EOleException with message 不正常地定义参数对象。提供了不一致或不完整的信息'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- 我只是将DateToStr改成了DateTimetoStr了啊
用trim多好,前後的空個都可以去掉!!! if trim(edit1.text)=trim(adoquery1.fieldbyname('欄位名').asstring)..........;
tmp_pass:=MyDecrypt(FieldByName('User_pass').AsString,'jing');//------提取密码! 这一句中的MyDecrypt是对字符串进行加密,不用也可以这样 tmp_Pass:=FieldByName('User_Pass').AsString; Tmp_Name:=Trim(combobox1.Text);//----提取的姓名!这一句Tmp_name,自己可以申明一下 var tmp_Name:String;就OK了!
而且我想在combobox1里自动加上查询出来的操作员名单,这样用却不显示,为什么? procedure Tfrmpass.FormCreate(Sender: TObject); var s1:string; begin s1:=adoquery2.Fieldbyname('name').AsString; Next; combobox1.Items.Add(s1); end;
to:siwuge(五哥) 你的程序忘记循环啦:) procedure Tfrmpass.FormCreate(Sender: TObject); var s1:string; begin if adoquery2.active then begin adoquery2.first; while not adoquery2.eof do begin s1:=adoquery2.Fieldbyname('name').AsString; combobox1.Items.Add(s1); Next; end; end; end;
begin
while length(edit1.text)<8 do
edit1.Text:=edit1.Text+' ';
end;
你的代码好用,谢谢。
如果是SQL Server,把字段设成varchar;
begin
with Frm_data.ADOQuery do//----提取表里的用户名!
begin
Close;
SQL.Clear;
SQL.Add('Select * from User_Info Where User_type=:t1');
Parameters[0].Value:='0';//----表示操作员
Open;
if RecordCount>0 then
begin
Combobox1.Clear;
while not eof do
begin
Combobox1.Items.Add(FieldByName('User_Name').AsString);
Next;
end;
end;
end;
Edit1.Clear;
end;
procedure TFrm_Logo.BitBtn1Click(Sender: TObject);
var
tmp_pass:string;
begin
if Length(Trim(Combobox1.Text))>0 then
begin
// Try
with Frm_data.ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('Select * from User_Info Where User_Name=:t1');
Parameters[0].Value:=trim(Combobox1.Text);
Open;
// Mydecrypt(
tmp_pass:=MyDecrypt(FieldByName('User_pass').AsString,'jing');//------提取密码!
if Trim(Edit1.Text)=tmp_pass then
begin
Tmp_Name:=Trim(combobox1.Text);//----提取的姓名!
Frm_Main.ShowModal;
Frm_Logo.Close;
end
else
begin
Application.MessageBox('您输入的密码不正确,请重新输入!','图书管理系统',Mb_IconQuestion+Mb_ok);
Edit1.SetFocus;
Edit1.SelectAll;
end;
end;
end
else
begin
Application.MessageBox('请选择用户名!','图书管理系统',Mb_IconQuestion+Mb_ok);
end;
end;
程序里的一段,自己研究研究
StrUser,StrPsd:string;
begin
StrUser:=edit1.Text;
StrPsd:=edit2.Text;
ADODataSet1.Close;
ADODataSet1.CommandText:='select * from Tuser where UserName ='+
quotedstr(StrUser) +' and Pwd='+quotedstr(StrPsd);
ADODataSet1.Open;
if ADODataSet1.RecordCount<>0 then
begin
showmessage('a');//
end;
end;
StrUser,StrPsd:string;
begin
StrUser:=edit1.Text;
StrPsd:=edit2.Text;
ADODataSet1.Close;
ADODataSet1.CommandText:='select * from Tuser where UserName ='+
quotedstr(StrUser) +' and Pwd='+quotedstr(StrPsd);
ADODataSet1.Open;
if ADODataSet1.RecordCount<>0 then
begin
showmessage('a');//要实现的事件
end;
end;
我试用了一二楼的方法,都行,二楼的要将此字段另起别名。
var
s:string;
p:string;
begin
p:=edtpass.Text;
{adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select name,code,password from login_user where name='+#39+dbcombobox1.Text+#39);
adoquery1.Open;
//adoquery1.FieldByName('name').AsString:=dbcombobox1.Items.Text;
s:=adoquery1.fieldbyname('password').AsString;
//}//注释掉了。如果我将数据库中的字段改成可压缩的是不是就这样用?
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select name,code,ltrim(rtrim(password)) as 密码 from login_user where name='+#39+combobox1.Text+#39);
adoquery2.Open;
s:=adoquery2.Fieldbyname('密码').AsString;
if (p<>s) then
begin
messagedlg('密码错误!',mtConfirmation,[mbyes],0);
edtpass.Text:='';
edtpass.SetFocus;
end
else
begin
form2.show;
//adoquery1.close;
adoquery2.Close;
frmpass.Hide;
end;
end;
这是我目前用的,有比这再简便的吗?
procedure Tfrmsfkp.Button1Click(Sender: TObject);
var
strsql:string;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
//strsql:='select date,xm,sl from mz11,mz22 where mz11.id=mz22.mz11_id ';
strsql:='SELECT date,mz11.id,mz11.fph,xm,price_item.name,sl,(retail_price/big_small),mz22.je,dr.name,dpt.name,login_user.name as czy from mz11,mz22,price_item,dr,dpt,login_user ';
strsql:=strsql+' where mz11.id=mz22.mz11_id and dr.id=mz11.dr and login_user.id=sf_op and price_item.id=mz22.yp_id and dpt.id=mz11.dpt_id ';
if trim(datetimetostr(Dtp1.Date ))<>'' then
strsql:=strsql+' between #'+datetimetostr(dtp1.DateTime)+'# and #'+datetimetostr(dtp2.DateTime)+'# '
else
showmessage('请选择查询日期!') ;
adoquery1.SQL.Add(strsql);
try
adoquery1.Open;
except
adoquery1.ExecSQL;
end;
end;
procedure Tfrmsfkp.FormCreate(Sender: TObject);
begin
dtp1.DateTime:=now;
dtp2.DateTime:=now;
end;
而且报错:---------------------------
Debugger Exception Notification
---------------------------
Project mainProject.exe raised exception class EOleException with message 不正常地定义参数对象。提供了不一致或不完整的信息'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
我只是将DateToStr改成了DateTimetoStr了啊
if trim(edit1.text)=trim(adoquery1.fieldbyname('欄位名').asstring)..........;
这一句中的MyDecrypt是对字符串进行加密,不用也可以这样
tmp_Pass:=FieldByName('User_Pass').AsString; Tmp_Name:=Trim(combobox1.Text);//----提取的姓名!这一句Tmp_name,自己可以申明一下
var
tmp_Name:String;就OK了!
procedure Tfrmpass.FormCreate(Sender: TObject);
var s1:string;
begin
s1:=adoquery2.Fieldbyname('name').AsString;
Next;
combobox1.Items.Add(s1);
end;
你的程序忘记循环啦:)
procedure Tfrmpass.FormCreate(Sender: TObject);
var s1:string;
begin
if adoquery2.active then
begin
adoquery2.first;
while not adoquery2.eof do
begin
s1:=adoquery2.Fieldbyname('name').AsString;
combobox1.Items.Add(s1);
Next;
end;
end;
end;