如果执行以下代码:
   sSql:='select count(*) from '+
            ' T_SD_SB_GTXL where XL_ID='''+sXLID+''' ';
    DataSet:= GetDataSet(sSql);
     if DataSet.FieldCount<1 then exit;
    if DataSet.RecordCount<1 then exit;
    if DataSet.FieldCount<1 then exit;
    sTotalJD:=DataSet.Fields[0].asstring;  //执行到这里出错 
出错信息为:
value of field 'COUNT(*)' if out of range 如果SQL语句改为这样
  sSql:='select * from '+
            ' T_SD_SB_GTXL where XL_ID='''+sXLID+''' ';
    DataSet:= GetDataSet(sSql);
     if DataSet.FieldCount<1 then exit;
    if DataSet.RecordCount<1 then exit;
    if DataSet.FieldCount<1 then exit;
    sTotalJD:=DataSet.Fields[0].asstring;  
一切执行正常
其中GetDataSet(sSql);函数据定义如下
function  GetDataSet(sSql:string):TDataSet;
begin
    Result:=nil;
    if  not SocketConnection.Connected then
    begin
        ShowMessage('没有连接数据库,请重新连接!');
        exit;
    end;    ClientDataSet.Close;
    ClientDataSet.CommandText:=sSql;
    ClientDataSet.Open;    Result:=ClientDataSet;
end;
 在三层中,不能执行'select count(*)  from table ; 的语句吗?
为什么返回的结果集,有问题?
请指教

解决方案 »

  1.   

    补充
    如果SQL改为
     sSql:= 'select Max(XL_ID) from '+
                                    ' T_SD_SB_GTXL ';
    正确执行如果为 sSql:='select Max(EID)   from TEGIS.TEGIS_POINTS  ' ;
    即出现同样的错误语句本身是没有错误的为什么会这样?
      

  2.   

    sSql:='select count(*) as numcount from '+
                ' T_SD_SB_GTXL where XL_ID='''+sXLID+''' ';试试
      

  3.   

    sTotalJD:=DataSet.Fields[0].asstring;  是取Count的值吧?
    应该是这样:
    sTotalJD:=DataSet.Fields[0].asInteger;
      

  4.   

    不行
    如果那么简单就好了
    我怀疑是控件本身的BUG
    但说不出个所以然来
      

  5.   

    你这样是肯定可以的。只是想问你sTotalJD这个变量是什么内型。如下:
    var
    i:integer;
    d:string;
    begin
    cds1.Close ;
    cds1.CommandText :='select count(*) from area where areano = '''+'1234'+''' ';
    cds1.Open ;
    i:=cds1.Fields[0].AsInteger ;
    d:=cds1.Fields[0].AsString ;
    showmessage(inttostr(i));
    showmessage(d);
    这个可以运行的。对了,你的DELPHI是什么版本?OS是什么?
      

  6.   

    sTotalJD为 Stringdelphi 7.0   windows 2000 server