利用ADOTable建立,我該如何新增一筆資料到 excel檔裡呢? |
答題得分者是:cashxin2002
|
linda_wei
一般會員 發表:44 回覆:31 積分:20 註冊:2004-04-08 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 第一點﹐如果在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 發送簡訊給我 |
謝謝你, 可是我試了, 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 發送簡訊給我 |
謝謝你, 可是我試了, 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 發送簡訊給我 |
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 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 這句錯誤信息是指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 發送簡訊給我 |
您好, 我修改後:::
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 發送簡訊給我 |
|
linda_wei
一般會員 發表:44 回覆:31 積分:20 註冊:2004-04-08 發送簡訊給我 |
謝謝你,那是因為權限的問題,我在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 發送簡訊給我 |
您好﹗ 這個錯誤信息是指在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 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
linda_wei
一般會員 發表:44 回覆:31 積分:20 註冊:2004-04-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |