如何將excel檔當成table來下sql查詢指令呢? |
答題得分者是:Miles
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
建立ODBC Driver to Microsoft Excel (*.xls) 開啟Excel 檔
即可以資料庫方式(當成Table)操作Excel ,下達SQL 指令 --【KTop SNG新聞現場】--記者:ddy----------------------------------------- 請各位市民做好資源回收與垃圾分類,讓不良標題與不當發言在KTop 市消失 -------------------------------------------------------------------------
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
這個給你參考
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 發送簡訊給我 |
轉貼:
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 發送簡訊給我 |
再請教各位:
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 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
再請教各位:
我將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 發送簡訊給我 |
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |