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

資料庫更新

尚未結案
jace0421
一般會員


發表:20
回覆:18
積分:7
註冊:2005-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-13 23:46:28 IP:60.244.xxx.xxx 未訂閱
請教各位先知,我要把edit內的數值回傳到資料庫做更新,同時希望在dbgird上顯示。 以下是我的程式,請問該如何修改,程式在執行時會有錯誤,錯誤是顯示parameter找不到change。money是資料庫的欄位名稱,資料型別是money。 Edit4->Text = remain-temporary; z=StrToInt(Edit4->Text); ADOQuery2->Close(); ADOQuery2->SQL->Clear(); ADOQuery2->SQL->Add("SELECT * UPDATE customer SET money=change WHERE ID=:id"); ADOQuery2->Parameters->ParamByName("change")->Value=z; ADOQuery2->Parameters->ParamByName("id")->Value=Edit2->Text; ADOQuery2->Prepared=true; ADOQuery2->Open();
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-14 15:36:31 IP:211.22.xxx.xxx 未訂閱
SQL語法有問題吧!,假設是 class="code"> ADOQuery2->Close(); ADOQuery2->SQL->Clear(); ADOQuery2->SQL->Add("UPDATE customer SET [Money]=:ID1 WHERE ID=:ID2"); ADOQuery2->Parameters->ParamByName("ID1")->Value=z; ADOQuery2->Parameters->ParamByName("ID2")->Value=Edit2->Text; ADOQuery2->Prepared=true; ADOQuery2->Open(); <>小改一下,看懂> -----------------------
jace0421
一般會員


發表:20
回覆:18
積分:7
註冊:2005-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-15 00:07:57 IP:60.244.xxx.xxx 未訂閱
Stallion大大,照你的寫法是可以更新資料庫的欄位值。 但請問是因為SET所以要加[]呢?還是其他SQL用法也是要加[]? 我多加了紅色的那一行,要顯示在dbgrid,但資料show不出來,只有欄位名稱會show出來。dbgrid我有透過datasource做連接。     z = remain-temporary;  ADOQuery3->Close();  ADOQuery3->SQL->Clear();  ADOQuery3->SQL->Add("UPDATE customer SET [money]=:ID1 WHERE ID=:id");  ADOQuery3->SQL->Add("SELECT * FROM customer WHERE ID=:id"); ADOQuery3->Parameters->ParamByName("ID1")->Value=z; ADOQuery3->Parameters->ParamByName("id")->Value=Edit2->Text; ADOQuery3->Prepared=true; ADOQuery3->Open(); 發表人 - jace0421 於 2005/11/15 00:28:28
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-15 00:54:12 IP:211.22.xxx.xxx 未訂閱
1.資料庫的欄位如果跟SQL SERVER關鍵字同名,要用[]。 2.SQL陳述式不是每一種可以接續一直執行的,不然SQL->Clear()是作啥的! < class="code"> ADOQuery3->SQL->Clear(); ADOQuery3->SQL->Add("UPDATE customer SET [money]=:ID1 WHERE ID=:id"); ADOQuery3->Parameters->ParamByName("ID1")->Value=z; ADOQuery3->Parameters->ParamByName("id")->Value=Edit2->Text; ADOQuery3->Prepared=true; ADOQuery3->Open(); ADOQuery3->SQL->Clear(); ADOQuery3->SQL->Add("SELECT * FROM customer WHERE ID=:id"); ADOQuery3->Parameters->ParamByName("id")->Value=Edit2->Text; ADOQuery3->Prepared=true; ADOQuery3->Open(); ----------------------- Practice makes perfect. 發表人 - stallion 於 2005/11/15 01:00:16
jace0421
一般會員


發表:20
回覆:18
積分:7
註冊:2005-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-15 18:17:57 IP:60.244.xxx.xxx 未訂閱
Stallion,以下程式雖然可以順利更新資料庫,但是要show在dbgrid上會有問題。錯誤是顯示adoquery3:Command Text doesn't return a result set。    void __fastcall TForm1::Button1Click(TObject *Sender) {  DBGrid1->DataSource->DataSet->First();  while(!DBGrid1->DataSource->DataSet->Eof)  {    Sum+=DBGrid1->Fields[5]->AsInteger;    DBGrid1->DataSource->DataSet->Next();  }  DBGrid1->DataSource->DataSet->First();  Edit3->Text = IntToStr(Sum);  temporary = StrToInt(Edit3->Text);  remain=DBGrid2->Fields[3]->AsInteger;  z = remain-temporary;     ADOQuery3->Close();  ADOQuery3->SQL->Clear();  ADOQuery3->SQL->Add("UPDATE customer SET [money]=:ID1 Where ID=:id");  ADOQuery3->Parameters->ParamByName("ID1")->Value=z;  ADOQuery3->Parameters->ParamByName("id")->Value=Edit2->Text;  ADOQuery3->Prepared=true;  ADOQuery3->Open();  如果把ADOQuery3->Open();註解掉,在dbgrid可以show出資料,但是money就沒有更新到了 ADOQuery3->SQL->Clear(); ADOQuery3->SQL->Add("Select * from customer Where ID=:id"); ADOQuery3->Parameters->ParamByName("id")->Value=Edit2->Text; ADOQuery3->Prepared=true; ADOQuery3->Open(); }
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-15 18:45:25 IP:211.22.xxx.xxx 未訂閱
改用一個ADOCOMMAND呢?
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 DBGrid1->DataSource->DataSet->First();
 while(!DBGrid1->DataSource->DataSet->Eof)
 {
  Sum =DBGrid1->Fields[5]->AsInteger;
  DBGrid1->DataSource->DataSet->Next();
 }
 DBGrid1->DataSource->DataSet->First();
 Edit3->Text = IntToStr(Sum);
 temporary = StrToInt(Edit3->Text);
 remain=DBGrid2->Fields[3]->AsInteger;
 z = remain-temporary;
 
 
 ADOCommand->CommandType = cmdText;
 ADOCommand->CommandText = "UPDATE customer SET [money]=:ID1 Where ID=:ID2";
 ADOCommand->Parameters->ParamByName("ID1")->Value=z;
 ADOCommand->Parameters->ParamByName("ID2")->Value=Edit2->Text;
 ADOCommand->Prepared=true;
 ADOCommand->Execute();     ADOQuery3->SQL->Clear();
 ADOQuery3->SQL->Add("Select * from customer Where ID=:ID3");
 ADOQuery3->Parameters->ParamByName("ID3")->Value=Edit2->Text;
 ADOQuery3->Prepared=true;
 ADOQuery3->Open();
}    
----------------------- Practice makes perfect. 發表人 - stallion 於 2005/11/15 18:46:56
jace0421
一般會員


發表:20
回覆:18
積分:7
註冊:2005-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-15 20:02:39 IP:60.244.xxx.xxx 未訂閱
改為ADOCOMMAND之後更新與show資料在dbgrid就沒問題了。 但請問為什麼之前用adoquery會有問題呢?
系統時間:2024-04-17 7:00:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!