当前位置:编程学习 > Delphi >>

delphi程序使用adoquery嵌套查询,SQL在SQL SERVER 2000查询分析器执行正确,但在delphi程序中查询无结果

具体如下:我在sql server 2000的查询分析器执行以下语句: select top 1 * from 选择题库 where 科目名称='数学' and 练习='是' and 难度='高' and 序号 not in (select 题库位置 from 专项练习选择题 where 文件序号='1') order by newid() 这样能得到一条查询结果。但在delphi中,我的程序如下: with ADOQuery1 do begin close; sql.Clear; sql.Add('select top 1 * from 选择题库 where 科目名称=:a and 练习=:b and 难度=:c and 序号 not in (select 题库位置 from 专项练习选择题 where 文件序号=:d) order by newid()'); parameters.ParamByName('a').value:='数学'; parameters.ParamByName('b').value:='是'; parameters.ParamByName('c').value:='高'; parameters.ParamByName('d').value:=1; open; end; 为什么在程序中,adoquery1.recordcount=0?
追问:文件序号的数据类型是int,直接查询有结果,但是呢,程序中的recordcount就是为0,然后,我确定数据库连接没错。因为如果不是嵌套语句就正确。
答案:注意查询条件中变量的数据类型:是varchar类型还是int类型,不分清楚是会有错误的!
其他:你的sql语句在查询分析器里 直接查询有结果吗,如果么有结果 那么recordcount=0就没什么问题了

还有我经常犯的错误  就是连错数据库了。 将执行语句保存到临时文件去检查下,或者用SQL MONITOR追踪下看看 parameters.ParamByName('a').asstring:='数学';
            parameters.ParamByName('b').asstring:='是';
            parameters.ParamByName('c').asstring:='高';

这样写就OK 了 跟matlab没什么关系,主要是看你用的什么算法,每种迭代算法都有迭代次数的误差分析和稳定性分析,反推一下就可以d了。 

上一个:Delphi 用FindFirst函数找含有特定字符的文件名,为什么2003系统内查找结果有一部分符合条件的文件找不到
下一个:delphi 中如何实现像家财通3那样的左侧可收缩的快捷菜单,不想用Raize或DevExpress

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,