关于delphi中ADODataSet的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于delphi中ADODataSet的问题相关的知识,希望对你有一定的参考价值。

我用ADOdataset查找数据库并得到一个记录集,其中用recordcount得到是有一条记录,但是我在用filedvalues显示时却为null,这是怎么回事,而且在sql查询分析器中也是有记录的
源代码如下
//查找上次查询最大日期
sql1:='select max(otime) as maxdate from amnet_total where userid='''+cardcode+'''';
showmessage(sql1);
ADODataSet1.Active:=false;
ADODataSet1.CommandText:=sql1;
ADODataSet1.Active:=true;
k:=ADODataSet1.RecordCount;

//showmessage(maxdate);
//如果查询结果不为空
if (k=0) then
maxdate:='2010-04-01'
//如果查询结果为空
else
begin
maxdate:=ADODataset1.Fieldvalues['maxdate'];
end;
showmessage(maxdate);
回一楼:
不是,最奇怪的就是在数据库能查到,记录数也是1,但是就是得到的结果是null
回2楼:
但是我数据库得到的是一个具体的日期啊,但是为什么用dataset不能得到
回3楼:
dataset不是只有一条数据的时候就直接使用就行吗?

最后补充下,我用adoquery查询数据库就成功了不知道为什么? 我的代码原来用的是if adodataset.fieldvalues['otime']<>null then
期间出现的错误时不能将null转为string所以又改为adodataset。filedbyname('otime').isnull虽然判断是否为空的解决了,但是还是出现了上面我说的内容,有没有高手顺便解释下delphi的null处理时怎么回事?
回4楼:你是否测试过了呢?

参考技术A 是不是类型不匹配 参考技术B 使用max来进行计算时,数据库会自动返回一条记录,无论是否存在数据内容。当没有数据内容时,返回值为NULL。因此,如果需要采用max计算,最好判断数据是否为nil,然后再进行内容判断。 参考技术C 把ADODATASET指向你要读取数据的那条记录! 参考技术D var
maxdate:string;
begin
sql1:='select max(otime) as maxdate from amnet_total where userid='''+cardcode+'''';
showmessage(sql1);
ADODataSet1.Active:=false;
ADODataSet1.CommandText:=sql1;
ADODataSet1.Active:=true;
k:=ADODataSet1.RecordCount;

//showmessage(maxdate);
//如果查询结果不为空
if (k<>0) then
maxdate:=ADODataset1.Fieldvalues('maxdate').asstring;
//如果查询结果为空
else
begin
maxdate:='2010-04-01'
end;
showmessage(maxdate);
end;

以上是关于关于delphi中ADODataSet的问题的主要内容,如果未能解决你的问题,请参考以下文章

ADODataSet1.next问题 delphi

delphi adodataset如何用如sql语句 增、删、改、查记录 类似于下面这样,但adodataset我不知道怎么弄

delphi中ADODataset.Append,某字段数据录入有错,我需要放弃本次新增的这条数据该怎么做?

delphi DBGrid里面的值如何自动更新

delphi怎样在ADO里用ADOproc调用数据库sql server存储过程?,用ADODATASET或者ADOQUERY又怎样调用存储过程?

DELPHI怎么建立登陆数据库