在实行了order by的SQL后,QUERY只返回只读集合,但是我希望保存排序后的只读集合到数据表,并且修改只读集合。书上说加个QUERY2,通过修改语句UPDATE对原来的QUERY只读集合修改,但我不知道具体如何实行,求教!!!!

解决方案 »

  1.   

    var
     i:integer;
    begin
    Query1.open;
    Query2.open;
    query2.append;
    for i:=0 to Query1.recoredcount-1 do
    begin
    query2.FieldByName('ID').value:=query1..FieldByName('ID').value;
    query2.FieldByName('Name').value:=query1.FieldByName('Name').value;
    query2.post;
    query2.append;
    query1.next;
    end;
      

  2.   

    或者你把排序后的数据插入到临时表中
    在删除原来的数据后 把排好的数据插入
    insert into table1 select * from #Temp1
      

  3.   

    TEMP1是什么?就是QUERY1?
    那么插入后,数据表是否就真正改变了?
    有没有用到UPDATA的方法啊?我认为这样会对整个表操作,会比较方便点。
    共同探讨。
      

  4.   


    排序对只读并没有什么限制,也许是你把Query 设为只读,或是把感知组件设为只读了。
      

  5.   

    //刷新数据:
    Query.SQL.Clear;
    Query.CachedUpdates:=True;
    Query.OnUpdateRecord:=QueryUpdateRecord;
    Query.SQL.Add('select * from Table1 order by Field1');
    Query.Active:=True;//
    QueryUpdateRecord事件的代码不要写,只设置一个空代码就可以了.
      

  6.   

    to Hedonism(追日)
    恰恰是排序的问题,除非你按照主键排序。否则没办法修改,这是视图和表的区别。这个问题其实有无数人问过了,而且问题比较典型。
    基本上一本好一些delphi书都会提及这个问题,你需要结合TUpdateSQL 控件结合使用。delphi目录下有个例子,你可以参看。
      

  7.   

    var
     i:integer;
    begin
    Query1.open;
    Query2.open;
    query2.append;
    for i:=0 to Query1.recoredcount-1 do
    begin
    query2.FieldByName('ID').value:=query1..FieldByName('ID').value;
    query2.FieldByName('Name').value:=query1.FieldByName('Name').value;
    query2.post;
    query2.append;
    query1.next;
    end;这个方法试过了,不行。QUERY2得到的还是没有ORDER BY 以前的数据表,也就是说QUERY2未能保存ORDER BY之后的只读集。再请问上面的兄弟,哪个例子啊?拜托?请详细点,有点吊我胃口。
      

  8.   

    或者你把排序后的数据插入到临时表中
    在删除原来的数据后 把排好的数据插入
    insert into table1 select * from #Temp1#Temp1指什么?我原样打进去不行的。
      

  9.   

    delphi目录下有个例子,你可以参看。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类似的方法 IBX, DBX都是这么实现的。
      

  10.   

    要用sqlquery de
    不懂问我