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;

posted @ 2012-01-10 11:33  byronming  阅读(4823)  评论(0编辑  收藏  举报