我用四个通道采集数据,在memo控件里显示,数据格式如下(每两个数据之间相隔两个空格,并且数据在memo中自动换行):
U1=0.0000278V  U2=0.0000233V  U3=0.0000108V  U4=0.0000042V  U1=0.0000247V  U2=...  U3=...  U4=...如此循环下去
现在我想将memo中的数据分门别类的保存到.db数据库当中,以便以后调用。
保存的格式如下:
          U1                       U2                    U3                U4
      0.0000278V                0.0000233V           0.0000108V        0.0000042V  
      0.0000247V                    ...                  ...              ...
         .                           .                    .                .
         .                           .                    .                .
         .                           .                    .                .                
请问,那位大神出出主意,怎么实现?

解决方案 »

  1.   

    建个表分别建这四个字段,处理U1=0.0000278V U2=0.0000233V U3=0.0000108V U4=0.0000042V U1=0.0000247V U2=... U3=... U4=...这个字符串就可以了。
      

  2.   

    如果你的格式是固定的话,可以这样
    var
      s:string;
    begin
    s:=Trim(Memo1.text);
    s:=stringreplace(s,'  U1=',''' union all select ''',[rfReplaceAll]);
    s:=stringreplace(s,'  U2=',''',''',[rfReplaceAll]);
    s:=stringreplace(s,'  U3=',''',''',[rfReplaceAll]);
    s:=stringreplace(s,'  U4=',''',''',[rfReplaceAll]);
    s:='Insert into t(U1,U2,U3,U4) select '''+Copy(s,4,length(s))+'''';
    Query1.Close;
    Query1.SQL.Text:=s;
    Query1.ExecSQL;
      

  3.   

    2L的思路相当值得学习啊,我以前只会傻傻的处理字符串,不过这样操作有一个漏洞,虽然string可以不限长度,但是使用ado控件的话sql语句过长有时候是会出问题的
    给LZ另外个思路,
    要求严格控制字符串的格式就是u1,u2,u3,u4之间用空格区分,且字符串本身没有空格,这样你先把memo1中 "空格U1="替换成 "回车换行u1=",然后memo1可以直接保存成文本,之后可以使用access导入文本的方式,使用空格当区分符导入数据库,其实使用sql也可以把文本导入数据库,不过书写的格式我忘记了,和excel类似
    另外也可以用本办法纯字符串处理,利用空格做区分符转成字符串列表 然后再使用sql语句一行行插入
      

  4.   

    是啊,大家多出出主意啦,问题的关键:怎么将U1,U2,U3,U4从循环变化的过程中分离出来,并保存到四个字段下的db数据库中?各位提供的方法,我会一一尝试的。
      

  5.   

    想用循环当然方法很多,再给你一种,自己根据情况去完善吧procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      s,s1,s2:string;
    begin
      Query1.Close;
      Query1.SQL.Text:='Select U1,U2,U3,U4 From t Where 1<>1';
      Query1.Open;
      Memo1.Text:=stringreplace(Memo1.Text,'  ',#13#10,[rfReplaceAll]);
      for i:=0 to Memo1.Lines.Count -1 do
      begin
        if Trim(Memo1.Lines.Strings[i])='' then
           continue;    s1:=Memo1.Lines.Names[i];
        s2:=Memo1.Lines.ValueFromIndex[i];
        with Query1 do
        begin
          if LowerCase(s1)='u1' then
             append;
          fieldbyname(s1).asstring:=s2;
          if LowerCase(s1)='u4' then
             post;
        end;
      end;
    end;
      

  6.   

    在写入MEMO之前或同时处理数据,写入数据库,比写入MDEMO后再处理MEMO中的数据省事得多。而且不用考虑重复和更新的问题。
      

  7.   

    字符串split的方法很多,Lz随便查一下就有例子的
    http://blog.sina.com.cn/s/blog_554b1f1b0100b8wg.html
      

  8.   

    你提供的思路很好,但是,你的s:=......这几行的作用是什么,看了,有些懵懂。是不是先把U1=...,U2=...,U3=...,U4=...四类数据分别挑出来归类,然后再去掉U1= U2= U3= U4=这几个字符,分类将其保存到四列中。你写的代码是不是有问题?我加入了总是出错。
      

  9.   

    问题已经得到圆满解决,谢谢诸位,尤其是KAIKAI(开开一心),可以散分了。呵呵...