全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2448
推到 Plurk!
推到 Facebook!

利用ADOTable建立,我該如何新增一筆資料到 excel檔裡呢?

答題得分者是:cashxin2002
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-07 16:25:53 IP:211.75.xxx.xxx 未訂閱
如圖,DBGride裡是用ADOTable->ConnectionString所建立的關聯,而顯示的excel檔. 上方是我要新增的資料,我該如何讓USER按了 "新增"按鈕後.... 1)把Edit1~4的內容,新增到關聯的excel檔裡? 2)同時將excel檔的最近內容重show到DBGride裡呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-07 16:57:23 IP:202.62.xxx.xxx 未訂閱
您好﹗    第一點﹐如果在ADOTable元件上游沒有使用ADOConnection元件的話﹐在專案設計時期需要將ADOTable元件的Active屬性值設為False﹐即ADOTable元件為Close狀態﹐然后在專案執行時﹐再做ADOTable元件的Open動作﹐一般會將程式碼寫在Form的OnCreate事件中﹐如下﹕
begin
  ADOTable1.Open;
end;
第二點﹐如果是新增資料﹐且除對應Edit1~Edit4這四個欄位(專案代號﹐出版日期﹐修改作者﹐修改原因)外的其它欄位允許Null值的話﹐在新增按鈕中如下程式碼﹕
begin
  ADOTable1.Insert;
  ADOTable1.FieldByName('專案代號').AsString := Edit1.Text;
  ADOTable1.FieldByName('出版日期').AsDateTime := StrToDate(Edit2.Text);
  ADOTable1.FieldByName('修改作者').AsString := Edit3.Text;
  ADOTable1.FieldByName('修改原因').AsString := Edit4.Text;
  ADOTable1.Post;
  //以下兩行程式碼的目的是取得最近的資料錄
  ADOTable1.Close;
  ADOTable1.Open;
