文本数据,如:1   gg   6  2008-07-12  9.365   False 这条数据写入表bb中,分别对应的类型结果为:int char int datetime    float   bit                                      1   gg   6  2008-07-12  9.365    1 (false在逻辑类型里显示为1) 
这种转换并写入表的过程应该怎么写呢?难点在于要把纯字符串的内容再写入到表中的各种类型中去。高手们帮我想想吧。

解决方案 »

  1.   

    AdoQuery1.Close;
    AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
    AdoQuery1.Parameters.ParamByName('v1').Value:=1;
    AdoQuery1.Parameters.ParamByName('v2').Value:='gg';
    AdoQuery1.Parameters.ParamByName('v3').Value:=6;
    AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate('2008-07-12');
    AdoQuery1.Parameters.ParamByName('v5').Value:=9.365;
    AdoQuery1.Parameters.ParamByName('v2').Value:=false;
    AdoQuery1.ExecSql;
      

  2.   

    var
        strs,strsLine:TStringList;
        i:integer;
    begin
        strs:=TStringList.Create;
        strs.LoadFromFile('c:\1.txt');
        strsLine:=TStringLIst.Create;    for i:=0 to strs.Count-1 do
        begin
            strsLine.DelimitedText:=strs.Strings[i];        AdoQuery1.Close;
            AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
            AdoQuery1.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.String[0]);
            AdoQuery1.Parameters.ParamByName('v2').Value:=strsLine.String[1];
            AdoQuery1.Parameters.ParamByName('v3').Value:=StrToInt(strsLine.String[2]);
            AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.String[3]);
            AdoQuery1.Parameters.ParamByName('v5').Value:=strsLine.String[4];
            AdoQuery1.Parameters.ParamByName('v2').Value:=StrToBool(strsLine.String[2]);
            AdoQuery1.ExecSql;
        end;    strsLine.Free;
        strs.Free;
    end;
      

  3.   

    我这有一段读取txt文件的小例了,你看一下
    function TPaperImpl.ImportPrice: Boolean;
    var
      vfile: TextFile;
      vfilePath,lineInfo:String;
      vOpenDialog: TOpenDialog;
      ID,Name,Code,BRecv,KaiPan,Price: String;
      i: integer;
    begin
      vOpenDialog := TOpenDialog.Create(nil);
      try
        vOpenDialog.Filter := '*.txt';
        vOpenDialog.FileName:='*.txt';
        if not vOpenDialog.Execute then Exit;
        FAC.BeginTrans;
        try
          vfilePath := vOpendialog.FileName;
          AssignFile(vfile, vfilePath);
          reset(vfile);
          i:=0;
          while not eof(vfile) do
          begin
            readln(vfile,lineInfo);
            if i>0 then
            begin
              ID:=trim(copy(lineInfo,0,6));
              Name:=trim(copy(lineInfo,8,8));
              Code:=trim(copy(lineInfo,17,8));
              BRecv:=trim(copy(lineInfo,29,4));
              KaiPan:=trim(copy(lineInfo,37,4));
              Price:=trim(copy(lineInfo,45,4));
              //开始列新价格
              with FQ do
              begin
                Close;
                .....
                ExecSql;
              end;
            end;
            inc(i);
          end;
          closefile(vfile);
          Result := true;
          FAC.CommitTrans;
        except
          FAC.RollbackTrans;
          Result := false;
        end;
      finally
        vOpenDialog.Free;
      end;
    end;
      

  4.   

    5楼的方法好,利用TStringList来处理。
      

  5.   

    我把数据从数据表写到TXT文件是用以下代码写的,但发现文本文件里一行记录都是连在一起的,怎样把每个数据分开呢?不然再写回到数据库时,会认为这是一体的,只是一个数据.  提示错误:1gg62008-07-129.365False不是int型。
    帮我看看读数据到文本的代码哪里欠妥?procedure TForm1.Button2Click(Sender: TObject);
    var
      F1:TextFile;
      str:string;
      j:integer;
    beginif SaveDialog1.Execute
     then
      begin
     AssignFile(F1,SaveDialog1.FileName);
     Rewrite(F1); with adoquery1 do
      begin
      close;
      sql.Clear;
      sql.Add('select * from aa ');
      open;
      first;
        for j:=1 to 20 do
           begin
            memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
            next;
           end;
       end; str:= '';
     str:= memo1.Lines.Text;
     writeln(f1,str);
     CloseFile(F1); showmessage('已完成保存!');
     end;end;
      

  6.   

    memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
    你这中间也没有加个分隔符之类的,比如tab或分号
      

  7.   

    你最好用INI文件存储数据,然后读出来就是一个一个的了,如果是文本文件还得根据格式一个一个的拆分,麻烦死了!
    参考代码:procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      SFileName: string;
    begin
      {将配置文件 参数读出显示在edit}
      SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';
      if not FileExists(SFileName) then
        raise Exception.Create('文件不存在!')
      else
      begin
        Myinifile := TIniFile.Create(SFileName);
        edit2.Text := Myinifile.ReadString('小节名一','关键字1','');
        edit3.Text := Myinifile.ReadString('小节名一','关键字2','');
        edit4.Text := Myinifile.ReadString('小节名二','关键字1','');
        myinifile.Free;
      end;
    end;procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      SFileName: string;
    begin
      {将配置文件 参数读出显示在edit}
      SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';
      Myinifile := TIniFile.Create(SFileName);
      Myinifile.WriteString('小节名一','关键字1',edit2.Text);
      Myinifile.WriteString('小节名一','关键字2','关键字2的内容');
      Myinifile.WriteString('小节名二','关键字1',edit4.Text);
      myinifile.Free;
    end;
      

  8.   

    五楼的最后一个
    AdoQuery1.Parameters.ParamByName('v2').Value:=StrToBool(strsLine.String[2]);改成V6晕,你不会直接拿过去原封不动的就用了吧
      

  9.   

    晕,我当然是改好了再用的了。我改好了才用的,这个我还是看的到的啦。procedure TForm1.Button3Click(Sender: TObject);
    var
    strs,strsLine:TStringList;
    i:integer;
    begin
     if OpenDialog1.Execute then
    begin
        strs:=TStringList.Create;
        strs.LoadFromFile(OpenDialog1.FileName);
        strsLine:=TStringLIst.Create;    for i:=0 to strs.Count-1 do
        begin
            strsLine.DelimitedText:=strs.Strings[i];
            showmessage(strsLine.DelimitedText);
            AdoQuery2.Close;
            AdoQuery2.sql.Clear;
            AdoQuery2.Sql.Text:='insert into bb(no,t1,t2,t3,t4,t5) values(:v1,:v2,:v3,:v4,:v5,:v6)';
            AdoQuery2.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.Strings[0]);
            AdoQuery2.Parameters.ParamByName('v2').Value:=strsLine.Strings[1];
            AdoQuery2.Parameters.ParamByName('v3').Value:=strsLine.Strings[2];
            AdoQuery2.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.Strings[3]);
            AdoQuery2.Parameters.ParamByName('v5').Value:=StrTofloat(strsLine.Strings[4]);
            AdoQuery2.Parameters.ParamByName('v6').Value:=StrToBool(strsLine.Strings[5]);
            AdoQuery2.ExecSql;
            next;
        end;    strsLine.Free;
        strs.Free; end;showmessage('已完成保存!');end;错误提示:list index out of bound(0),数组越界?
      

  10.   

    OK了,我改好了,现在正常了.多循环了一次,空循环了一次。for i:=0 to strs.Count-1 do   改为 for i:=0 to strs.Count-2 do OK啦~~~~~~谢谢各位~~~~~~太感谢了。