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

mdb的資料表全部nsert 到mysql內 該如何實作?

尚未結案
hatakeshi
一般會員


發表:3
回覆:0
積分:0
註冊:2004-11-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-03-07 21:33:11 IP:114.39.xxx.xxx 訂閱
目前的作法是 使用兩個 adotable 一個去讀mdb 一個去讀mysql(已裝好my sqlodbc)
先把兩個資料表秀出來

接下來要把mdb裡面的資料全部insert到mysql內 請問該如何實作??
或有範例可參考呢??
感謝大大指導
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-03-10 19:28:03 IP:211.75.xxx.xxx 未訂閱
很好奇,既然有 DataSet 可以用,為什麼複製資料還要用 Sql 指令來 Insert 資料?
用兩個 Dataet,由其中一邊複製到另一邊,不就好了嗎?
用 Sql 指令 Insert,只要遇到文字內容有單引號,就掛,因此,必須把每個欄位裡面的單引號變成兩個單引號,很麻煩。又如果,資料表有三百個欄位,Sql 指今不就寫到手軟?
再說,如果以後有新增欄位、修改欄位名稱,程式都要拿出來改。
用兩個 DataSet 單向複製,兩邊資料表裡面的欄位,都用相同的名稱,就只需要
var FieldName : string;
.....
// ToDS.LockType := ltBatchOptimistic; // 能用批次更新是最好的,失敗才能全部重來,不然複製一半掛掉就麻煩了
...
FromDS.First;
while not FromDS.EOF do
begin
ToDS.Append;
for i := 0 to ToDS.FieldCount -1 do
begin
if ToDS.Fields[i].DataType = ftAutoInc then Continue; // 略過自動增號欄位
FieldName := ToDS.Fields[i].FieldName; // 欄位名稱雖相同,但索引本必相同(不要用 FromDS 的欄位名稱)
// if FromDS.FieldList.IndexOf(FieldName) >= 0 then // 能判斷最好
ToDS.Fields[i].Value := FromDS.FieldByName(FieldName).Value;
end;
ToDS.Post;
//-------------
FromDS.Next;
end;
FromDS.First;
// ToDS.UpdateBatch(arAll); // 全部 Ok 才回存
編輯記錄
cancer 重新編輯於 2011-03-10 04:30:12, 註解 無‧
cancer 重新編輯於 2011-03-10 04:31:07, 註解 無‧
cancer 重新編輯於 2011-03-10 04:32:19, 註解 無‧
cancer 重新編輯於 2011-03-10 04:34:59, 註解 無‧
系統時間:2024-04-19 17:58:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!