或者 var aa:string; begin with adoquery1 do begin close; sql.clear; sql.add(SELECT MAX(PZID) pzid from cypz); open; end; aa:=adoquery1.fieldbyname('pzid').asstring; end;
SELECT MAX(PZID) AS PZID from cypz
我也遇到这样的问题了,不知道怎么解决,其实大家不用追究sql语句,sql语句是对的,在Access查询视图是可以查询到的,但是就是adoquery1.fieldbyname('pzid').asstring; 或者是adoquery1.fiels[0].asstring;取到的值都是空的,判断adoquery1.eof/bof都是为false说明纪录不为空。不到大家有没有遇到类似的问题。举例: Access 数据库 表名:table1 -------------------------------------------------------- 编号 一级编码 二级编码 其它信息 --------+----------------+---------------+-------------- 0010023 | 001 | 002 | 001003002 --------+----------------+---------------+-------------- 0030028 | 004 | 002 | 222212312 --------+----------------+---------------+-------------- 0030021 | 005 | 008 | 222212312 --------+----------------+---------------+-------------- 0030024 | 003 | 007 | 222212312 --------+----------------+---------------+-------------- 0030023 | 003 | 007 | 222212312 -------------------------------------------------------- 我的sql语句是 select max(编号) as test from table1 where 一级编码='001' and 二级编码='002' adoquery1.Fields[0].asString记录集不为空时可以得到值;但是如果我增加条件 select max(编号) as test from table1 where 一级编码='001' and 二级编码='002' and 编码 like '001002*' 记录集不为空得到值是空的,不知道什么原因。
编码 like '001002*' 是什么意思? 应该是 编码 like '001002%'吧?
好了,总找到什么原因了,Access数据库他本身支持 like '001002*',如果同把这个sql语句通过ado传递Access数据库就不是like '001002*'本身直接执行结果就不一样了恰恰相反,所以通过ado传递like '001002%'就等于在Access本身执行的like '001002*'。也就是通过ado和不经过ado的like语句的通配符是不一样的。
SQL Server中*表示一个字符,%表示任意字符
语法是对的, SELECT MAX(PZID) pzid from cypz 查询后,pzid作为MAX(PZID)结果的别名显示
不习惯中间不写AS
查询出来的PZID就是最大的了,
var
aa:string;
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add(SELECT MAX(PZID) pzid from cypz);
open;
end;
aa:=adoquery1.fieldbyname('pzid').asstring;
end;
或者是adoquery1.fiels[0].asstring;取到的值都是空的,判断adoquery1.eof/bof都是为false说明纪录不为空。不到大家有没有遇到类似的问题。举例:
Access 数据库
表名:table1
--------------------------------------------------------
编号 一级编码 二级编码 其它信息
--------+----------------+---------------+--------------
0010023 | 001 | 002 | 001003002
--------+----------------+---------------+--------------
0030028 | 004 | 002 | 222212312
--------+----------------+---------------+--------------
0030021 | 005 | 008 | 222212312
--------+----------------+---------------+--------------
0030024 | 003 | 007 | 222212312
--------+----------------+---------------+--------------
0030023 | 003 | 007 | 222212312
--------------------------------------------------------
我的sql语句是
select max(编号) as test from table1 where 一级编码='001' and 二级编码='002'
adoquery1.Fields[0].asString记录集不为空时可以得到值;但是如果我增加条件
select max(编号) as test from table1 where 一级编码='001' and 二级编码='002' and 编码 like '001002*'
记录集不为空得到值是空的,不知道什么原因。
应该是
编码 like '001002%'吧?
SELECT MAX(PZID) pzid from cypz
查询后,pzid作为MAX(PZID)结果的别名显示