使用TQuery新增資料到SQL的問題.. |
尚未結案
|
jackwu
一般會員 ![]() ![]() 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
小弟現在使用TQuery要將資料新增到資料庫中(MS-SQL),採用下面的語法
AnsiString MachineNum; MachineNum = "33"; Query1->SQL->Clear(); Query1->SQL->Add("INSERT INTO ProcessPC (MachineNum)"); Query1->SQL->Add("VALUES(:MachineNum)"); Query1->ParamByName("MachineNum")->AsString = MachineNum; Query1->ExecSQL();但這種寫法必須在Query1的元件上預先下指令 Select TOP 10 * From ProcessPC where MachineNum = :MachineNum然後在Params上對於MachineNum做設定,才能將資料寫到資料庫中 所以有幾個問題想要問各位前輩: 1.是否可以不要在元件上做任何的設定,就可以將資料寫入呢? 我是有試過啦!但都無法將資料寫入 2.站長有跟我建議過可以搭配TUpdateSQL使用,請問要如何使用呢? 因為我從沒有使用過,或者有哪本書介紹比較詳細 3.從其他文章中,發現使用ADOQuery好像對於資料庫的控制比較方便 ,但因為我的BCB版本為Professional版,沒有ADO元件,請問有地 方可以下載使用嗎? |
tech_state
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
引言: 小弟現在使用TQuery要將資料新增到資料庫中(MS-SQL),採用下面的語法jackwu, 您好 我測試後, 不必在TQuery先下指令一樣可以做到您要的結果, 也不必在Params上做設定, 不過我是用Paradox的資料庫, 等測試過MS-SQL後在告知您結果。 另外請問您如何連結到資料庫? 是用ODBC嗎? ======================= 是非終日有,不聽自然無 天下本無事,庸人自擾之AnsiString MachineNum; MachineNum = "33"; Query1->SQL->Clear(); Query1->SQL->Add("INSERT INTO ProcessPC (MachineNum)"); Query1->SQL->Add("VALUES(:MachineNum)"); Query1->ParamByName("MachineNum")->AsString = MachineNum; Query1->ExecSQL();但這種寫法必須在Query1的元件上預先下指令Select TOP 10 * From ProcessPC where MachineNum = :MachineNum然後在Params上對於MachineNum做設定,才能將資料寫到資料庫中 所以有幾個問題想要問各位前輩: 1.是否可以不要在元件上做任何的設定,就可以將資料寫入呢? 我是有試過啦!但都無法將資料寫入 2.站長有跟我建議過可以搭配TUpdateSQL使用,請問要如何使用呢? 因為我從沒有使用過,或者有哪本書介紹比較詳細 3.從其他文章中,發現使用ADOQuery好像對於資料庫的控制比較方便 ,但因為我的BCB版本為Professional版,沒有ADO元件,請問有地 方可以下載使用嗎? |
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Hi, 請問你發生的問題是不是 Parameter 'xxxx' not found 的現象? 在使用 TQuery 或 TADOQuery 時, 若是 SQL Command 為動態給定, 則若是使用 Parameters.ParamByName('xxxx') 時, 會發生 Parameter 'xxxx' not found 的問題, 但是可以使用 Parameters[0..X] 的方式給定, 原因是因為其 Command 尚未 parse 完成, 使得使用 ParamByName 會找不到參數, 解決的方式就是要在給定 SQL Command 之後, 要再進行 ParseSQL, 即可, 相關連結: http://forum.vclxx.org/topic.php?TOPIC_ID=23387&FORUM_ID=5&CAT_ID=2
http://www.delphi32.com/info_facts/faq/faq_932.asp
|
tech_state
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
|
jackwu
一般會員 ![]() ![]() 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
|
jackwu
一般會員 ![]() ![]() 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
引言: Hi, 請問你發生的問題是不是 Parameter 'xxxx' not found 的現象? 在使用 TQuery 或 TADOQuery 時, 若是 SQL Command 為動態給定, 則若是使用 Parameters.ParamByName('xxxx') 時, 會發生 Parameter 'xxxx' not found 的問題, 但是可以使用 Parameters[0..X] 的方式給定, 原因是因為其 Command 尚未 parse 完成, 使得使用 ParamByName 會找不到參數, 解決的方式就是要在給定 SQL Command 之後, 要再進行 ParseSQL, 即可, 相關連結: http://forum.vclxx.org/topic.php?TOPIC_ID=23387&FORUM_ID=5&CAT_ID=2 http://www.delphi32.com/info_facts/faq/faq_932.asp謝謝timhuang,我現在已經將程式改成這樣: Query2->SQL->Clear(); Query2->SQL->Add("Select TOP 10 * from ProcessPC"); Query2->SQL->Add("where MachineNum =: MachineNum"); Query2->SQL->Add("INSERT INTO ProcessPC (MachineNum)"); Query2->SQL->Add("VALUES(:MachineNum)"); Query2->Params->ParseSQL(Query2->SQL->Text, true); Query2->Params->ParamByName("MachineNum")->AsString = MachineNum; Query2->ExecSQL();但是會出現下列的訊息,是不是我的語法寫錯了呢? Project Project1.exe raised exception class EDBEngineError with message 'Invalid use of keyword. Token: 10 Line Number: 1'. Process stopped. Use Step or Run to continue. |
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
請修改如紅色的部分.
其中 insert 之前不需要 select 的. 直接下insert command 即可!
Query2->Close(); Query2->SQL->Clear(); |
jackwu
一般會員 ![]() ![]() 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
引言: 請修改如紅色的部分. 其中 insert 之前不需要 select 的. 直接下insert command 即可!謝謝timhuang,是我自己疏忽,沒有設定DatabaseName 現在按照你交的方式,已經可以用了,謝謝Query2->Close(); Query2->SQL->Clear(); |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |