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

新增資料的問題

尚未結案
jacksonhuang
一般會員


發表:26
回覆:22
積分:9
註冊:2004-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-26 08:27:31 IP:140.124.xxx.xxx 未訂閱
請問: 我的程式如下: ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values(aaa,bbb)"); ADOQuery1->ExecSQL(); ADOQuery1->Open(); 為什麼在執行時都會有 查詢運算式'U_ID='123456' insert int Account_List(U_ID,PWD) values(aaa,bbb)'中的語法錯誤(少了運算元) 的錯誤 要怎麼才能新增一筆資料到我的table內呢?
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-26 13:24:21 IP:211.162.xxx.xxx 未訂閱
jacksonhuang大大,您好! 不知道我理解的正確與否,您是否是想將U_ID(aaa)和PWD(bbb)添加到名爲Account_List的Table中呢?如果是,請您看看下面的code < class="code"> ADOQuery1->Insert(); ADOQuery1->FieldValues["U_ID"] = aaa; ADOQuery1->FieldValues["PWD"] = "bbb"; ADOQuery1->Post(); 當然也可以通過SQL語句Insert來新增一筆資料,您再看看這樣能否Run:
     ADOQuery1->Close();
     ADOQuery1->SQL->Clear();
     ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)");
     ADOQuery1->SQL->Add("values(aaa,'bbb')");
     ADOQuery1->ExecSQL();
     ADOQuery1->Open();
我也是一知半解,如有謬誤,請您指出,謝謝 < class="code"> =============== 人生在勤,不索何获? =============== 發表人 - bigdogchina 於 2004/04/26 13:28:42
------
人生在勤,不索何获?
jacksonhuang
一般會員


發表:26
回覆:22
積分:9
註冊:2004-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-26 23:10:17 IP:140.124.xxx.xxx 未訂閱
bigdogchina大大您好:    謝謝您撥空回答    我如果用         ADOQuery1->Insert();      ADOQuery1->FieldValues["U_ID"] = aaa; 這行會有錯誤 ADOQuery1->FieldValues["PWD"] = "bbb"; ADOQuery1->Post(); 我如果用 ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values(aaa,'bbb')"); ADOQuery1->ExecSQL(); ADOQuery1->Open(); 則還是會出現 insert into Account_List(U_ID,PWD) values(aaa,'bbb')中的語法錯誤(少了運算元) 的錯誤訊息 我忘了說~我兩個欄位的type都是char的,不知道有和別的type有沒有差 謝謝~~
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-26 23:30:10 IP:61.230.xxx.xxx 未訂閱
不知您的aaa, bbb 指的是文字內容,還是變數 如果是內容, 請試試如下    ADOQuery1->Insert(); ADOQuery1->FieldValues["U_ID"] = "aaa"; ADOQuery1->FieldValues["PWD"] = "bbb"; ADOQuery1->Post(); ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values('aaa','bbb')"); ADOQuery1->ExecSQL(); ADOQuery1->Open(); 如果是變數 試試看 ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values('" aaa "','" bbb "')"); ADOQuery1->ExecSQL(); ADOQuery1->Open(); 發表人 - yachanga 於 2004/04/26 23:38:27
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-27 00:01:05 IP:211.162.xxx.xxx 未訂閱
引言: bigdogchina大大您好: 謝謝您撥空回答 我如果用 ADOQuery1->Insert(); ADOQuery1->FieldValues["U_ID"] = aaa; 這行會有錯誤 ADOQuery1->FieldValues["PWD"] = "bbb"; ADOQuery1->Post(); 我如果用 ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values(aaa,'bbb')"); ADOQuery1->ExecSQL(); ADOQuery1->Open(); 則還是會出現 insert into Account_List(U_ID,PWD) values(aaa,'bbb')中的語法錯誤(少了運算元) 的錯誤訊息 我忘了說~我兩個欄位的type都是char的,不知道有和別的type有沒有差 謝謝~~
不好意思,對不起,因爲我看見您在問題中說:'U_ID='123456',所以我猜想您的U_ID是int型,不是char型的!!!看了您的話後我才知道原來兩個欄位都是char型的,我又畫蛇添足了。當都是char型時,具體的修改請看yachanga大大的回答。 < class="code"> =============== 人生在勤,不索何获? ===============
------
人生在勤,不索何获?
jacksonhuang
一般會員


