select 'a','b','c' from table1
union
select 'a1','b1','c1' from table2

解决方案 »

  1.   

    可以,可以直接在里面放两句Sql,
    可是取数据集时就不对了,呵呵。
    你知道取哪个么?
      

  2.   

     with query1 do
         begin
            Close;
            SQL.Clear;
            SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');
            active:=true;
            open;
            first; //进行数据表的排序
         end;
    我要如何才能开始执行另一条SQL语句呢,比如update 什么的,
      

  3.   

    好像是只取了第一个Sql的数据
      

  4.   

    with query1 do
        begin
            Close;
            SQL.Clear;
            SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');
            active:=true;
            open;
            first; //进行数据表的排序
        end;
    我要如何才能开始执行另一条SQL语句呢,比如update 什么的, 
      

  5.   

    如果你用的是本地数据库,就不可能同时执行两句,你只能按顺序来执行,如果是远程数据库,应该用存储过程。当然,如果用SQL server一类的数据库,也可以不用存储过程。
      

  6.   

    可是我现在的程序是这样的:先查询获得满足条件的,然后对这些记录的部分记录进行处理,如果成功将一字段置为1,这时不是UPDATE 语句对它进行操作吗,然后处理一下条满足条件的啊
      

  7.   

    这种情况用UpdateSQL啦,设好UpdateSQL后,你想置为1的时候,就直接DateSet.fieldbyname('a').asinteger=1,然后applyupdata,搞定。不过怎么设UpdataSQL,怎么设自己去找书,很长的(如果完全不会SQL,和Tquery使用,会看得非常辛苦)
      

  8.   

    if send_state=0 then
    begin
         query1.Edit;
         query1.FieldByName('message_state').asinteger:=1;
         query1.Post;
    end
    else
    begin
         query1.Edit;
         query1.FieldByName('message_state').asinteger:=2;
         query1.Post;
    end;这样能达到修改该字段的值的目的吗?
      

  9.   

    如果你query1里的查询是从两个或以上的表中,你这样做就不行。
      

  10.   

    if send_state=0 then
    begin
        query1.Edit;
        query1.FieldByName('message_state').asinteger:=1;
        query1.Post;
    end
    else
    begin
        query1.Edit;
        query1.FieldByName('message_state').asinteger:=2;
        query1.Post;
    end;用这样的办法修改的数据没有真正的写入到数据库中啊,请问要如何才能写入表中啊,
      

  11.   

    为什么不用query的sql语句的update来改写记录?
      

  12.   

    看看这个算不算:)
    with query1 do begin
      sql.clear;
      sql.add('select a,b,c,d from table1');
      open;
      var1 := fields[0].asstring;
      var2 := fields[1].asstring;
      var3 := fields[2].asstring;
      close;
      sql.clear;
      sql.add('select a,b,c,d from table2');
      open;
      var4 := fields[0].asstring;
      var5 := fields[1].asstirng;
      close;
    end;//with
      

  13.   

    to liuj0771():你的语句能将查询结果修改后写入到表中吗,语句中的VAR1。。5是什么作用啊?!
      

  14.   

    在DELPHI中用QUERY1。SQL.Add('select send_rate,message_state FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');执行这个SQL语句时,提示‘TABLE IS READ ONLY’请问是怎么回事啊,我用的是MYSQL数据库,该语句在MYSQL中执行没问题的啊
      

  15.   

    用liuj0771()的方法就可以了,先执行一个sql语句,执行完之后把sql清空,然后再加上第二条语句,如果是update那么用execsql执行。
      

  16.   

    我这样理解你提出的问题:
      (1)查出一个满足条件的数据集(DataSet1)。 
      (2)从第一条到最后一条游历整个数据集(DataSet1),然后根据数据集(DataSet1)每一条记录的具体情况对数据(DataSet2)进行一些修改。
      
       如果你可修改更新的数据集(DataSet2)与第一次查出的数据集(DataSet1)来源于同样的表的话,你就没有必要去执行两个SQL.只要这样做就可以了。
       Update TableName Set Field1 = Value1,fidld2 = Value2 ... Where "你的条件"   如果你是要根椐查出的数据集一中的值作为条件,去更新另一个数据集的话,就应该用另一个Query 来执行你的数据更新语句。
    with query1 do
        begin
            Close;
            SQL.Clear;
            SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');
            active:=true;
            open;
            first; //进行数据表的排序
            for i := 0 to recordcount - 1 do
            begin
             Query2 := TQuery.Create(Application);
             Query2....//指定数据连接。
             Query2.close;
             Query2.SQL.Clear;
             Query2.SQL.Add('Update ....');
             Query2.SQL.EXEcSQL;       
            end;
        end;
       
     如果你只是想在一个Query中执行两条以上的SQL语句的话,那就太简单了:
        (1)在SQL Server 中:直接书写多条,一次执行就可,因为SQL Server 数据库支持。
        (2)在本地库中执行完一条后:
             with Query1 do
             begin
              ... 
              Close; 
              SQL.clear;
              SQL.Add('')
              ... 
              Close; 
              SQL.clear;
              SQL.Add('')
              ... 
              Close; 
              SQL.clear;
              SQL.Add('')          ... 
              Close; 
              SQL.clear;
              SQL.Add('')
            end;以上的代码只是示例性的。
    有问题可以给我发Email.
      

  17.   

    songlichao(宋立超):你的电子信箱是什么啊,请你告诉我一声吧。
     query1.Edit;
         query1.fieldbyname('message_state').asinteger:=2;
         query1.post;
           try
                                             query1.applyupdates;
                                             query1.commitupdates;
                                        except
                                            query1.cancelupdates;
                                        raise;
                                            exit;
                                        end;
      

  18.   

    query1.Edit;
    query1.fieldbyname('message_state').asinteger:=2;
    query1.post;
      try
          query1.applyupdates;
          query1.commitupdates;
      except
          query1.cancelupdates;
      raise;
          exit;
       end;
    这段代码不能更新数据表啊,并且提示:update failed啊,请帮个忙啊?
      

  19.   

    如果SQL中有group by, order by的话,TQuery是只读而不能修改的。建议你不要这么吝啬,还是用两个TQuery吧,不就多一个对象吗。一个读数据,另一个用update语句写数据。
      

  20.   

    你可以这么做:我刚用过的 (add a transaction  )
    with query1.sql  do 
    begin
    clear;
    add('begin tran ');
    add('insert .....');
    add('update .......');
    add('commit tran');
    end;
    query.execsql;
      

  21.   

    两条是什么意思????如果只是两条语句的话,楼上就是了,如果是两个集?最好还是用两个TQery吧