sql条件查询的问题(100分)

  • 主题发起人 主题发起人 asdfzxcv66
  • 开始时间 开始时间
A

asdfzxcv66

Unregistered / Unconfirmed
GUEST, unregistred user!
我用access建了一个数据表(表名chengji),我在delphi中想通过查询显示学生成绩80~90分的人员,但老是出错不知道为什么,我的代码如下,请大虾帮忙解决:<br>adoQuery1.close;<br>adoQuery1.sql.clear;<br>adoQuery1.sql.Add('select * from chengji where 成绩 &gt;= '+''+80+' &nbsp;and &nbsp;成绩 &lt;= '+''+90+' '); <br>adoQuery1.open;
 
adoQuery1.close;<br>adoQuery1.sql.clear;<br>adoQuery1.sql.Add('select * from chengji where 成绩 &gt;= '''+edit1.text+''' &nbsp;and &nbsp;成绩 &lt;= '''+edit2.text+''''); <br>adoQuery1.open;
 
adoQuery1.close;<br>adoQuery1.sql.clear;<br>adoQuery1.sql.Add('select * from chengji where 成绩 &gt;= 80 &nbsp;and &nbsp;成绩 &lt;= 90'); <br>adoQuery1.open;
 
李翔鹏你好<br>我用你的代码会出现如下错误提示<br>project project1.exe raised exception class e0leexception with message '语法错误(操作符丢失)在查询表达式'where 成绩&gt;='80' and 成绩&gt;='90''中。'.processstopped.use step or run to continue.<br>我用的是delphi7.0,
 
lilbdping你好<br>你的代码也不能执行
 
出错就出在你点引号上面了,仔细检查一下就知道了
 
成绩 字段是float类型,所以不要双引号。<br>如:'select * from DB where 成绩&gt;80' 或者 'select * from DB where 成绩&gt;'+'80'<br>ok
 
adoQuery1.close;<br>adoQuery1.sql.clear;<br>adoQuery1.sql.Add('select * from chengji where (成绩 &gt; 80) &nbsp;and &nbsp;(成绩 &lt; 90)'); <br>adoQuery1.open;
 
edit1.Text:=80;<br>edit1.Text:=90;<br>我用如下代码,编译和执行都能通过,数据显示为空,但是实际的数据中有在此范围中的数值。<br>adoQuery4.close;<br>adoQuery4.sql.clear;<br>adoQuery4.sql.Add('select * &nbsp;from chengji where 成绩 &nbsp;&gt; '+'"%'+edit1.Text+'%" and &nbsp;成绩 &lt; '+'"%'+edit2.Text+'%"');<br>adoQuery4.open;<br><br><br>如果用如下代码只显示某范围之上的成绩,编译和执行都能通过,但是数据表上没有任何反应,即所有的数据表中大于小于此范围的数值还在其中显示。<br>adoQuery4.close;<br>adoQuery4.sql.clear;<br>adoQuery4.sql.Add('select * &nbsp;from chengji where 成绩 &nbsp;&gt; '+'"%'+edit1.Text+'%" ');<br>adoQuery4.open;<br><br><br>如果用如下代码,编译能通过,执行时显示“标准表达式中数据类型不匹配”;<br>adoQuery4.close;<br>adoQuery4.sql.clear;<br>adoQuery4.sql.Add('select * &nbsp;from chengji where 成绩 &nbsp;&gt; 80 and &nbsp;成绩 &lt; 90');<br>adoQuery4.open;<br>或者用如下代码,编译能通过,执行时显示“标准表达式中数据类型不匹配”;<br>adoQuery4.close;<br>adoQuery4.sql.clear;<br>adoQuery4.sql.Add('select * &nbsp;from chengji where 成绩 &nbsp;&gt; '+' 80 and &nbsp;成绩 &lt;'+' &nbsp;90');<br>adoQuery4.open;<br><br><br>但我用如下代码实现下面的功能是能实现的。<br>&nbsp;strsql:='select avg(成绩) as tt from chengji where &nbsp;chengji &gt;= '+'"%'+edit1.Text+'%" and chengji &lt;= '+'"%'+edit2.Text+'%"' ;<br>adoQuery4.close;<br>adoQuery4.sql.clear;<br>adoQuery4.sql.Add( strsql);<br>adoQuery4.open;<br><br><br>不知道为什么??????????
 
//引用你的话:<br>如果用如下代码,编译能通过,执行时显示“标准表达式中数据类型不匹配”;<br>adoQuery4.close;<br>adoQuery4.sql.clear;<br>adoQuery4.sql.Add('select * &nbsp;from chengji where 成绩 &nbsp;&gt; 80 and &nbsp;成绩 &lt; 90');<br>adoQuery4.open;<br>//引用结束<br>说明你在设计数据库时,字段成绩设的不是数值型。所以才会出现这种情况,请先检查一下数据表的设置
 
where 成绩 &gt;= '''+edit1.text+''' &nbsp;and &nbsp;成绩 &lt;= '''+edit2.text+''''); <br>這是sql 的寫法, 在access &nbsp;中就不能這樣寫了!
 
把“select * &nbsp;from chengji where”在ACCESS里面执行一下,执行对了再放到ADD()里面,然定是点多点少的问题了。不是什么大问题。
 
where 成绩 &gt;= '''+edit1.text+''' &nbsp;and &nbsp;成绩 &lt;= '''+edit2.text+''''); <br>這是sql 的寫法, 在access &nbsp;中就不能這樣寫了! 那应当怎样写来实现我要的功能呢
 
设计数据库时,字段成绩设的不是数值型。所以才会出现这种情况,请先检查一下数据表的设置 &nbsp;<br>我看看试一试
 
//////////////<br>设计数据库时,字段成绩设的不是数值型。所以才会出现这种情况,请先检查一下数据表的设置 &nbsp;<br>//////////////<br>我试了是字段成绩设的不是数值型引起的,不过我想要在软件运行时输入范围来实现查询,所以还是要用到edit1.text,所以请高手帮我解决该怎样实现这个功能,代码如何写。
 
如果不改数据库设置的话,非常容易:<br>'select * &nbsp;from chengji '<br>+' where ( 成绩 &gt;= '+#39+edit1.text+#39+') &nbsp;and ( 成绩 &lt;= '+#39+edit2.text+#39+' )'; <br><br>注意得检测EDIT1输入是否为数值。
 
建议不采取'XX'+'XX'的做法,在D中,可使用format来写,为了代码简洁明了,个人建议可使用如下方法来写,<br>首先:<br>const<br>&nbsp; seltxt='select * &nbsp;from chengji where 成绩 &gt;= %0:s and 成绩 &lt;=%1:s';<br>其次:<br>....<br>adoQuery1.close;<br>adoQuery1.sql.txt=format(seltxt,[quotedstr(edit1.Text),quotedstr(edit2.Text)];<br>adoQuery1.open;<br>注明:以上的%0:s,%1:s是以字符类型为例,若是数值类型如整型,则可用%0:d,%1:d,具体用法请自行查看format说明.
 
SELECT * from 表1 where qq between 80 and 90
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
442
import
I
后退
顶部