發表:26
回覆:22
積分:9
註冊:2004-04-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-27 08:16:37 IP:140.124.xxx.xxx 未訂閱
yachanga大大您好:     我用  ADOQuery1->Insert();  ADOQuery1->FieldValues["U_ID"] = "aaa";  ADOQuery1->FieldValues["PWD"] = "bbb";  ADOQuery1->Post();  還是會有以下錯誤    若是用  ADOQuery1->Close();  ADOQuery1->SQL->Clear();  ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)");  ADOQuery1->SQL->Add("values('aaa','bbb')");  ADOQuery1->ExecSQL();  ADOQuery1->Open();     也是會有錯誤      第二個方式的錯誤訊息 第一個方式的錯誤訊息 註:會不會是因為那一個地方的屬性沒有設定的關係呢?? 謝謝........ 發表人 - jacksonhuang 於 2004/04/27 08:20:52
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-27 09:09:58 IP:210.68.xxx.xxx 未訂閱
您好 第一個方法錯誤訊息是因為資料表未打開 ADOQuery1->Open; ADOQuery1->Insert(); ADOQuery1->FieldValues["U_ID"] = "aaa5678"; ADOQuery1->FieldValues["PWD"] = "bbb5678"; ADOQuery1->Post(); 第二個方法錯誤是因為主鍵值重複 請確定U_ID or PWD 哪一個為主鍵值 小弟猜您U_ID為主鍵值 而且aaa 已經塞過了,請找一個資料表有沒有aaa資料 所以先請測試, 看看以下可不可行 ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values('aaa1234','bbb1234')"); ADOQuery1->ExecSQL(); ADOQuery1->Open(); ~悠遊法國號~
jacksonhuang
一般會員


發表:26
回覆:22
積分:9
註冊:2004-04-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-27 09:54:00 IP:140.124.xxx.xxx 未訂閱
yachanga大大您好: 測試後還是有錯誤~ 所以我想直接把code傳在站上,下面是code的連結 http://delphi.ktop.com.tw/forum.asp?FORUM_ID=97 標題是"新增資料的問題" 請大大幫我看一下,會比較快~ 謝謝.........
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-27 22:36:06 IP:203.204.xxx.xxx 未訂閱
jacksonhuang, 您好 您的程式會有錯誤訊息是因為最後一行ADOQuery1->Open();的問題, 猜想您是要看insert後的結果, 如果真的是這樣的話, 可以在ADOQuery1->Open();之前再加上以下的程式碼:  
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Text = "select * from Account_List ";
 
試試看囉! ================================= <>涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 <>是非終日有,不聽自然無 <>天下本無事,庸人自擾之
jacksonhuang
一般會員


發表:26
回覆:22
積分:9
註冊:2004-04-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-28 00:03:46 IP:140.124.xxx.xxx 未訂閱
tech_state大大您好: 加上那一段程式碼後,錯誤沒有了 可是我去看db卻沒有新增資料 以下是程式碼~寫在Button1Click ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Text = "select * from Account_List"; ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values('aaa1234','bbb1234')"); ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Text = "select * from Account_List"; ADOQuery1->Open(); 不知是為什麼~?? 謝謝您撥空回答........
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-28 00:22:48 IP:203.204.xxx.xxx 未訂閱
引言: tech_state大大您好: 加上那一段程式碼後,錯誤沒有了 可是我去看db卻沒有新增資料 以下是程式碼~寫在Button1Click ADOQuery1->Close(); ADOQuery1->SQL->Clear(); // ADOQuery1->SQL->Text = "select * from Account_List"; ADOQuery1->SQL->Add("insert into Account_List(U_ID,PWD)"); ADOQuery1->SQL->Add("values('aaa1234','bbb1234')"); ADOQuery1->ExecSQL(); ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Text = "select * from Account_List"; ADOQuery1->Open(); 不知是為什麼~?? 謝謝您撥空回答........
jacksonhuang, 您好 請注意以上紅色部分。 至於何時要使用ExecSQL(); 何時要使用Open(); 請參考第七期電子報。 ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
jacksonhuang
一般會員


發表:26
回覆:22
積分:9
註冊:2004-04-20

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-04-28 07:14:06 IP:140.124.xxx.xxx 未訂閱
謝謝tech_state和各位大大的回答,現在終於可以了~ 謝謝 發表人 - jacksonhuang 於 2004/04/28 07:15:12
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-04-30 10:20:38 IP:211.162.xxx.xxx 未訂閱
不好意思,問題已經解案,小弟我仍想再對何時要使用ExecSQL(),何時要使用Open()補充兩句(tech_state版大,別打我啊,下次不敢了) 要在運行時執行查詢,可以使用 class="code"> try { Query1->Open(); } catch(Exception &E) { if(!dynamic_cast(&E)) throw; } try子句中調用Open方法,這就允許禁止錯誤消息的發生,因爲一個可用的方法沒有應用到合適的SQL語句上。檢查所産生異常的類型,如果不是ENoResult異常,那麽一定是其他原因引起的異常,必須進行處理。這就是因爲當查詢使用Open方法啟動時將要執行查詢,但除了那個之外會産生一個異常. 1 執行返回結果集的查詢 ①調用Close方法以確保查詢還沒有被打開。如果查詢已經打開,就不能在關閉它之前再次打開它。關閉查詢後並重新打開它,將從Server提取新的資料. ②調用Open方法進行查詢 例如: Query1->Close(); ..... Query1->Open(); //返回一個設置結果 如果需要瀏覽結果集的資訊,那沒就要考慮使用'關閉雙向cursors' 2 執行沒有結果集的查詢 要執行不返回結果集的查詢的SQL語句,調用ExecSQL進行查詢: Query1->ExecSQL();

===============
人生在勤,不索何获? 
===============
------
人生在勤,不索何获?
系統時間:2024-04-30 14:32:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!