各位大侠:  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select stationnum,stationname,data from data    where date between '+Edit1.text+' and '+Edit2.text+'');
  ADOQuery1.Open;
  ADOTable1.Clone(ADOQuery1,ltunspecified);通过上面语句我读到了网络服务器的数据,但我不知道应该怎么样把这些数据存储到本地,请高人指点。急!十分感谢

解决方案 »

  1.   

    // 遍历所有的记录
    ADOQuery1.First;
    while(not  ADOQuery1.Eof) do
    begin
      // 字段'stationnum'的值,其他字段类似
      stationnum :=ADOQuery1.FieldByName('stationnum');
      ...
      ADOQuery1.Next;
    end;
    // 这样可以读出所有记录的字段的值,然后看你想怎么保存这些数据了~
      

  2.   

    那还要连接本地数据啊!不知这样行不行。
    ADOQuery1.First;
    while(not  ADOQuery1.Eof) do
    begin
     ADOCommand1.CommandText:='update aa where stationnum=ADOQuery1.FieldByName(stationnum)';
     ADOCommand1.Execute;
     ADOQuery1.Next;
    end;
      

  3.   

    刚才的不行,where 语法有错误。
    logne 您说的我看到了。
    stationnum :=ADOQuery1.FieldByName('stationnum');
    只是这样写好像不行吧,程序找不到stationnum的数据源会无法识别。
    请您再写的详细点好吗,小弟新手,见谅
      

  4.   

    ADOQuery1.First;
    while(not  ADOQuery1.Eof) do
    begin
    //ADOCommand1连得是本地数据源吧?
     //ADOCommand1.CommandText:='update aa where stationnum=ADOQuery1.FieldByName(stationnum)';改成:
     ADOCommand1.CommandText:='update aa where stationnum="'+ADOQuery1.FieldByName(stationnum)+ '"';
     ADOCommand1.Execute;
     ADOQuery1.Next;
    end;
      

  5.   

    ADOQuery1.FieldByName(stationnum)这个要改成ADOQuery1.FieldValues[stationnum]
      

  6.   

    ADOQuery1.FieldByName(stationnum)返回的是一个TField类型的对象,
    ADOQuery1.FieldValues[stationnum]返回的是一个Varient类型的变量
    你可以参考下delphi的帮助啊,写的很详细的
      

  7.   

    ADOCommand1.CommandText:='update aa where stationnum="'+ADOQuery1.FieldValues['stationnum']+'"';   where 附近语法有错误。
    哥哥,请您进一步指导。
      

  8.   

    我用另一种方法解决了问题,非常感谢。代码如下:
    while not ADOQuery1.Eof do
     while not ADOQuery2.Eof do
      begin
       ADOQuery2.Edit;
       ADOQuery2.fieldbyName('data').AsVariant:=ADOQuery1.fieldbyName('data').AsVariant;
       ADOQuery2.Post;
      ADOQuery1.next;
      ADOQuery2.next;
      END;
      

  9.   

    现在又有新的问题了,我不想用这种循环的方法,在更新值的时候会很混乱,仍然想用update这样一对一地更新,可是总是报where 附近有语法错误。我想可能stationnum="'+ADOQuery1.FieldValues['stationnum']+'"';中ADOQuery2中的stationnum没有识别。请各位大侠进来帮忙。
    while not ADOQuery1.Eof do
      begin
      ADOCommand1.CommandText:='update aa where ADOQuery2.fieldbyname(stationnum).AsVariant=ADOQuery1.fieldvalues[stationnum].AsVariant;';
      ADOCommand1.Execute;
      ADOQuery1.next;
      END;
      

  10.   

    你的update的语句写对了没?
    UPDATE a1 
    SET c1 = 50
    FROM t1 a1, t1 a2
    WHERE a1.c1 = 1 AND
    a2.c1 = 2
      

  11.   

    ADOCommand1.CommandText:='update aa set ADOQuery2.fieldbyname(data)=ADOQuery1.fieldvalues[data].AsVariant where ADOQuery2.fieldbyname(stationnum).AsVariant=ADOQuery1.fieldvalues[stationnum].AsVariant';
    提示 ( 附近有语法错误。我总感觉本地数据库里的表它不识别。
      

  12.   

    update aa set data=ADOQuery1.fieldvalues[data].AsVariant where stationnum=ADOQuery1.fieldvalues[stationnum].AsVariantdata和stationnum都是aa表中的字段,ADOCommand1是连接的本地数据库吧?
      

  13.   

    ADOCommand1是连接的本地数据库
      

  14.   

    还是给你写全点吧~~:P
    ADOCommand1.CommandText:='update aa set data="' + ADOQuery1.fieldvalues[data].AsVariant + '" where stationnum = "' + ADOQuery1.fieldvalues[stationnum].AsVariant + '"';
      

  15.   

    data, stationnum我都是当字符串写的
    你首先要把sql语句拼对了才行
    ADOQuery1.fieldvalues[data].AsVariant 这些东西肯定不能写到字符串里去呀,要不怎么取值,
    ~~~
      

  16.   

    还是=前面data stationnum的问题。后来改成
    update aa set "' + ADOQuery2.fieldvalues['data'].AsVariant + '"="' + ADOQuery1.fieldvalues['data'].AsVariant + '" where "' + ADOQuery2.fieldvalues['stationnum'].AsVariant + '"= "' + ADOQuery1.fieldvalues['stationnum'].AsVariant + '"也还是不行。
    logne 帮人帮到底吧,呵呵:( 。
      

  17.   

    UPDATE a1   a1是表明
    SET c1 = 50 c1是a1中的字段
    where c2=40 c2是a1中的字段
    ADOCommand1.CommandText:='update aa set data="' + ADOQuery1.fieldvalues[data].AsVariant + '" where stationnum = "' + ADOQuery1.fieldvalues[stationnum].AsVariant + '"';
    你仔细看一下上面这句和你写的有什么区别,还有有时间学习一下sql语句吧~
      

  18.   

    我明白你的意思,但是这一句set data=这data程序并不知道是哪里来的啊,运行时也会报错。
      

  19.   

    ADOQuery1连接服务器ADOQuery2连接本地。
      

  20.   

    aa表里有data这个字段没?不行你就加上aa.data试试
      

  21.   

    aa.data也不行,现在就是这个问题,无法让程序识别本地的表字段.
      

  22.   

    看下你ADOCommand1设置的对么?是连接的本地数据库?
      

  23.   

    ADOQuery2.Sql.clear;
    ADOQuery2.sql.add('update aa set data="' + ADOQuery1.fieldvalues[data].AsVariant + '" where stationnum = "' + ADOQuery1.fieldvalues[stationnum].AsVariant + '"';);
    ADOQuery2.open;
      

  24.   

    你aa表的结构信息?有data这个字段么?
      

  25.   

    Invalid variant operation
    哥哥,靠你了,呵呵。
      

  26.   

    aa
    stationnum   char   10
    stationname   char   10
    data   char   10
      

  27.   

    'update aa set data="' + ADOQuery1.fieldvalues['data'].AsString+ '" where stationnum = "' + ADOQuery1.fieldvalues['stationnum'].AsString+ '"'
      

  28.   

    你调试下,把最终生成的sql语句取出来看看~
      

  29.   

    你说的是try
         ex.... 吗?
    :(我不会用。
      

  30.   

    ADOQuery2.Sql.clear;
    ADOQuery2.sql.add('update aa set data="' + ADOQuery1.fieldvalues[data].AsVariant + '" where stationnum = "' + ADOQuery1.fieldvalues[stationnum].AsVariant + '"';);
    // 在这查看ADOQuery2.sql.text
    ShowMessage(ADOQuery2.sql.Text);
    ADOQuery2.open;
      

  31.   

    update aa set data=12 where stationnum=50101
    这是我用查询分析器做的,已通过,修改了data数据。
      

  32.   

    到ADOQuery2.sql.add就停了,没有执行到ShowMessage(ADOQuery2.sql.Text);
      

  33.   

    你看下你ADOQuery1的值取到了没?
    var
      data, stationnum: string;
    ...
      // 看着两个能取出来么?
      data := ADOQuery1.fieldvalues['data'].AsString;
      stationnum := ADOQuery1.fieldvalues[stationnum ].AsString;
      

  34.   

    这样不行吧,ADOQuery1.fieldvalues['data'].AsString。如果循环它有很多值,无法取。如果不循环,那它是什么值呢。
      

  35.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select stationnum,stationname,data from data where date between '+Edit1.text+' and '+Edit2.text+'');
      ADOQuery1.Open;
      ADOTable1.Clone(ADOQuery1,ltunspecified);
      showmessage('读取成功!')
    end;
    取服务器数据并显示出来,我放在按钮1里了。
      

  36.   

    BitBtn2Click:
    while not ADOQuery1.Eof do
     while not ADOQuery2.Eof do
      begin
       ADOQuery2.Edit;
       ADOQuery2.fieldbyName('data').AsVariant:=ADOQuery1.fieldbyName('data').AsVariant;
       ADOQuery2.Post;
      ADOQuery1.next;
      ADOQuery2.next;
      END;
    BitBtn2Click是想把显示的数据存入本地,开始想用ADOQuery1、2循环,上面的语句可行,但是不想用。用update又出现问题,连本地是用ADOQuery的属性设置。
      

  37.   

    这是现在的存储代码:
    procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
    while not ADOQuery1.Eof do
    begin
    ADOQuery2.Close;
    ADOQuery2.Sql.clear;
    ADOQuery2.sql.add('update aa set data="' + ADOQuery1.fieldvalues['data'].AsVariant + '" where stationnum = "' + ADOQuery1.fieldvalues['stationnum'].AsVariant + '"');
    ADOQuery2.open;
    ADOQuery1.Next;
    end;
    showmessage('存储成功!')
    end;
      

  38.   

    var
      data, stationnum: string;
    ...
    ADOQuery1.First;
    while not ADOQuery1.Eof do
    begin
      ADOQuery2.Sql.Clear;
      data := ADOQuery1.fieldvalues['data'].AsString;
      stationnum := ADOQuery1.fieldvalues[stationnum ].AsString;
      ADOQuery2.Sql.Add('update aa set data="' + data  + '" where stationnum = "' + stationnum  + '"');
      ADOQuery2.ExecSQL;
    end;
      

  39.   

    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      data, stationnum: string;
    begin
    ADOQuery1.First;
    while not ADOQuery1.Eof do
    begin
      ADOQuery2.Sql.Clear;
      data := ADOQuery1.fieldvalues['data'].AsString;
      stationnum := ADOQuery1.fieldvalues[stationnum ].AsString;
      ADOQuery2.Sql.Add('update aa set data="' + data  + '" where stationnum = "' + stationnum  + '"');
      ADOQuery2.ExecSQL;
    end;
    showmessage('存储成功!')end;
    报错信息想同
      

  40.   

    data := ADOQuery1.fieldvalues['data'].AsString; 这句
      

  41.   

    在服务器的数据库里data不是string类型吧
      

  42.   

    所有的数据类型我都做成char的,服务器和客户端。那我改成AsVariant试试吧。
      

  43.   

    data := ADOQuery1.fieldvalues[data].AsVariant ;
      stationnum := ADOQuery1.fieldvalues[stationnum ].AsVariant ;
    报错:ADOQuery1 field not found
      

  44.   

    data := ADOQuery1.fieldvalues['data'].AsVariant ;
      stationnum := ADOQuery1.fieldvalues['stationnum'].AsVariant ;
      

  45.   

    data := ADOQuery1.fieldvalues['data'].AsVariant ;
    还是这一行,错误信息:Invalid variant operation
    到底是哪的问题???哎。
      

  46.   

    Invalid variant operation类型不匹配,你查看下到底是什么类型的
      

  47.   

    data := ADOQuery1.FieldByName('data').AsVariant ;
      

  48.   

    服务器和客户端我都用的char类型,当初我就怕乱了。
      

  49.   

    列名9无效!
    9是服务器data字段的第一个值。
    似乎有一点方向了。
      

  50.   

    哈哈,刚才没注意一直用的是ADOQuery1.fieldvalues['data']这是个variant的变量,variant.asvariant这样会出错的,不知到为什么编译不出错,ft
      

  51.   

    9是服务器data字段的第一个值。好象ADOQuery1没有遍历。