我想要将memo控件中的数据分三个字段保存到本地数据库,分别是:日期(D型),时间(T型),电压(A型),保存到本地数据库。在memo中数据用”,“隔开,格式如下:
2011-02-16,13:54:26,0.628
2011-02-17,09:26:32,0.858
2011-02-18,15:21:18,0.653
请问那位大哥能帮帮忙,谢了

解决方案 »

  1.   

    替换字符串,生成多行的Insert语句:
    2011-02-16,13:54:26,0.628
    2011-02-17,09:26:32,0.858
    2011-02-18,15:21:18,0.653
    =>
    insert table1 (f1,f2,f3) values ('2011-02-16','13:54:26','0.628')
    insert table1 (f1,f2,f3) values ('2011-02-17','09:26:32','0.858')
    insert table1 (f1,f2,f3) values ('2011-02-18','15:21:18','0.653')
      

  2.   

    编列memo的lines,然后对每一行按','号分隔,然后执行insert
      

  3.   

    回复sz_haitao
    我的数据很多,恐怕此法难以行得通。
      

  4.   

    数据库最好自己先设计好, 再插入。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmpSL: TStringList;
      i: Integer;
    begin
      for i := 0 to Memo1.Lines.Count-1 do
      begin
        tmpSL := TStringList.Create;
        tmpSL.CommaText := Memo1.Lines[i];
       // SQL操作  tmpSl[0] 为日期  tmpSL[1] 为时间  tmpSL[2] 为电压
        tmpSL.Free;
      end;
    end;
      

  5.   

    方法一
       降memo的数据给一个tstringlist,因为tstringlist的处理速度很快
       list:=tstringlist.create;
       list.add(memo1.line.text);
       for i=0 to list.count-1 do
       begin
         用copy ()的方法。
       end;方法二
    直接用函数 
    function GetDelimiteredStringN(Astring:String;Dlmter:Char;nPos:integer):string;
    var
    sList:TStringList;
    begin
    Result:='';
    sList:=TStringList.Create;
    sList.Text:=StringReplace(Astring,Dlmter,#13#10,[rfReplaceAll]);
    if (nPos>0) and(sList.Count>=nPos) then
     Result:=sList[nPos-1];
    end;
      

  6.   

    5楼,chenpingqq
    6楼,delphi_freeman
    我觉得你们二位的方法给我提供了新思路,多谢!不过,小弟还有一个问题,数据中间的“,”该做如何处理,因为是两个“,”将数据隔开,此处逗号对我无用。
      

  7.   

    我之前曾经试着做了以下简单的尝试和处理,但是,运行好像没效果,不知道问题出在哪里。
    procedure TForm1.SaveButtonClick(Sender: TObject);
    var
      i,j,k: Integer;
      TmpStr,Field1Str,Field2Str,Field3Str: String;
    begin
      for i:=0 to MemRecv.Lines.Count-1 do
        begin
          TmpStr:=MemRecv.Lines[i];
          for j:=1 to Length(TmpStr) do
          if(TmpStr[j]= ',' ) and (TmpStr[k]=',') then
          begin
            Field1Str:=Copy(MemRecv.lines[i],1,j);
            Field2Str:=Copy(MemRecv.lines[i],j,k);
            Field3Str:=Copy(MemRecv.lines[m],k,Length(TmpStr)-k);
            with Table1 do
            begin
              Edit;
              Append;
              FieldByName('日期').AsString:=Field1Str;
              FieldByName('时间').AsString:=Field2Str;
              FieldByName('电压').AsString:=Field3Str;
              Post;
            end;
          end;
       end;
    end;
    如果,按照5楼,6楼所说,两个逗号该做如何处理呢?
      

  8.   


    var
      list:TStringList;
    begin
      list.Delimiter := ',';
      list.DelimitedText := 'a,b,c';
    end;这样list中就是分割后的,a b c
      

  9.   

      Temp:TStrings;
      i:Integer;
    begin
      Temp:=TStringList.Create;
      Result:='';
      try
        Temp.DelimitedText:=bm;
        Temp.Delimiter:=',';
        for i:=0 to Temp.Count -1 do
          Result:=Result+QuotedStr(Temp[i])+',';
        Result:=Copy(Result,1,Length(Result)-1);
      finally
        Temp.Free;
      end;
      

  10.   

    谢谢各位,还有9楼的进一步解答,我又看了下delphi的帮助,问题已经解决了,可以结贴了!