var
  adoCmd: _Command;
  vRecordCount: OleVariant;
  iReturnValue: Integer;
  adoRst: _Recordset;
adoCmd._Set_ActiveConnection(DbConnection);
adoCmd.CommandText:='use master; Select name From sysdatabases';
adoCmd.CommandType :=adCmdText
adoRst:= adoCmd.Execute(vRecordCount,EmptyParam,adCmdText);
这样为啥返回的adoRst是不可用的?
为啥在mssql中的查汛工具中可以执行use master; Select name From sysdatabases?

解决方案 »

  1.   

    可以使用事务模式比如ado.conn.begintranceadocmd.text:='use   master';
    adocmd.execsql;
    adocmd.text:='Select   name   From   sysdatabases'
    adocmd.execsql;
    ado.conn.commintrance;
      

  2.   

    可以执行多条语句.
    试试用 recordset.nextrecord方法
      

  3.   

    TADOCommand is most often used for executing data definition language (DDL) SQL commands or to execute a stored procedure that does not return a result set. For SQL statements that return a result set, TADODataSet, TADOQuery, or TADOStoredProc is better suited. The Execute method of TADOCommand is, however, capable of returning a recordset. To use that recordset, however, you will need a separate ADO dataset component.
      

  4.   

    use master
    是指定数据库
    而ADO的数据是ADOConnection指定的,ADOCommand不能更改,它只能使用ADOConnection连接的数据库
    先关闭ADOConnection,重新设定连接字符串,再Open,然后用ADOCommand执行SQL
    或者,用多个ADOConnection分别连不同的数据库
      

  5.   

    'use   master;   Select   name   From   sysdatabases
    -------------------------------
    'use   master; GO;  Select   name   From   sysdatabases
      

  6.   

    adoCmd._Set_ActiveConnection(DbConnection); 
    adoCmd.CommandText:= 'use   master;   Select   name   From   sysdatabases '; 
    adoCmd.CommandType   :=adCmdText 
    使用adoCmd.commandtype的类型不对,adCmdText只能是查询语句
    如一定要执行可以改为存储过程。
      

  7.   

    多谢fcuandy。终于帮我解决了困扰一周的问题了。