with dm.ds do begin
     sqltxt:='select * from t_users where name='''+edtusername.text+'''';
     close;
     commandtext:=sqltxt;
     open;          --------------------------->查询操作成功
     if recourdcount=0 then
        begin
          sqltxt:='';
          sqltxt:='insert into T_Users values(';
          sqltxt:=sqltxt+''''+edtusername.Text+''',';
          sqltxt:=sqltxt+''''+encrytpwd+''',';
          sqltxt:=sqltxt+grade+')';
        end;
     close; !!!!!!!!!!!!!!!!!-------->已经关闭了,还能操作吗?
     commandtext:=sqltxt;
1:   edit; --------->有这句话,错误'不能在关闭的dataset上进行该操作!'
2:   insert;-------->有这句话,没有1则错误同上.
3:   post;  -------->注释掉1,2后,出错'ds不在edit或insert状态'
   end;    

解决方案 »

  1.   

    //调试如下语句
         //...
         commandtext:=sqltxt;
         Open; //->>>>>>>>>>>>再打开吧
         edit;
         //...
      

  2.   

    //调试如下语句
         //...
         commandtext:=sqltxt;
         Open; //->>>>>>>>>>>>再打开吧
         edit;
         //...
      

  3.   

    close; !!!!!!!!!!!!!!!!!-------->已经关闭了,还能操作吗?放在
    sqltxt:='';之前
      

  4.   

    不能close;否则rs: can't perform this operation on an open dataset!!!高人们,怎么办???
      

  5.   

    TADODataSet is not capable of issuing Data Manipulation Language (DML) SQL statements that do not return result sets (like DELETE, INSERT, and UPDATE). For this use a component like TADOCommand or TADOQuery.
        注意,如果使用“DELETE、INSERT、UPDATE”,请使用TADOCommand或者TAdoQuery组件,推荐用TAdoQuery,方法如下://使用TAdoCommand,不返回数据
    function RunSqlCmd(ssql: String): String;
    begin
      If Not(AdoC.Connected) then OpenAdoC;
      AdoCmd.Connection := AdoC;
      AdoCmd.CommandType := cmdText;
      AdoCmd.CommandText := ssql;
      TRY
        BEGIN
        AdoCmd.Execute;
        Result := '';
        END;
      EXCEPT
        Result := '执行SQL语句出现错误:'+#13+#13+ssql;
      END;
    end;
    //使用TAdoQuery,可以返回数据
    function  TDataCenter.RunSqlQry(ssql: String):TAdoQuery;
    begin
      If Not(AdoC.Connected) then OpenAdoC;
      AdoQry.Connection := AdoC;
      AdoQry.Close;
      AdoQry.SQL.Clear;
      AdoQry.SQL.Add(ssql);
      TRY
        BEGIN
        AdoQry.Open;
        Result := AdoQry;
        END;
      EXCEPT
        Result := nil;
      END;
    end;记得付值给.CommandText之前先调用.Close;付值后调用.open方法
      

  6.   

    有没有哪一个Ado是既可以返回数据集又可以执行不返回数据集的操作的???