線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4813
推到 Plurk!
推到 Facebook!

Excel中的資料轉入資料庫

答題得分者是:supman
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-30 11:59:41 IP:219.132.xxx.xxx 未訂閱
請問如何將Excel中的資料轉入資料庫中 若不是用ADO連接轉入,那如何讀取資料 ex: A B C 1 薪資資料 2 姓名 員工編號 金額 3 xxx 001 15000 4 xxx 002 16000 5 xxx 003 17000 6 xxx 004 18000 7 xxx 005 19000 ... 要轉入的資料是從A3列開始 資料庫:Paradox7 謝謝!
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-30 12:24:43 IP:61.70.xxx.xxx 未訂閱
您好: 自己設立迴圈一筆一筆讀出來然後Insert到資料庫 Query.FieldByName('Field').AsString:=Excel.Cells.Item[Row位置,欄位位置]; 搜尋站內"Excel",相信會有很多資料.
jbinfo
一般會員


發表:9
回覆:25
積分:16
註冊:2004-05-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-30 12:55:53 IP:220.130.xxx.xxx 未訂閱
不知這對你有沒有幫助
      ExcelApp := CreateOleObject('Excel.Application');
      ExcelApp.Visible:=False;
      ExcelApp.WorkBooks.Open(路徑);
      ExcelApp.WorkSheets[1].Activate;          for iRow := 3 to 7 do
      begin
        //-->這裡自行跑迴圈,將每一個cell的資料代出
        //-->例:TempValue := String(ExcelApp.Cells[iRow,iCow]) ;
      end; 
記得uses ComObj 用最笨的方法,做最穩的事情,雖然並不是那麼的漂亮,初學者的吶喊!!!!
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-30 14:25:23 IP:219.132.xxx.xxx 未訂閱
謝謝supman大大,jbinfo大大的回應. 我原來也是按兩位大大的說法去跑回圈,可是用戶反應說匯入的速度太慢(確實也是,因為通常有幾3-4萬筆資料要匯入), 以下代碼是我原來的方式,請問有什麼方法讓匯入資料的速度快一點啊. 比如用 class="code"> var i: Integer; BoxNo: String; MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant; begin if OpenDialog1.Execute then begin // 清空資料 Query1.Close ; Query1.Sql.clear ; Query1.Sql.add('delete from mytest'); Query1.ExecSql; MsExcel := CreateOleObject( 'Excel.Application'); MsExcelWorkBook := msExcel.Workbooks.Open(OpenDialog1.FileName); MsExcelWorkSheet := msExcel.Worksheets.Item[1]; Query1.Close ; Query1.Sql.clear ; Query1.Sql.add('select * from mytest'); Query1.Open; for i := 3 to MsExcelWorkSheet.Rows.Count do begin BoxNo := MsExcelWorkSheet.Range[Chr(65) IntToStr(i)].Value; if BoxNo <> '' then begin Query1.Append; Query1.FieldByName('A01').AsFloat :=strtoFloat(BoxNo); Query1.FieldByName('A02').AsFloat :=MsExcelWorkSheet.Range[Chr(67) IntToStr(i)].Value; Query1.FieldByName('RecNo').AsInteger := i-2; Query1.Post; end else Break; Application.ProcessMessages; end; MessageDlg('匯入資料完成!',mtInformation,[mbOk],0) ; end; 發表人 - zxy666666 於 2005/05/30 16:54:43
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-30 14:56:44 IP:61.70.xxx.xxx 未訂閱
您好: 透過OLE是否有加速的方式,小弟我也不曉得,如果有我也很想知道,因為我也是常常轉到資料庫,等到快睡著..zzz 不然可能就要累一點轉成CSV檔,然後手工去將檔案一筆一筆讀出來,再存到資料庫中. 您可以試一下用TStringList去載入,然後自己切割每一行的字串. 用Ado下Query試試看以下方式 procedure TForm1.BitBtn1Click(Sender: TObject); begin ADOQuery1.active := false; ADOQuery1.SQL.Clear ; ADOQuery1.SQL.Add('select f1 f2 from [' ListBox1.Items.Strings[ListBox1.ItemIndex] ']'); ADOQuery1.Active:=true; end; procedure TForm1.Button1Click(Sender: TObject); var S:String; begin S:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=c:\test\book1.xls;Mode=Share Deny None;Extended Properties=IMEX=1;Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";'; S:=S 'Jet OLEDB:Engine Type=35;Jet OLEDB:Dat'; ADOConnection1.ConnectionString:=S; ADOConnection1.Connected :=true; ADOConnection1.GetTableNames(ListBox1.Items,false); end; 如何設定參考下面這篇 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47834 發表人 - supman 於 2005/05/30 17:40:30
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-31 11:50:06 IP:210.69.xxx.xxx 未訂閱
一定要用 Delphi 寫程式去做嗎 ? 像 MS-SQL 可以直接將 Excel 匯入資料庫 Paradox7 不知道是否也有方法可以這樣做 ? (沒用過 Paradox7) ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-31 14:16:27 IP:219.132.xxx.xxx 未訂閱
謝謝pcboy2大大的回應 因為Excel檔是由客戶自己提供並可以選擇某個XLS檔(當然每個Excel檔案格式是固定的),所以只有用代碼寫了 >
系統時間:2024-06-22 4:02:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!