for int1:= 0 to ADOQuery1.RecordCount-1 do
begin
with  ADOQuery1 do
begin
Close;
SQL.Clear;
new_1:=5656;
SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 夹直线方向角_输入='+inttos(new_1));
ExecSQl;
Next;
 就是想修改某一列的值,可老是报错

解决方案 »

  1.   

    改了也不行   总是出现“操作必须是一个可更新的查询” 急死了  help
      

  2.   

    with  ADOQuery1 do 这个换个adoquery1SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 夹直线方向角_输入='+inttos(new_1)); 改成
    SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 夹直线方向角_输入='+inttostr(new_1)); 
      

  3.   

    我改成如下形式还是不行啊,还是:操作必须是一个可更新的查询  的错误
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from [线路水平数据$]');
    ADOQuery1.Open;new_1:=ADOQuery1.fieldbyname('夹直线方向角_输入').AsInteger;
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 夹直线方向角_输入='+inttostr(new_1));
    ADOQuery1.ExecSQL;
      

  4.   

     不是跟你說了嗎,要換成二個數據集,一個在FETCH呢,你為什麼還要改變他做一個EXECUTE操作。這一操作數據集不就丟了,再NEXT還有什麼意義。
      

  5.   

    for int1:= 0 to ADOQuery1.RecordCount-1 do 
    begin 
    with  ADOQuery2 do   //這裏再用一個 AdoQuery2 .  不要用 AdoQuery1.  相同類型的變量你用WITH覺得舒服嗎?。呵呵,這樣好難分
    begin 
    Close; 
    SQL.Clear; 
    new_1:=5656; 
    SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 夹直线方向角_输入='+inttos(new_1)); 
    ExecSQl; 
    Next; 
      

  6.   

    另外更新数据不要用adoquery用adocommand,速度快而且效率高
      

  7.   

    而且每次错误都停留在next这里
      

  8.   

    'update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 关键字 IN (SELECT 关键字 FROM 夹直线方向角_输入='+inttos(new_1+')')
      

  9.   


    // 認真看了下,你的ADOQuery1  根本沒有用。
    with  ADOQuery2 do   
    begin 
      Close; 
      SQL.Clear; 
      new_1:=5656; 
      SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+' where 夹直线方向角_输入='+inttos(new_1)); 
      ExecSQl; 
    end;
      

  10.   

    这能行吗?我的条件就是夹直线方向角_输入='+inttos(new_1+)'
      

  11.   

    adoquery1不是作为循环的判断条件吗?for int1:= 0 to ADOQuery1.RecordCount-1 do
    我从昨天到现在都试了n种方法了 都不行 太打击了 
      

  12.   

    UPDATE语句为啥要放在FOR循环里面,什么意思吗
      

  13.   

    我的意思是让一行一行的更新  通过for循环
      

  14.   

    說句實話,你的基顧太差了,要麼就是真的在這個問題上花太多時間搞暈了
    你的FOR就沒有作用。你再看下的更新代碼好像是死的吧,那再多個FOR也是一樣的
    通常FOR我們可以這樣寫:if not AdoQuery1.isEmpty then begin
      with AdoQuery1 do while not eof do begin
        ////
        next;
      end;
    end;
      

  15.   

    我刚学delphi不到一星期,老师给我们的任务,没办法,也快没时间了,给你带来麻烦,见谅
      

  16.   

    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select * from [线路水平数据$]');
    adoquery1.Open;new_1:=adoquery1.fieldbyname('夹直线方向角_输入').AsInteger;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('update [线路水平数据$] set 夹直线方向角='+inttostr(new_1)+'where 夹直线方向角_输入='+inttostr(new_1));
    adoquery1.ExecSQL;我现在把它改成最简单的update怎么还有问题啊?还是这个错误:操作必须是一个可更新的查询
      

  17.   

    你這個是不是ACCESS? 如果是的話,看下權限。
      

  18.   

    应该不是权限的问题吧  我用edit能往里面写数据  但edit只能写一个
      

  19.   

    adoquery1.Close; 
    adoquery1.SQL.Clear; 
    adoquery1.SQL.Add('update [线路水平数据$] set [夹直线方向角]='+inttostr(new_1)+'where [夹直线方向角_输入]='+inttostr(new_1)); 
    adoquery1.ExecSQL;