//用ADO没有问题的
procedure TForm1.Button2Click(Sender: TObject);
begin
  ADOquery1.active:=false;
  ADOquery1.Connection:=ADOConnection1;
  with AdoQuery1 do
  begin
    sql.clear;
    sql.add('SELECT SN=@@SERVERNAME,DN=db_name()');
    active:=true;
    First;
    showmessage(inttostr(FieldCount));
    showmessage(fieldbyname('SN').asstring+':'+fieldbyname('DN').asstring);
  end;
end;
//用BDE连接,代码如下 
procedure TForm1.Button2Click(Sender: TObject);
begin
  QUERY1.databasename:='test'; 
  with Query1 do
  begin
    sql.clear;
    sql.add('SELECT SN=@@SERVERNAME,DN=db_name()');
    active:=true;
    First;
    showmessage(inttostr(RecordCount));//=1  没有错
    showmessage(inttostr(FieldCount));//=0  !!!!!!!
    showmessage(fieldbyname('SN').asstring+':'+fieldbyname('DN').asstring);//<-----出错了!提示Field SN 没有!
  end;
end;

解决方案 »

  1.   

    为什么用ADO能行而用BDE出错呢?!
      

  2.   

    ADO和M$是一家的,BDE对Windows来说是外来户!!
     *^_^*
      

  3.   

    呵呵, 同意  yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜,)
      

  4.   

    用Fields[0]看看返回值呢?
    有时好像怪事就特别多,比如我今天调试程序时按钮按下去居然程序就死了,跟踪不下去,只运行可执行文件就没问题!哎
      

  5.   

    用Fields[0]看看返回值呢?----
    看这句:
    showmessage(inttostr(FieldCount));//=0  !!!!!!!它的值是0!
      

  6.   

    FieldCount=0是正常的.以前也见过,应该是delphi的问题,可以用i:integerquery1.first;i:=0;
    while not query1.eof do
    begin
      inc(i);
      query1.next;
    end;这样就不会错的.
      

  7.   

    FieldCount=0
    出现我遇到过的包括
    1.选择记录太多
    2.用ole控件
    3.自定义的占据太多内存.
    4.随机出现.不可测.
      

  8.   

    应该是BDE不支持啦,你用一个DBGrid关联到Query来看看,出来的是空的。
      

  9.   

    yzdiyu(敌宇) :
    注意:不是recordcount而是fieldcount!
    recordcount=0的情况我也遇到过,不过问题不大
      

  10.   

    TO sysu:'SELECT DN=''aaaa'',SN=''kkkk'''却能正常运行,为什么呢?
      

  11.   

    'SELECT DN=''aaaa'',SN=''kkkk'''这个是普通SQL语句,没问题的。
    'SELECT SN=@@SERVERNAME,DN=db_name()' 应该是BDE不支持这里的系统变量和函数吧.
      

  12.   

    楼主,我拿你的代码试过了,没问题啊!
    D6 + MS Sql Server2000
      

  13.   

    D5+SQL server7为什么不行呢?
    关键是ADO能用呀
      

  14.   

    我试了D6+SQL Server2000,也不行的。
      

  15.   

    to sysu(死树) ( ) :
    怎么不行?我怎么能正确出结果?
    D6,MS Sql Server2000,WinXP
      

  16.   

    to Randy_Mic(生于70年代) :
    你是用BDE还是ADO?
    D6,BDE,MS Sql Server2000,Win2000  不行
      

  17.   

    我用d5,sql 7
    ADO肯定行,BDE不行...
      

  18.   

    delphi5与SQL在低版本的BDE接口传输上有问题所以
      

  19.   

    D5+SQL 2000 
    inttostr(FieldCount)=2
    SN=''很奇怪的问题
      

  20.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      QUERY1.databasename:='test'; 
      with Query1 do
      begin
        sql.clear;
        ----sql.add('SELECT SN=@@SERVERNAME,DN=db_name()');
    用sql.add('SELECT S@@SERVERNAME AS SN ,db_name() AS DN')试一下 
        active:=true;
        First;
        showmessage(inttostr(RecordCount));//=1  没有错
        showmessage(inttostr(FieldCount));//=0  !!!!!!!
        showmessage(fieldbyname('SN').asstring+':'+fieldbyname('DN').asstring);//<--
    ---出错了!提示Field SN 没有!
      end;
    end;
      

  21.   

    对了,我的D6是打过补丁的;
    D6(patch2),MS SQL Server2000, WinXP(无补丁)
    ADO,BDE都试过