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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM