請問使用odbc連mysql 要如何做到匯入匯出資料庫呢~謝謝 |
答題得分者是:tech_state
|
anglo
一般會員 ![]() ![]() 發表:11 回覆:7 積分:3 註冊:2003-06-23 發送簡訊給我 |
|
tech_state
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
anglo, 您好
最近正好也在學習使用BCB + MySQL,
不過我是透過MyODBC,
不知道與您的情形是否相同,
提供我的方法給您參考看看。
單一Table的資料匯出 void __fastcall TForm1::BitBtn1Click(TObject *Sender) { String str; double i; char *buf; TMemoryStream *ms = new TMemoryStream(); ADOTable1->First(); if(OpenDialog1->Execute()) { while(!ADOTable1->Eof) { str = ""; for(i = 0; i < ADOTable1->FieldCount; i ) { if(i == ADOTable1->FieldCount - 1) str = str ADOTable1->Fields->Fields[i]->AsString char(VK_TAB) "\r\n"; else str = str ADOTable1->Fields->Fields[i]->AsString char(VK_TAB); } buf = str.c_str(); ms->Write(buf, str.Length()); ms->SaveToFile(OpenDialog1->FileName); ADOTable1->Next(); } delete ms; ShowMessage("匯出完成"); } } 檔案匯入單一Table void __fastcall TForm1::BitBtn2Click(TObject *Sender) { char *buf; int i; String str, str2, str3; if(OpenDialog1->Execute()) { // 先將資料庫中所有資料刪除 ADOQuery1->Close(); ADOQuery1->SQL->Text = "delete from Customer "; try { ADOQuery1->ExecSQL(); } catch(...) { ShowMessage("刪除資料庫失敗"); Abort(); } // 再Import所有資料到資料庫 TMemoryStream *ms = new TMemoryStream(); ms->LoadFromFile(OpenDialog1->FileName); buf = (char *)ms->Memory; str = buf; str2 = "'"; for(i = 1; i < str.Length(); i ) { if(str.SubString(i, 1) == char(VK_TAB)) str2 = str2 "', '"; else if(str.SubString(i, 1) == "\r" && str.SubString(i 1, 1) == "\n") { ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Text = "insert into Customer Values( " str2 "')"; try { ADOQuery1->ExecSQL(); str2 = "'"; i = i 1; } catch(...) { ShowMessage("匯入資料失敗"); Abort(); } } else str2 = str2 str.SubString(i, 1); } delete ms; ShowMessage("匯入資料完成"); } } // 刪除資料庫的部分可做可不做,如果不做的話,要小心Primary key等等的唯一值是否會有重複的問題。以上方法不一定是最好的,只是提供我的方法給您參考。 ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之 |
anglo
一般會員 ![]() ![]() 發表:11 回覆:7 積分:3 註冊:2003-06-23 發送簡訊給我 |
|
tech_state
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
引言: 謝謝tech_state 用您的方法~果然可以把問題解決~~不過我在匯入的時候~ char 的位置有一點問題~我已經解決了~我也是使用MyODBC~ 只是用BDE去連結~像您在sql 語法是使用"雙引號,而我用的是'單引號 是因為您是用ADO去連結的關係嗎~~anglo, 您好 不知您說雙引號和單引號指的是哪裡? ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之 |
kuochih
一般會員 ![]() ![]() 發表:2 回覆:8 積分:2 註冊:2003-07-17 發送簡訊給我 |
hi, 如果是要單純把一個mysql的table匯出成一.txt檔
我上次再mysql的語法中找到這樣的用法
配合bcb的qurey元件 Query1->SQL->Clear();
Query1->SQL->Add("select * into outfile
'filename.txt' from table ");
Query1->Prepare();
Query1->ExecSQL(); 即可匯出table
若需要匯入
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name 細節可參考http://linux.tnc.edu.tw/techdoc/mysql/mysql_doc/manual_Reference.html#LOAD_DATA
|
tech_state
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |