SQLQuery.RecordCount报错,如何修正? ( 积分: 100 )

  • 主题发起人 主题发起人 boreas
  • 开始时间 开始时间
B

boreas

Unregistered / Unconfirmed
GUEST, unregistred user!
if Query.RecordCount = 0 then
ShowMsg('登录失败,请检查一下用户名和密码是否正确!')
else
ShowMsg('登录成功!');

本人菜鸟,在做用户登录界面时,用到SQLQuery,在对用户名、密码和Oracle9i中的资料进行核查时,报错:表或视图不存在。数据库连接无问题。

经过在网上搜索,说是此处写法不对,但不知道如何修正。我只在登录界面用了一个SQLQuery组件,其SQLConnection属性是uses另一个DataModule中的SQLConnection。

请各位指点一下,谢谢!
 
if queyr.recordcount>0 then
begin
showmessage('登录成功!');
end
else
begin
showmessage('登录失败,请检查一下用户名和密码是否正确!');
end;
 
if queyr.active then
if queyr.recordcount>0 then
begin
showmessage('登录成功!');
end
else
begin
showmessage('登录失败,请检查一下用户名和密码是否正确!');
end;
 
为什么要用RecordCount呢?用Eof吧。

if Query.Eof then
ShowMsg('登录失败,请检查一下用户名和密码是否正确!')
else
ShowMsg('登录成功!');
 
忘了说了,上面的内容只适合你能“登录成功”,但不能“登录失败”的情况。

把SQL语句给大家看一下,也有可能问题在这里。
代码多发一点出来才有助于分析问题。
 
表或视图不存在。数据库连接无问题。//应该是SQL语句写的有问题吧。
if Query.IsEmpty then
ShowMsg('登录失败,请检查一下用户名和密码是否正确!')
else
ShowMsg('登录成功!');
 
fnhkewfg、msglzcx:
使用Query.RecordCount > 0报错(和最初报错内容相同),报错内容如下Project SoftManager.exe raised exception class EDatabaseError with message 'SQLServer Error: ORA-00942: 表或视图不存在'.Process stopped.Use Step or Run to continue.
其中SoftManager.exe是我的工程名。

百刃刀客:使用Query.Eof后,无论用户名和密码是否正确,都ShowMsg('登录失败,请检查一下用户名和密码是否正确!')。

blyb:使用Query.IsEmpty后,无论用户名和密码是否正确,都ShowMsg('登录失败,请检查一下用户名和密码是否正确!')。

源码如下:
PUser := UpperCase(edtLander.Text);
PPwd := edtPwd.Text;
PPwd := Encrypt(PPwd);
Str := 'select * from sm_inf_lander where upper(landercode)=''' + PUser + ''' '
+ 'and password=''' + PPwd + '''';
Query.Close;
Query.SQL.Text := Str;
Query.Open;
if Query.RecordCount > 0 then
//if Query.IsEmpty then
//if Query.Eof then
//ShowMsg('登录失败,请检查一下用户名和密码是否正确!')
ShowMsg('登录成功!')
else
//ShowMsg('登录成功!');
ShowMsg('登录失败,请检查一下用户名和密码是否正确!');
end;
 
把你的SQL语句放到查询分析器里看是否有返回结果,注意密码一定要用Encrypt(PPwd);
个人感觉是这儿出了问题
 
马丁路德:
SQL语句放到查询分析器里看是有返回结果的。
 
关键是SQLQuery.RecordCount有问题,如果是ADOQuery.RecordCount就没有问题。
因为是用dbExpress连接oracle数据库,所以不用ADOQuery。
网上有人说可能是SQLQuery的BUG,用SQLQuery+DataSetProvider+ClientDataSet可以解决,但我不知道具体怎么操作。我用的是Delphi7.0,已打过所有补丁。
 
回去好好看看李维的书
单向游标,不能做count,
用isempty或eof判断
 
再看一下SQL.TEXT,
哦,知道了,
你先qry.Last,再用recordcount
 
凤舞九天:
使用Query.Eof或Query.IsEmpty后,无论用户名和密码是否正确,都执行else前面的语句(即if条件总是成立)。
 
马丁路德:
先qry.Last,再用recordcount,报错:Query:Operation not allowed on a unidirectional dataset.
不允许单向数据集。
Query.Close;
Query.SQL.Text := Str;
Query.Open;
Query.Last;
if Query.RecordCount = 0 then
^^^^^^
 
知道啦,应该用if qry.eof and qry.bof then
即,当eof和bof时才能确定是否没有记录
 
马丁路德:
使用if (Query.Eof and Query.Bof )then后,无论用户名和密码是否正确,都执行else前面的语句(即if条件总是成立)。
Query.Close;
Query.SQL.Text := Str;
Query.Open;
if (Query.Eof and Query.Bof )then
ShowMsg('登录失败,请检查一下用户名和密码是否正确!')
else
ShowMsg('登录成功!') ;
 
不可能的啊,如果同时Bof和Eof表示没有记录的啊,
你单步中断,看一下你的sql.text,把它放到查询分析器里运行
 
Query.Eof and Query.Bof ? 永假的吧
 
马丁路德:
单步中断,看一下你的sql.text,把它放到查询分析器里运行,可以查到数据。
单步中断,把SQL语句放到pl/sql dev中的SQL窗口运行的,可以查到数据。
 
// Query.Open;
if queyr.open>0 then
begin
showmessage('登录成功!');
end
else
begin
showmessage('登录失败,请检查一下用户名和密码是否正确!');
end;
//没测试过,好像记得open的返回值,就是记录个数
 
后退
顶部