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

如何在DBGrid持續顯示資料

尚未結案
jace0421
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-24 10:58:20 IP:220.132.xxx.xxx 未訂閱
請教各位大大,我的問題是:在edit內輸入數值,資料表的資料會顯示在DBGrid內,但是現在我有一個問題,那就是每次輸入數值時,前一筆的資料就會被洗掉,DBGrid永遠只能顯示一筆,我希望DBGrid可以一直顯示之前的資料。請問VCL物件要改嗎?還是程式也要做修改? 以下有程式碼,及相關圖。   請各位大大幫小妹解答。    void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,       TShiftState Shift) {   if (Key==13) {    ADOQuery1->Close();   ADOQuery1->SQL->Clear();   if(Edit1->Text=="")return;   ADOQuery1->SQL->Add("Select * from product Where P_ID=:ID");   ADOQuery1->Parameters->ParamByName("ID")->Value=Edit1->Text;   ADOQuery1->Prepared=true;   ADOQuery1->Open(); } }    
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-24 13:36:16 IP:220.130.xxx.xxx 未訂閱
法1 改用GRID元件就好了 法2 ADOQuery1->SQL->Add("Select * from product Where P_ID=:ID"); ADOQuery1->Parameters->ParamByName("ID")->Value=Edit1->Text; 改成WHERE後面的參數用累加的String ex: ids=ids " and P_ID=" StrToInt(Edit1->Text); ....("Select * from product Where " ids);
jace0421
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-25 10:25:35 IP:220.132.xxx.xxx 未訂閱
rogan321, 法1用Grid,可是Grid不像DBGrid可以指定DataSource 這樣我要怎麼顯示資料庫內的資料呢??
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-26 17:46:50 IP:220.130.xxx.xxx 未訂閱
每次查詢完後~將資料放進GRID中 不需要Datasource fieldname=adoqry->Fieldbyname("fieldname")->AsString; adoqry->Next(); StringGrid的使用範例:  
StringGrid->ColCount=YourFieldCount 1;//設定陣列寬度 1
StringGrid->RowCount=YourRecordCount 1;//筆數 1    for(int i=0;iCells[j 1][i 1]=YourRecordArray[j 1][i 1];
  }
}    for(int j=0;jCells[j 1][0]=YourRecordNameArray;
  }    for(int j=0;jCells[0][j 1]=YourFieldNameArray;
  }     
不知從上面的片段你可了解怎麼實做了嗎
jace0421
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-28 14:45:42 IP:140.130.xxx.xxx 未訂閱
rogan321, 法2:WHERE後面的參數用累加的String,以下是我寫的程式,會有debug    void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,       TShiftState Shift) {   if (Key==13)  {   ADOQuery1->Close();   ADOQuery1->SQL->Clear();   if(Edit1->Text=="")return;   String ids=ids+" and P_ID="+StrToInt(Edit1->Text);   ADOQuery1->SQL->Add("Select * from product Where "+ids);   ADOQuery1->Parameters->ParamByName("ID")->Value=Edit1->Text;   ADOQuery1->Prepared=true;   ADOQuery1->Open();  } }    
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-30 08:48:33 IP:220.130.xxx.xxx 未訂閱
1.String ids=ids+" and P_ID="+StrToInt(Edit1->Text); 變數前面要加單引號:P_ID='" StrToInt(Edit1->Text) "'";(整數值可不用) 2.你不覺得你的SQL語法怪怪的?~WHERE和第一個AND連在一起 Parameters可以拿掉~在有問題Prepared也拿掉 3.第二個問題~沒錯~但是資料庫傳回的資料集要自己讀取放入Grid中 建議直接用中斷點除錯~馬上知道錯誤在哪一行
jace0421
一般會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-31 11:08:34 IP:218.163.xxx.xxx 未訂閱
rogan321,請原諒我資質淺溥丫
引言: 1.String ids=ids " and P_ID=" StrToInt(Edit1->Text); 變數前面要加單引號:P_ID='" StrToInt(Edit1->Text) "'";(整數值可不用) 已做修改,但還是和上一個一樣的debug 2.你不覺得你的SQL語法怪怪的?~WHERE和第一個AND連在一起 Parameters可以拿掉~在有問題Prepared也拿掉 不知道您說的怪怪是… 。parameters不能拿掉吧,會顯示parambyname不是ADOQuery的member 3.第二個問題~沒錯~但是資料庫傳回的資料集要自己讀取放入Grid中 建議直接用中斷點除錯~馬上知道錯誤在哪一行 資料庫傳回的資料自己讀取放入grid中,是像你寫的for迴圈嗎? 這樣不就沒有連接到資料庫了嗎?那資料庫的資料表不就白白建立了呢?
發表人 - jace0421 於 2005/08/31 11:11:54
系統時間:2024-04-20 16:09:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!