資料庫更新 |
尚未結案
|
jace0421
一般會員 發表:20 回覆:18 積分:7 註冊:2005-07-15 發送簡訊給我 |
請教各位先知,我要把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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
改用一個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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |