不会是书写有错误吧?或者是Query1的字段属性框中已经设置好了字段?    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('Select name from sysdatabases');
    Query1.Open;    Query1.FieldByName('Name').asString:=Var; 

解决方案 »

  1.   

    另外说明一点,就是sysdatabases是SQL Server的 master 库中的系统表,不过我想该没有关系吧?我在此之前用该Query  SQL.Add('USE [master]'); ExecSQL();  这样搞了一下, 该没有问题吧?说明:我用的都是复制粘贴,拼写错误似乎不太可能发生,同样的语句我在SQL Server Analyzer 中执行过,看不出什么问题!
      

  2.   

    你自己动手写一下
    你上面的程序没有问题
        Query1.Close;
        Query1.SQL.Clear;
        Query1.SQL.Add('Select name from sysdatabases');
        Query1.Open;
    就是这种格式
    yourname:=Query1.Fieldbynme('name').asstring;
    yourname:=Query1.FieldValues['name'].value;
      

  3.   

    Query1.Close;
        Query1.SQL.Clear;
        Query1.SQL.Add('Select name from master.dbo.sysdatabases');
        Query1.Open;
      

  4.   

    with query do
      begin
        close;
        sql.clear;
        sql.add('select tmp_name from sysdatabases');
        //---不要使用name这样的字段,容易报错!使用tmp_name
        Open;
      end;
      

  5.   

    你们这些方法都试过吗?  同样的代码如果在用户数据库中建的表都没有问题!但是在SQL Server 的系统数据库中都不可以,你们都试过吗?
    绿色代码的:'Select name from master.dbo.sysdatabases'似乎也不可以!有没有一个暗渡陈昌的方法?  我只是想在数据库备份时多给用户提供一些信息罢了,早知道在建库的时候就多来一点StoredProc了,省得现在这么麻烦!帮我想想方法!
      

  6.   

    Query1.SQL.Add('Select name as CN from sysdatabases');然后用yourname:=Query1.Fieldbynme('cn').asstring;
      

  7.   

    你竟然用Insert修改系统数据库的表?我想这样做可能会有问题的。系统
    数据库的表是用来管理整个数据库的,应该是数据库自身修改的。你自己
    修改了,谁知道会不会有问题(我没有做过这样的事)。
      

  8.   

    冤枉!我没有用Insert 我只是想把表里的一些信息找出来!  里面很多东西用SQL Server自带的存储过程似乎没有办法得到!surfguy(冲浪小子) : 哪一句不可以少?marf_cn(吗啡) :就是SQL Server中master库中的sysdatabases(奇怪我怎么不能生成它的SQL Scripts?)
      

  9.   

    Select …… as ……  我也试过了,好像不可以!我想知道为什么:RecordCount 正确,但是FieldCount 不正确?
      

  10.   

    我刚试过,可以取出你试试, DataBase1: drive name: MSSQLDATABASE NAME=master
    SERVER NAME=servername
    USER NAME=sa代码:procedure TForm1.Button1Click(Sender: TObject);
    begin
         with query1 do begin
              sql.clear;
              sql.add('Select convert(varchar(30),name) as SName from sysdatabases ');
              open;
              ShowMessage(FieldByName('Sname').asString);
         end;
    end;不会报错。不加Convert直接用Select name form ...也不会报错
      

  11.   

    ShowMessage(IntToStr(FieldCount));
    结果为1
      

  12.   

    我试过了的确可以! 不过等一下,有一个问题:: 你的Database 为什么那么设?如果直接指定AliasName 为ODBC 数据源的名称,然后再用TQuery 连上去怎么就不可以呢?你的这种设置方法我是第一次见到,不知道是不是一种常用的办法?
      

  13.   

    我同意不能使用“name”这样的关键字
      

  14.   

    SQL Server不要通过ODBC,多了一层性能会差很多,如果你用ODBC就改过来吧!