線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1672
推到 Plurk!
推到 Facebook!

使用TQuery新增資料到SQL的問題..

尚未結案
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-28 16:31:33 IP:211.75.xxx.xxx 未訂閱
小弟現在使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-28 19:04:45 IP:61.221.xxx.xxx 未訂閱
引言: 小弟現在使用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元件,請問有地 方可以下載使用嗎?
jackwu, 您好 我測試後, 不必在TQuery先下指令一樣可以做到您要的結果, 也不必在Params上做設定, 不過我是用Paradox的資料庫, 等測試過MS-SQL後在告知您結果。 另外請問您如何連結到資料庫? 是用ODBC嗎? ======================= 是非終日有,不聽自然無 天下本無事,庸人自擾之
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-28 20:58:31 IP:61.221.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-28 22:38:11 IP:203.204.xxx.xxx 未訂閱
引言: 2.站長有跟我建議過可以搭配TUpdateSQL使用,請問要如何使用呢? 因為我從沒有使用過,或者有哪本書介紹比較詳細
jackwu, 您好 試試這個Borland提供的範例吧 C:\Program Files\Borland\CBuilder5\Examples\DBTasks\CachedUp 或許對您有幫助 ======================= 是非終日有,不聽自然無 天下本無事,庸人自擾之
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-29 00:27:16 IP:219.91.xxx.xxx 未訂閱
引言: jackwu, 您好 我測試後, 不必在TQuery先下指令一樣可以做到您要的結果, 也不必在Params上做設定, 不過我是用Paradox的資料庫, 等測試過MS-SQL後在告知您結果。 另外請問您如何連結到資料庫? 是用ODBC嗎?
tech_state你好,請問你所下的指令,和我寫的一樣嗎? 是的,我是利用ODBC來連結資料庫
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-29 11:04:45 IP:211.75.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-29 14:13:13 IP:211.76.xxx.xxx 未訂閱
請修改如紅色的部分. 其中 insert 之前不需要 select 的. 直接下insert command 即可!     
   Query2->Close();
   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();
 
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-29 14:58:47 IP:211.75.xxx.xxx 未訂閱
引言: 請修改如紅色的部分. 其中 insert 之前不需要 select 的. 直接下insert command 即可!
   Query2->Close();
   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();
 
謝謝timhuang,是我自己疏忽,沒有設定DatabaseName 現在按照你交的方式,已經可以用了,謝謝
系統時間:2024-04-25 22:18:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!