end;
如果除對應Edit1~Edit4這四個欄位(專案代號﹐出版日期﹐修改作者﹐修改原因)外的其它欄位不允許Null值的話﹐就需要再賦值給其它的欄位后再做Post﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-07 17:54:47 IP:211.75.xxx.xxx 未訂閱
謝謝你, 可是我試了, compiler有問題..... void __fastcall TForm2::Button1Click(TObject *Sender) { //新增按鈕 ADOTable1->Active=false; ADOTable1->Insert(); ADOTable1->FieldByName("專案代號") = Edit1->Text; //.AsString ADOTable1->FieldByName("出版日期") = StrToDate(Edit2->Text); //.AsDateTime ADOTable1->FieldByName("修改作者") = Edit3->Text; ADOTable1->FieldByName("修改原因") = Edit4->Text; ADOTable1->Post(); //以下兩行程式碼的目的是取得最近的資料錄 ADOTable1->Close(); ADOTable1->Open(); ADOTable1->Active=true; } -------------------------------------------- 錯誤訊息.... [C Error] Unit2.cpp(30):E2277 Lvalue requried [C Error] Unit2.cpp(31):E2277 Lvalue requried [C Error] Unit2.cpp(32):E2277 Lvalue requried [C Error] Unit2.cpp(33):E2277 Lvalue requried 這是為什麼呢?
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-07 17:54:49 IP:211.75.xxx.xxx 未訂閱
謝謝你, 可是我試了, compiler有問題..... void __fastcall TForm2::Button1Click(TObject *Sender) { //新增按鈕 ADOTable1->Active=false; ADOTable1->Insert(); ADOTable1->FieldByName("專案代號") = Edit1->Text; //.AsString ADOTable1->FieldByName("出版日期") = StrToDate(Edit2->Text); //.AsDateTime ADOTable1->FieldByName("修改作者") = Edit3->Text; ADOTable1->FieldByName("修改原因") = Edit4->Text; ADOTable1->Post(); //以下兩行程式碼的目的是取得最近的資料錄 ADOTable1->Close(); ADOTable1->Open(); ADOTable1->Active=true; } -------------------------------------------- 錯誤訊息.... [C Error] Unit2.cpp(30):E2277 Lvalue requried [C Error] Unit2.cpp(31):E2277 Lvalue requried [C Error] Unit2.cpp(32):E2277 Lvalue requried [C Error] Unit2.cpp(33):E2277 Lvalue requried 這是為什麼呢?
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-07 19:48:01 IP:210.68.xxx.xxx 未訂閱
ADOTable1->FieldByName("專案代號")->AsString = Edit1->Text; //.AsString ADOTable1->FieldByName("出版日期")->AsDateTime = StrToDate(Edit2->Text); //.AsDateTime ADOTable1->FieldByName("修改作者")->AsString = Edit3->Text; ADOTable1->FieldByName("修改原因")->AsString = Edit4->Text;
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-11 09:13:54 IP:211.75.xxx.xxx 未訂閱
您好, 我修改後, 執行時出現了這樣的訊息..... 好苦惱 ~@@~ Project SW_ap.exe raised exception class EDtatbaseError with message 'ADOTable1:Cannot perform this operation on a closed dataset'. Process stopped. Use Step or Run to continue.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-11 09:26:57 IP:202.62.xxx.xxx 未訂閱
您好﹗    這句錯誤信息是指ADOTable1在Close的時候是不允許Insert的﹒ 解決方法﹕在Insert程式碼之前先將ADOTable1的Active屬性值設為True﹐即先將ADOTable1元件Open﹒
void __fastcall TForm2::Button1Click(TObject *Sender)
{ //新增按鈕
  ADOTable1->Active=True; //或者﹕ADOTable1->Open();
  ADOTable1->Insert();
  ADOTable1->FieldByName("專案代號")->AsString = Edit1->Text; //.AsString
  ADOTable1->FieldByName("出版日期")->AsDateTime = StrToDate(Edit2->Text); //.AsDateTime
  ADOTable1->FieldByName("修改作者")->AsString = Edit3->Text;
  ADOTable1->FieldByName("修改原因")->AsString = Edit4->Text;
  ADOTable1->Post();
  //以下兩行程式碼的目的是取得最近的資料錄
  ADOTable1->Close();
  ADOTable1->Open();
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/10/11 09:27:59
------
忻晟
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-11 09:51:21 IP:211.75.xxx.xxx 未訂閱
您好, 我修改後::: void __fastcall TForm2::Button1Click(TObject *Sender) { //新增按鈕 ADOTable1->Active=false; ADOTable1->Open(); ADOTable1->Insert(); ADOTable1->FieldByName("專案代號")->AsString = Edit1->Text; //.AsString ADOTable1->FieldByName("出版日期")->AsDateTime = StrToDate(Edit2->Text); //.AsDateTime ADOTable1->FieldByName("修改作者")->AsString = Edit3->Text; ADOTable1->FieldByName("修改原因")->AsString = Edit4->Text; ADOTable1->Post(); //以下兩行程式碼的目的是取得最近的資料錄 ADOTable1->Close(); ADOTable1->Open(); ADOTable1->Active=true; } ========卻出現了醬的訊息.... Project SW_ap.exe raised exception class EOleException with message '運作必須使用更新查詢'. Process stopped. Use Step or Run to continue.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-11 10:08:37 IP:202.62.xxx.xxx 未訂閱
您好﹗    參考以下連接試試﹕ http://delphi.ktop.com.tw/topic.php?topic_id=18687    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-11 11:27:55 IP:211.75.xxx.xxx 未訂閱
謝謝你,那是因為權限的問題,我在build的時候,改成可以Read,Write就可以了... 可是又遇到了個問題... 當我新增完一筆後.....我再次compiler時出現了這個訊息.... Project SW_ap.exe raised exception class EOleException with message 'Microsoft Jet 資料庫引擎無法開啟檔案. 它已經被其他的使用者獨佔地開啟,或者您需要有檢視資料的權限'. Process stopped. Use Step or Run to continue. 這又是為什麼呢?!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-11 11:53:23 IP:202.62.xxx.xxx 未訂閱
您好﹗    這個錯誤信息是指在Open ADOTable1之前﹐這個Excel檔案已經處于開啟的狀態了﹒以下步驟檢查一下﹕ 一﹒在設計時期﹐不要把ADOTable1元件的Active屬性值設為True, 其必須為False 二﹒在程式碼的部分﹐不要重复使用Open的方法來開啟ADOTable1元件﹐資料集元件的Open方法和將其Active屬性值設為True是一樣的功用﹐如下﹕
void __fastcall TForm2::Button1Click(TObject *Sender)
  ADOTable1->Insert();
  ADOTable1->FieldByName("專案代號")->AsString = Edit1->Text; //.AsString
  ADOTable1->FieldByName("出版日期")->AsDateTime = StrToDate(Edit2->Text); //.AsDateTime
  ADOTable1->FieldByName("修改作者")->AsString = Edit3->Text;
  ADOTable1->FieldByName("修改原因")->AsString = Edit4->Text;
  ADOTable1->Post();
  //以下兩行程式碼的目的是取得最近的資料錄
  ADOTable1->Close();
  ADOTable1->Open();
然后在此Form的OnCreate事件中再加上如下程式碼﹐用于開啟ADOTable1﹕
  ADOTable1->Open();
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-10-11 13:20:50 IP:211.75.xxx.xxx 未訂閱
先謝謝您,我試了,還是不行, (OnCreate...一compiler就又出現原來的錯誤了) 我改在OnShow還是不行.... 不知怎麼辦了... @@"
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-10-11 14:21:19 IP:202.62.xxx.xxx 未訂閱
您好﹗    貼出完整程式碼來看看吧﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
linda_wei
一般會員


發表:44
回覆:31
積分:20
註冊:2004-04-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-10-11 14:54:25 IP:211.75.xxx.xxx 未訂閱
您好,我加了ADOConnection就可以了 本來我只有用ADOTable去做ConnectString....(再去buile excel檔) 現在我改用ADOConnection去 buile excel檔 然後用ADOTable去Connection ADOConnection就可以囉~ 非常感謝cashxin2002 大大,往後還請不吝指教囉~ 謝謝 ^^
系統時間:2024-05-21 9:04:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!