文本文件 内容如下:

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   myp_w_picpaths(FileName,pic)   VALUE(''Image1'',:pic)');   
  Query.ParamByName('pic').LoadFromFile('D:\Hasd.bmp',ftBlob);   
  Query.ExecSQL;   
    
      
    
  修改:   
    
  Query.Close;   
  Query.SQL.Clear;   
  Query.SQL.Add('UPDATE   myp_w_picpaths   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;