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

如何將excel檔當成table來下sql查詢指令呢?

答題得分者是:Miles
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-05 23:43:44 IP:210.85.xxx.xxx 未訂閱
各位前輩: 如何將excel檔當成table來下sql查詢指令呢?因為user都已經做好excel檔了,我只是要將我要的資料分組選出及統計,再分組印出。我該用什麼方法連到excel呢?請各位前輩指點!
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-05 23:51:50 IP:61.59.xxx.xxx 未訂閱
建立ODBC Driver to Microsoft Excel (*.xls) 開啟Excel 檔 即可以資料庫方式(當成Table)操作Excel ,下達SQL 指令 --【KTop SNG新聞現場】--記者:ddy----------------------------------------- 請各位市民做好資源回收與垃圾分類,讓不良標題與不當發言在KTop 市消失 -------------------------------------------------------------------------
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-06 07:42:36 IP:61.219.xxx.xxx 未訂閱
這個給你參考
function OpenXlsAsADO(owner:TComponent;fname:string;sheetname:string='sheet1'):TAdoQUery;
var s,sht:string;
begin
  Result:=TAdoQuery.Create(owner);
  try
    s:=AnsiReplaceStr(AdoConnectStr, 'xxx.xls', fname);
    Result.ConnectionString:=s;
    sht:='[' SheetName '$' ']';
    Result.sql.text:='select * from ' sht;
    Result.open;
  except
    result.Free;
  end;
end;    initialization
  AdoConnectstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' 
                 'Data Source=xxx.xls;' 
                 'Mode=Share Deny None;Extended Properties=Excel 8.0;' 
                 'Persist Security Info=False;Jet OLEDB:System database="";' 
                 'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";' 
                 'Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;' 
                 'Jet OLEDB:Global Partial Bulk Ops=2;' 
                 'Jet OLEDB:Global Bulk Transactions=1;' 
                 'Jet OLEDB:New Database Password="";' 
                 'Jet OLEDB:Create System Database=False;' 
                 'Jet OLEDB:Encrypt Database=False;' 
                 'Jet OLEDB:Don''t Copy Locale on Compact=False;' 
                 'Jet OLEDB:Compact Without Replica Repair=False;' 
                 'Jet OLEDB:SFP=False';    
發表人 - ccchen 於 2002/12/06 07:43:12
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-06 10:46:11 IP:210.58.xxx.xxx 未訂閱
轉貼: ADO 讀 Excel 1. 以 c:\Test.xls 檔案為例 ADOConnection 元件 ConnectionString 屬性設定如下 (注意 Extended Properties 部份): Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.xls;Extended Properties=Excel 8.0;Persist Security Info=False 2. 用 ADOConnection.GetTableNames 來取得每個 sheet 的 Name 3. 接下來就跟一般的資料庫動作相同了! 4 SQL : Select * from [Sheet1] 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-06 22:08:31 IP:210.85.xxx.xxx 未訂閱
再請教各位: Milles: 我要用 ADOConnection.GetTableNames 來取得每個 sheet 的 Name,參照了delphi的help改成這樣: procedure TForm1.Button1Click(Sender: TObject); var SL: TStrings; index: Integer; begin SL := TStringList.Create; try ADOConnection1.GetTableNames(SL, False); for index := 0 to (SL.Count - 1) do begin ADOTable1.Insert; ADOTable1.FieldByName('Name').AsString := SL[index]; if ADOTable1.Active then ADOTable1.Close; ADOTable1.TableName := SL[index]; ADOTable1.Open; Table1.FieldByName('Records').AsInteger := ADOTable1.RecordCount; Table1.Post; end; finally SL.Free; ADOTable1.Close; end; end; 他就會說被獨佔的開啟了,要有權限才行。可是我明明沒開啟啊,是不是我哪裡出錯了? ccchen:他說我AnsiReplaceStr未定義,我該怎麼辦呢? ps.小弟初學,問的不得體請見諒!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-07 05:20:57 IP:202.39.xxx.xxx 未訂閱
記得先把設計時期的 TADOConnection.Connected 屬性設為 False 在執行的時候才設為 True    -- Everything I say is a lie.
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-07 08:26:57 IP:203.217.xxx.xxx 未訂閱
他說我AnsiReplaceStr未定義,我該怎麼辦呢? 在uses 中加入StrUtils
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-07 09:22:54 IP:61.216.xxx.xxx 未訂閱
我之前有遇過這各情形..D5.. 我想你可能沒有做AdoUpdate吧..(Borland網站下載) Try Try see..^^ 發表人 - chih 於 2002/12/07 09:24:05
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-08 17:59:37 IP:210.85.xxx.xxx 未訂閱
再請教各位: 我將ADOTable設成active時,就會出現「查詢語法錯誤。不完整的查詢子句」。可是我將屬性的TableDirect設成true,就可以了。這是為什麼啊?TableDirect有什麼作用嗎? 另外,如果我要將sheet name寫進combobox,讓使用者能切換,那我該用什麼函數? 心得:結果獨佔的開啟是因為我在設計時,直接在delphi底下run,把delphi關掉後再run就行了。 可是現在還有一個問題,就是我如果要弄到DBGrid上,他每個欄位就直接給我佔滿了DBGrid的大小,把DBGrid拉大拉小也沒用,DBGrid上是不是有屬性可以調?因為直接在DBGrid上左拉右拉非常的麻煩,常常拉不到,有什麼解決的方式呢? 小弟承蒙大家的指點,希望能做個很簡單連到excel來當table或query的範例。目前用已知的excel檔,所以知道檔名及sheet名,這樣一行程式也不用寫,就可以list出來了。如果要讓user選excel檔及sheet檔、下sql指令,就得改一改了。再一次謝謝大家!
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-11 21:38:09 IP:210.85.xxx.xxx 未訂閱
是不是沒有辦法用adoquery得知一個excel檔下有幾個sheet啊?好像找不到這樣的指令,如果有的話,麻煩前輩告知!
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-11 21:51:49 IP:210.85.xxx.xxx 未訂閱
對不起,我試成功了,原來真的用gettablenames就成功了,謝謝! 不過還有個小問題,為什麼我get出來的table names,都會有兩個呢? 其中一個有底線,一個沒有底線,這有什麼差別? 沒有差別的話,可不可以只出現一組?
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-12 10:47:34 IP:210.58.xxx.xxx 未訂閱
Hi bookworm : 我試一下卻沒有你說的狀況 ADOConnection1.GetTableNames(Memo1.Lines); 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-04-28 5:43:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!