DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 19137911446
今日帖子: 19
在线用户: 18
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 9:40:13
标题:
老大们来呀,关于Query的查询 浏览:1947
加入我的收藏
楼主: 我想用Query来查询数据,语句如下:

With Query1 do
begin
  close;
  SQL.clear ;
  SQL.Add('Select * from DataSource')
  SQL.Add('where 用户编号 =: UserName');
  SQL.Add(' and 密码 =: Passwd');
  Parameters.ParamByName('UserName').Value := UserName_CB.Text ;
  Parameters.ParamByName('Passwd').Value := Password_E.Text ;
  Prepared ;
  open;
end;

这样写对不对呀?  为什么每次都出错呀,555555555555

----------------------------------------------
-
作者:
男 linlinghuihui (欢乐八方) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 9:46:27
1楼: ‘select * from datasource’datasource是表名!
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 9:48:33
2楼: 这是源代码,哪位老大帮忙检查下,不胜感激

 with GZ_DM.User_Q do
  begin
    close ;
    SQL.Clear ;
    SQL.Add('Select * from GZ_User');
    SQL.Add('where 用户编号 =: UserName');
    SQL.Add(' and 密码 =: Passwd');
    Parameters.ParamByName('UserName').Value := UserName_CB.Text ;
    Parameters.ParamByName('Passwd').Value := Password_E.Text ;
    Prepared ;
    open;
  end;
  if GZ_DM.User_Q.RecordCount=0 then
  begin
    S_LoginNum := S_LoginNum + 1 ;
    if S_LoginNum <3 then
    begin
      ShowMessage('用户名或密码错误!请重新输入!!!');
    end else ModalResult := MrCancel
  end else
  begin
    S_UserName := UserName_CB.Text ;
    S_UserPass := PassWord_E.Text ;
    ModalResult := MrOK ;
  end;
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 9:50:43
3楼: 是以下这两行出了问题:

    Parameters.ParamByName('UserName').Value := UserName_CB.Text 
    Parameters.ParamByName('Passwd').Value := Password_E.Text 

我查了书用法应该是

    ParamByName('UserName').AsString := UserName_CB.Text 
    ParamByName('Passwd').AsString := Password_E.Text 

但按书上的不行,用上面那两行可以通过Ctrl+F9,但执行的时候就出错

----------------------------------------------
-
作者:
女 xiangfei (想飞) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 9:55:47
3楼: with GZ_DM.User_Q do
  begin
    close 
    SQL.Clear
    UNPREPARED; 
    SQL.Add('Select * from GZ_User');
    SQL.Add('where :N1=用户编号');
    SQL.Add(' and :N2=密码');
    Parameters.ParamS[0].Value := UserName_CB.Text; 
    Parameters.ParamS[1].Value := Password_E.Text; 
    Prepared; 
    open;
  end;
你试一下,看一看好不好用!

----------------------------------------------
想飞的朋友跟我来。。。
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 10:11:39
4楼: 楼上的,试过了,不行,5555555555


----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 10:21:56
5楼: 把错误信息贴上来!
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 10:27:43
6楼: 以下是出错提示:

Project GZ.exe raised Exception class EDatabaseError with message 'User_Q: Parameter 'UserName' not Foud'. Process stopped. Use Step or Run to continue.

变量UserName没找到,这个UserName我想用params传给SQL

出了这个提示错误后按确定就会当机,偶当了N次,555555
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 11:18:01
7楼: 55555  有没其它的办法呀?

用Filter应该怎么写呀?


----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 11:22:18
8楼: procedure TF_login.b_loginClick(Sender: TObject);
begin
  try
    Database1.Connected:=True;
    Table_user.Filter:='ID=''+i_user.Text+'';
    Table_user.Filtered:=True;
    Table_user.Open;
  except
    Application.MessageBox('请与系统管理员联系。', '数据库连接错误!', MB_OK);
    Application.Terminate;
  end;
  if Table_user.RecordCount=1 then
  begin
    if Table_user['PASSWD']=i_passwd.Text then
    begin
       F_login.close;
       .......
       
    end
    else
      Application.MessageBox('请确认密码,注意大小写!', '密码不匹配', MB_OK);
    end
  else
    Application.MessageBox('请确认用户名是否正确!', '无此用户', MB_OK);

end;
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 11:25:27
9楼: 谢宁宇兄~~~ :)
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 11:33:42
10楼: hoho~~~  搞定!!!  

谢谢大家
----------------------------------------------
-
作者:
男 mmylmj (Minche) ★☆☆☆☆ -
普通会员
2003/12/15 11:34:07
8楼: 你这user_Q的参数是哪来的?
----------------------------------------------
为啥子就是俺不懂呢!!!
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 12:03:11
11楼: User_Q是我定义的 ADOQuery 的名字

参数应该都是Query本身的吧
----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 12:44:34
12楼: 还在吗!!这种办法好象可行.你在作工资系统?

with GZ_DM.User_Q do
var 
i:string;
  begin
    
    SQL.Clear 
    i:='Select * from GZ_User where 用户编号 =''+username_cb.text+'' and 密码 =''+password_e.text+''
    SQL.Add(i);
    open;
  end;
  if GZ_DM.User_Q.RecordCount=0 then
  begin
    S_LoginNum := S_LoginNum + 1 
    if S_LoginNum <3 then
    begin
      ShowMessage('用户名或密码错误!请重新输入!!!');
    end else ModalResult := MrCancel
  end else
  begin
    S_UserName := UserName_CB.Text 
    S_UserPass := PassWord_E.Text 
    ModalResult := MrOK 
  end; 
----------------------------------------------

----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 12:46:51
13楼: 是呀,我是在做工资系统

宁宇兄的代码我拿去试试,我也不甘心用filter,hoho~~
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 12:56:43
14楼: hoho~~ 测试通过

为什么用一行就可以,用三行就不行?  

郁闷ing..........


----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 13:03:26
15楼: 不是说三行不行因为第二种方法没有用ParamByName传递参数!
----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 13:06:44
16楼: 我也在作工资系统常连系!
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 13:16:31
17楼: 好呀,以后还要多向你请教

奇怪呀,书上的Query是可以用ParamByName传的呀

是不是跟ADOConnection的设置有关系?
----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 13:44:19
18楼: 我一般用BDE
----------------------------------------------
-
作者:
男 heihei_76 (小黑) ★☆☆☆☆ -
盒子活跃会员
2003/12/15 14:54:35
19楼: 你可以用showmessage(User_Q.sql.text);來查看一下這句sql語句有什么問題
----------------------------------------------
-

﹗﹗﹗
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/15 16:28:27
20楼: 哈~~  黑哥厉害
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行855.4688毫秒 RSS