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