zoukankan      html  css  js  c++  java
  • Delphi txt文件导入数据库

    文本文件 内容如下:

    000000123407:552009052901

    000000123407:552009053001

    000000123407:552009053101

     

    说明,0000001234 为卡号,07:55为时间,20090530为日期,01为机号

     

    怎么倒入SQL表?

     

    SQL表如下

    卡号  时间  日期  机号

     

    请帮忙写出详细代码,感谢

    其他回答 共1条

    2009-5-29 17:34 yych1987 | 二级

    procedure TForm1.PostData(aValue: string);

    var                         

      KaH,ShiJ,RiQ,JiH: string;

      Temp: integer;

    begin

      Temp := Pos(':',aValue);

      KaH := Copy(aValue,1,Temp-3);     //卡号

      ShiJ := MidStr(aValue,Temp-2,5);  //时间

      RiQ := Copy(aValue,Temp+3,8);     //日期

      JiH := RightStr(aValue,2);        //机号

      ADODataSet1.Append;

      ADODataSet1.FieldByName(卡号).Value := KaH;

      ADODataSet1.FieldByName(时间).Value := ShiJ;

      ADODataSet1.FieldByName(日期).Value := RiQ;

      ADODataSet1.FieldByName(机号).Value := JiH;

      ADODataSet1.Post;

    end;

     

    procedure TForm1.Button2Click(Sender: TObject);

    var

      t: TextFile;

      s: string;

    begin

      AssignFile(t,'d:\1.txt');

      Reset(t);   //只读打开文件

      while not Eof(t) do

        begin

          Readln(t,s);

          PostData(s);

        end;

    end;

     

    记得引用StrUtils单元

    with query1 do
    begin
      close;
      sql.clear;
      sql.add('BULK INSERT au..mengzi FROM ''d:\tb\mengzi.txt''');
      execsql;
    end;

    数据库的方法

    有一段人事档案资料archive.txt,内容如下:
      小许男21工程师
      小吴女23助理工程师
      小蔡男22助理工程师
      小牟女22工程师

      要将它转入数据库archive.dbf中,archive.dbf结构如下:
      姓名,性别,年龄,职称

      怎么办呢?现在通过使用delphi编程,很好地解决了这个难题。Delphi提供了许多功能强大,丰富的字符处理函数和过程,常用的有:
      (1)function Length(S:String):Integer//返回串的长度
      (2)function Copy(S:String;Index,Count:Integer):String//给出一个字符串中串的拷贝
      (3)function Pos(Substr:String;S:String);Integer//查找子串在字符串中的位置
      (4)Procedure Delete(VarS:String;Index,Count:Integer);  //从一个字符串中去除子串

      利用Delphi提供的已有函数和过程基础上编制自己的三个函数,实现了纯文本格式资料转入数据库功能。只要Delphi支持的数据库都可以支持。

      archive.txt中每行数据为一个字符串,字符串中每个被分割的数据为一个字段,分割每个字段的字符为分割符,这里是空格,也可以是,、;、#等符号。具体思想是:先将字符串进行调整,然后把串中每个字符同分割符比较,将不是分割符的字符追加到MyStr串中,最后得到一个字段的内容。通过一个循环,就可以将一个字符串分成几个字段。

      Function Regulate(aString,Sepchar:string):string   //去掉多余的分割符,规范字符串
      Function GetSubStr(varsString:string;SepChar:String):String;  //得到字符串中一个子串,因要改变参数aString的值,所以将它用var定义。
      FunctionGetSubStrNum(aString,SepChar:String):Integer;  //计算一个字符串要被分割成几个字段。
      参数:aString是所需分割的一个字符串,SepChar是分割符。

      Function RegulateStr(aString:String;Sepchar:String):String;
      var
      i,Num:Integer;
      Flag:Boolean;
      MyStr,TempStr:String;
      begin
      Flag:=False;//进行标志,去除多余的分割符
      Num:=Length(aString);//计算aString串的长度
      for i:=1 to Num do
      begin
      TempStr:=Copy(aString,i,1);//取aString串中的一字符
      if TempStr <> SepChar then
      begin
      MyStr:=MyStr+TempStr;
      Flag:=True;
      end
      else
      if(Flag = True)then
      begin
      Mystr:=Mystr+TempSrt;
      Flag:=False;
      end;
      end;
      if MyStr[Length(MyStr)] <> SepChar then
      MyStr:=MyStr+SepChar;
      RegulateSrt:=MyStr;
      end;

      Function GetSubStr(var aString:String,SepChar:Strign):String;
      var
      Mysrt:String;
      StrLen:Integer;
      SepCharPso:Integer;
      begin
      StrLen:=Length(aString);
      SepCharPos:=Pos(SepChar,aString);//计算分割符在子串中的位置
      MyStr:=Copy(aString,1,SepCharPos-1); //将分割符前所有字符放到mystr串中
      Delete(aString,1,SepCharPos);//除去分割符和分割符前的子串
      GetSubStr:=MyStr;//返回一个字段
      end;

      FunctionTforml.GetSubStrNum(aString:String;SepChar:String):Integer;
      var
      i:Integer;
      StrLen:Integer;
     Num:Integer;
      begin
      StrLen:=Length(aString);
      Num:=0;
      for i:=1 to StrLen do
      if Copy(aString,i,1) = SepCharthen
      Num:=Num+1;
      GetSubSrtNum:=Num;
      end;

      有了上面三个函数,现在介绍一下具体的应用:
      1.首先建立一个窗体Forml,加入一个RichEditl(或Menol),一个按钮Buttonl和一个Tablel,设置Tablel的属性:
      Tablell.DataBase = 'c:\Archivs'
      Tablell.TableName ='Archive.dbf'

      2.分别加入以下程序:
      Const Space= ''
      ProcedureTForml.FormCreate(Sender:Tobject);
      begin
      RichRditl.Lines.LoadFromFile('Archive.txt');
      end;

      ProcedureTForml.Button1Click(Sender:Tobject);
      var
      i,j:Integer;
     MyLine:String;
      begin
    &

    您正在看的Delphi教程是:文本数据导入数据库的方法。nbsp;  with Tablel do
      begin
       Open;
     for i:=0 to RichEditl.Lines.Count-1 do
     begin
      MyLine:=RegulateStr(Richeditl.Lines[i],Space);
      for j:=1 to Num do
      begin
      Append;
      fileds[j-1].aString:=GetSubSrt(MyLine,Space));
      post;
      end;
      end;
      end;
      end;

    就为把就为把txt文件导入到SQL   SERVER﹐query1內地sql語句如何寫﹐俺用呢1個BUTTON,把你  
      顶面地語句試呢1下﹐有這樣錯誤--更新及重整所需地欄位資訊非足﹐非知為何﹐用JEETLIANG地  
      1開始可以﹐數據改呢就非行呢﹐可否詳1點﹐謝呢  
     

       5楼: wzds2000
    关注,帮你顶。。。

       6楼: huojiehai
    更详请参考:  
      增加:  
       
       
      Query.Close;  
      Query.SQL.Clear;  
      Query.SQL.Add('INSERT   INTO   myimages(FileName,pic)   VALUE(''Image1'',:pic)');  
      Query.ParamByName('pic').LoadFromFile('D:\Hasd.bmp',ftBlob);  
      Query.ExecSQL;  
       
         
       
      修改:  
       
      Query.Close;  
      Query.SQL.Clear;  
      Query.SQL.Add('UPDATE   myimages   SET   pic=:pic   WHERE   filename=''Image1''');  
      Query.ParamByName('pic').LoadFromFile('D:\Hasd2.bmp',ftBlob);  
      Query.ExecSQL;  
     

       7楼: ihihonline
    提问非明确,分三种情况给你回答:  
      No.1:就为SQL   语句  
              SQL.LoadFromFile(....Txt);  
      No.2:就为SQL   Server里地具体内容。  
            如海天子兄那样。  
      No.3:就为作为1个数据表来用,可以用ADO,改变其属性,将此文本文件当做1个数据表。  
       
      ----------------------------------------------------------  
      事太多、心太乱  
               
     

       8楼: ninewin
    可能各位高人把问题和疑问想得太复杂呢,俺需要地就为住C盘内地1个test.txt文件,它地具体内容为  
      2003100109110  
      2003100109111  
      2003100109112  
      2003100109113  
      2003100109114  
      2003100109115  
      2003100109116  
      2003100109117  
      俺需要把test.txt   导入SQL内地1个表,表名为T1,字段名:kqno   char(25)   ;服务器为ERPSERVER,数据库软件名为TEST,  
       
       
     

       9楼: qgj99
    帮你定  
     

       10楼: SuperSeventh
    可以首先用Stream读入文件,然后逐行取数据,填入到数据库软件中。

       11楼: alexzhang00
    Function   txtToSQLServer(txtfilename:   string):   boolean;  
      var  
      adoCon   :   TADOConnection;  
      adoQuery   :   TADOQuery;  
      txtSourceFile   :   TextFile;  
      begin  
      result   :=   False;  
      if   Not   FileExists(txtfilename)   then   exit;  
      try  
      assignfile(txtSourceFile,txtfilename);  
      Reset(txtSourceFile);  
      if   Eof(txtSourceFile)   then   exit;  
      adoCon   :=   TADOConnection.Create;  
      adoQuery   :=   TADOQuery.Create(nil);  
      try  
      With   adoCon   do  
      begin  
                ConnectionString   :=   'DRIVER={SQL   SERVER};SERVER=ERPSERVER;UID=sa;PWD=;Database=TEST';  
                Connected   :=   True;  
      end;  
      With   adoQuery   do  
      begin  
                Connection   :=   adoCon;  
      end;  
      except  
                  on   E:Exception   do  
                            showmessage(E.Message);  
      end;  
      while   not   eof(txtSourceFile)   do  
      begin  
                    With   adoQuery   do  
                    begin  
                                sql.clear;  
                                sql.add('insert   into   t1(kqno)   values   ('   +   quotedstr(readln(txtSourceFile)   +   ')');  
                                ExecSQL;  
                    end;  
      end;  
      result   :=   true;  
      finally  
                    adoCon.close;  
                    adoQuery.free;  
                    adoCon.free;  
      end;  
      end;  
       
       
      调用:  
      procedure   tform1.button1click(sender:Tobject);  
      beign  
                      if   txtToSQLServer('test.txt')   then  
                                  showmessage('导入成功')  
                      else  
                                  showmessage('导入失败');  
      end;

  • 相关阅读:
    由VMnet引起的browser-sync故障解决方案
    Gen8折腾日记
    实变函数笔记(1)——集合与基数
    密码学笔记(6)——复杂度及其相关内容
    微分几何笔记(1)——参数曲线、内积、外积
    密码学笔记(5)——Rabin密码体制和语义安全性
    密码学笔记(4)——RSA的其他攻击
    密码学笔记(2)——RSA密码
    密码学笔记(1)——数论准备知识
    第七章小结
  • 原文地址:https://www.cnblogs.com/mingdep/p/2317942.html
Copyright © 2011-2022 走看看