AdoDataset1 doesn't return a result set
ADOdAteset1不能返回一个结果集,你是用adoquery1.open打开的这个adoquery把,执行这种操作应该用adoquery.execsql来运行这个adoquery

解决方案 »

  1.   

    no open use exesql
         ★==========★==========★
         ‖ Delphi里的最后一丝游魂‖
         ★==========★==========★
      

  2.   

    not select cann't use open
    exesql is right
      

  3.   

    使用Insert语句时如果不返回结果集可使用ExecSql执行,使用Select语句插入时应该是'insert 特性评价表 (软件编号,特性外编号)Select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=1001',去掉Into。
      

  4.   

    adodataset只能执行查询,不能运行这样的操作sql,用ADoquery或ADOCommand就行了,推荐adocommand.......
    adocommand.exec;
      

  5.   

    有结果集返回时用open;否则用execsql
      

  6.   

    with ADODataSet1 do
    begin
      Close;
      try
         CommandText:='insert into 特性评价表 select :SoftWareSN as 软件编号,特性编号 as 特性外编号 from 模型特性表 where 模型编号=1001';
         Parameters.ParamByName('softwareSN').value:=???;//赋值 
         execsql;
      except
         raise;
      end;
    end;
      

  7.   

    这个 SQL 正确吗????
    ===============================
    特性编号    int   主键 设为标识 
    ===============================
    你的 Insert 语句中怎么没有此字段?这肯定不行,假如你顺利增加了一条记录(此时“特性编号”为 Null),那么增加下一条记录时因为有重复的肯定无法 Insert 啊
      

  8.   

    当没有结果集返回时,应该用ExecSQL
      

  9.   

    程序执行通过了,说明程序在逻辑上是正确的。但是在SQL中,如果是检索型的SQL语句,是要返回结果的,OPEN是这样的作用;如果是更新型的SQL语句(如Insert,Delete,Update等SQL语句)就用ECEXSQL。在你的程序中,是更新型的SQL,该用EXECSQL。
      

  10.   

    adodataset也可以,设置其中一个属性,不用返回结果集就可以.
      

  11.   

    模型编号是否也要设一个传值参数,这样直接insert会出现提示。
    用query的各种属性会比较好。
      

  12.   

    要用execsql来执行SQL语句,因为它没有返回值
      

  13.   

    非常感谢大家的关心,可是大家把我问题的主要矛盾和次要矛盾弄倒了
    关于execSQL只是一个次要问题,因为我现在的程序执行是成功的。如果要说execSQL请告诉我如何在TADOdataSet中使用(我没有用query和Command),至于几位朋友说要给模型编号传值,我只能说我已写的很清楚了,这是个标识种子,会自动递增的好,下面是我的主要矛盾,是我问此问题最想知道的    SoftwareSN!!!!!!!
    SoftwareSN这个参数是我已知的(它并不存在于模型特性表中,所以我有此问),我已赋值给它,我就是想知道SQL语句这样写对吗?(因为这个SoftwareSN是“外来的”)
    'insert into 特性评价表 (软件编号,特性外编号) select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=:ModelSN'
    从意思上来讲是对的,可是从SQL语法上来讲我觉得怪怪的,好像不对。每次提问,我都怕我表意不清,唉,谢谢
      

  14.   

    不应该用open方法,应该用ExecSql方法
    with ADODataSet1 do
    begin
      Close;
      try
         CommandText:='insert into 特性评价表 (软件编号,特性外编号)   select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=1001';
         ExecSql;
         except     end;
      end;
    如果SoftWareSN已经知道,也可以这样直接用常量代替,假设SoftWareSn=5,可以这样写
    with ADODataSet1 do
    begin
      Close;
      try
         CommandText:='insert into 特性评价表 (软件编号,特性外编号)   select 5,特性编号 from 模型特性表 where 模型编号=1001';
         ExecSql;
         except     end;
      end;
      

  15.   

    select :para from table_name这从SQL语法上看有什么错误么?和select aa,2*4 from table_name 有什么区别么?都是返回常量啊
         ★==========★==========★
         ‖ Delphi里的最后一丝游魂‖
         ★==========★==========★
      

  16.   

    你把这条sql语句拷贝到sql2000的查询分析器里执行好了!
    可立即看结果,亦可查看语法错误。
            --我向来这么做的,不需求人了
      

  17.   

    在SELECT或其他的语句里的字段列表里可以用变量吗?
    好象没这个标准吧?
    你的:SoftWareSN可能在TADODataSet里被解释为一个常量了。
    这样的话由于是个常量,SELECT 可能看到一个列的值全是":SoftWareSN",而INSERT 语句由于没有对应的列而不起任何作用!不知道是不是这样,见笑了!
      

  18.   

    bluemeteor(挂月) 
    chen_zhonghua(小狼) 
    ajun21cn(每次问问题都给分的人)
    你们三各老师说的好棒,听得我好舒服啊!to bluemeteor(挂月) :我原来的疑问根源就是不知道可以选择常量。
      

  19.   

    adodataset只能执行查询,不能运行这样的操作sql,用ADoquery或ADOCommand就行了,推荐adocommand.......
    adocommand.exec;
      

  20.   

    前面的问题已经懂了,插入是完全成功的,现在的问题是
    就算是用ADOQuery,也无法返回数据集,SQL Server2000的帮助中好像说用insert into+ SELECT 子查询为一行或多行指定数据值返回的是成功插入的记录数(integer),而我非常渴望返回的是DataSet,请教各位。 
    这个问题看来只能由真正的高手来回答了。