DBGride無法正常顯示資料 |
答題得分者是:senso
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
各位先進您好!
小弟最近用了builder 2010寫資料庫程式,可以正常的把值寫進資料庫,但讀出來的時候無法顯示,不知哪裡要改,請先進們提示一下!謝謝! 程式碼如下: void __fastcall TForm1::Button2Click(TObject *Sender) { Query1->SQL->Clear(); Query1->SQL->Add("select * from department"); Query1->Prepare(); Query1->Close(); Query1->Open(); //Query1->First(); //while(!Query1->Eof) //{ //Memo1->Lines->Add(Query1->FieldByName("DEP_NO")->AsString); 這行如果把註解拿掉,會出現如下圖的錯誤 //Query1->Next(); //} } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Query1->SQL->Clear(); //清除 Query1->SQL->Add("INSERT INTO department(DEP_NO,DEP_NAME)"); Query1->SQL->Add("Values(:aDEP_NO,:aDEP_NAME)"); Query1->ParamByName("aDEP_NO")->AsAnsiString = Edit1->Text; Query1->ParamByName("aDEP_NAME")->AsAnsiString = Edit2->Text; Query1->ExecSQL(); Query1->Close(); } //--------------------------------------------------------------------------- 不正常顯示的畫面如下: http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99953 以下是錯誤的畫面: http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99954 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
1.不正常顯示
可能是有自行定義DBGrid的Colums, 有指定 DBGrid1->Columns->Items[0]->FieldName="ID" 但是沒指定 DBGrid1->Columns->Items[1]->FieldName="DEP_NO"; DBGrid1->Columns->Items[2]->FieldName="DEP_NAME"; 所以DBGrid沒顯示後面那兩個欄位 DBGrid1->Columns->Items[0]->Title->Caption只是標題列顯示的文字,和FieldName功用是不一樣的 2.FieldByName錯誤 應該這樣寫 Query1->Fields->FieldByName("DEP_NO")->AsString ===================引 用 cashyy 文 章=================== 各位先進您好! 小弟最近用了builder 2010寫資料庫程式,可以正常的把值寫進資料庫,但讀出來的時候無法顯示,不知哪裡要改,請先進們提示一下!謝謝! 程式碼如下: void __fastcall TForm1::Button2Click(TObject *Sender) { Query1->SQL->Clear(); Query1->SQL->Add("select * from department"); Query1->Prepare(); Query1->Close(); Query1->Open(); //Query1->First(); //while(!Query1->Eof) //{ //Memo1->Lines->Add(Query1->FieldByName("DEP_NO")->AsString); 這行如果把註解拿掉,會出現如下圖的錯誤 //Query1->Next(); //} } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Query1->SQL->Clear(); //清除 Query1->SQL->Add("INSERT INTO department(DEP_NO,DEP_NAME)"); Query1->SQL->Add("Values(:aDEP_NO,:aDEP_NAME)"); Query1->ParamByName("aDEP_NO")->AsAnsiString = Edit1->Text; Query1->ParamByName("aDEP_NAME")->AsAnsiString = Edit2->Text; Query1->ExecSQL(); Query1->Close(); } //--------------------------------------------------------------------------- 不正常顯示的畫面如下: http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99953 以下是錯誤的畫面: http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99954 |
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
感謝senso大大回覆!
第1:我很確定下列2個有指定,是在FieldName的下拉選單指定的 DBGrid1->Columns->Items[1]->FieldName="DEP_NO"; DBGrid1->Columns->Items[2]->FieldName="DEP_NAME"; 第2:如果Query1->ParamByName("aDEP_NO")->AsAnsiString = Edit1->Text; 是錯誤的語法,那為什麼可以正常寫入資料庫呢? 懇請大大再次指導! ===================引 用 senso 文 章=================== 1.不正常顯示 可能是有自行定義DBGrid的Colums, 有指定 DBGrid1->Columns->Items[0]->FieldName="ID" 但是沒指定 DBGrid1->Columns->Items[1]->FieldName="DEP_NO"; DBGrid1->Columns->Items[2]->FieldName="DEP_NAME"; 所以DBGrid沒顯示後面那兩個欄位 DBGrid1->Columns->Items[0]->Title->Caption只是標題列顯示的文字,和FieldName功用是不一樣的 2.FieldByName錯誤 應該這樣寫 Query1->Fields->FieldByName("DEP_NO")->AsString ===================引 用 cashyy 文 章=================== 各位先進您好! 小弟最近用了builder 2010寫資料庫程式,可以正常的把值寫進資料庫,但讀出來的時候無法顯示,不知哪裡要改,請先進們提示一下!謝謝! 程式碼如下: void __fastcall TForm1::Button2Click(TObject *Sender) { Query1->SQL->Clear(); Query1->SQL->Add("select * from department"); Query1->Prepare(); Query1->Close(); Query1->Open(); //Query1->First(); //while(!Query1->Eof) //{ //Memo1->Lines->Add(Query1->FieldByName("DEP_NO")->AsString); 這行如果把註解拿掉,會出現如下圖的錯誤 //Query1->Next(); //} } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Query1->SQL->Clear(); //清除 Query1->SQL->Add("INSERT INTO department(DEP_NO,DEP_NAME)"); Query1->SQL->Add("Values(:aDEP_NO,:aDEP_NAME)"); Query1->ParamByName("aDEP_NO")->AsAnsiString = Edit1->Text; Query1->ParamByName("aDEP_NAME")->AsAnsiString = Edit2->Text; Query1->ExecSQL(); Query1->Close(); } //--------------------------------------------------------------------------- 不正常顯示的畫面如下: http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99953 以下是錯誤的畫面: http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99954 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
看來是錯方向了
圖2錯誤是Query1找不到Field'DEP_NO' 因為Query1沒有設DEP_NO和DEP_NAME吧 所以圖1只有顯示ID那欄,另外那兩欄找不到對應的欄位就只有顯示Caption 照原本的語法應該也可以正常跑 Query1->FieldByName("DEP_NO")->AsString Field和parameter是不一樣的東西... ===================引 用 cashyy 文 章=================== 感謝senso大大回覆! 第1:我很確定下列2個有指定,是在FieldName的下拉選單指定的 DBGrid1->Columns->Items[1]->FieldName="DEP_NO"; DBGrid1->Columns->Items[2]->FieldName="DEP_NAME"; 第2:如果Query1->ParamByName("aDEP_NO")->AsAnsiString = Edit1->Text; 是錯誤的語法,那為什麼可以正常寫入資料庫呢? 懇請大大再次指導! ===================引 用 senso 文 章=================== 1.不正常顯示 可能是有自行定義DBGrid的Colums, 有指定 DBGrid1->Columns->Items[0]->FieldName="ID" 但是沒指定 DBGrid1->Columns->Items[1]->FieldName="DEP_NO"; DBGrid1->Columns->Items[2]->FieldName="DEP_NAME"; 所以DBGrid沒顯示後面那兩個欄位 DBGrid1->Columns->Items[0]->Title->Caption只是標題列顯示的文字,和FieldName功用是不一樣的 2.FieldByName錯誤 應該這樣寫 Query1->Fields->FieldByName("DEP_NO")->AsString |
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
|
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
大大您好!
真的讓您猜中了,count真的是1,而且只剩ID欄位,那到底是哪出了問題呢? 請大大指導!謝謝您 ===================引 用 senso 文 章=================== Query1是不是有另外Add?Field 的ID欄位? open後看一下你的Query1有什麼欄位吧 Memo1->Lines->Add(Query1->Fields->Count);? //你的count大概是1 Memo1->Lines->Add(Query1->Fields->Fields[0]->FieldName);? //就ID欄位 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
大大您好!
問題1:那我是否要把SQL改成select ID,DEP_NO,DEP_NAME from department 問題2:在Query1上有哪個地方可以另外設定Field? 感謝您花費這麼多寶貴時間回答我的笨問題! 謝謝您! ===================引 用 senso 文 章=================== 即使SQL這樣下select * from department 但是Query1有另外設定Field的話,就會只剩設定的Field 要麻就Query1把全部的Field加上去,不然就不要加Field |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
問題1:那我是否要把SQL改成select ID,DEP_NO,DEP_NAME from department
A1:若不使用 TQuery 之 Fields 便不須改, 用 SELECT * FROM <TableName> WHERE <Condition> ORDER By <Column List> 即可. 問題2:在Query1上有哪個地方可以另外設定Field? A2:滑鼠右鍵點擊 TQuery, 首項便是 Fields Editor.
編輯記錄
herbert2 重新編輯於 2009-12-02 13:18:21, 註解 無‧
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
herbert2大大您好!
首先感謝您回覆! 我檢查過TQuery了,在Fields Editor裡面是空的,都沒有設定Field,而SQL只有select * from department而已。 我用了書上的範例,範例上是使用內建的DB:DBDEMOS。 我的測試步驟: 1.在Form上放一個TQuery,TDataSource,TDBGrid。 2.在DBGrid屬性設定DataSouce設為:DataSource1 3.在DataSource1屬性設定DataSet設為:Query1 4.在Query1屬性設定SQL為:select * from employee.db 5.在Query1屬性Active設為:true 就可以看見DBGrid顯示出資料了!我也沒另外設定Field,但用同樣的步驟在我的程式卻只能顯示出ID欄位而已! ===================引 用 herbert2 文 章=================== 問題1:那我是否要把SQL改成select ID,DEP_NO,DEP_NAME from department A1:若不使用 TQuery 之 Fields 便不須改, ? 用 SELECT * FROM <TableName> WHERE <Condition> ORDER By <Column List> 即可. 問題2:在Query1上有哪個地方可以另外設定Field? A2:滑鼠右鍵點擊 TQuery, 首項便是 Fields Editor. |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
簡單步驟就可以看見 DBGrid 顯示出資料是沒錯, 但其 Title 之 Caption 應會是英文欄名.
看了您的螢幕畫面, Title 皆為中文, 而 DBGrid 上卻只顯示出 ID 欄位值而已, 小弟猜, 可能是因您只設了 DBGrid->Columns[0]->Title->Caption, 也設了 DBGrid->Columns[0]->FieldName; 但 DBGrid->Columns[1] 及 DBGrid->Columns[2] 卻只設 Title->Caption, 但未設 FieldName, 故便不顯示其欄值了. 請用滑鼠右鍵在 DBGrid 上點擊一下, 選 Columns Editor 項, 逐欄將顯示 "TColumn" 的 Column, 於 Object Inspector 上補填其 FieldName, 應該就 Ok 了! |
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
herbert2先進您好!
小弟再次檢查了下列步驟: 1.在DBGrid方面,小弟增加了三個Columns,並各別指定了FieldName 請見1.jpg http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99975 2.在Query方面,小弟檢查了Fields Editor,發現只有ID欄位 請見2.jpg http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99976 3.在BDE Administrator方面,檢查了ODBC,開 請見3.jpg http://delphi.ktop.com.tw/board.php?cid=31&fid=130&tid=99978 唯一讓小弟覺得疑惑的是第2點,為什麼在Fields Editor只顯示出了ID欄位?? 是否還有啥地方是小弟沒注意到的事呢? 還請先進們指導!感謝您! ===================引 用 herbert2 文 章=================== 簡單步驟就可以看見 DBGrid 顯示出資料是沒錯, 但其 Title? 之 Caption 應會是英文欄名. 看了您的螢幕畫面, Title 皆為中文, 而 DBGrid 上卻只顯示出 ID 欄位值而已, 小弟猜, 可能是因您只設了 DBGrid->Columns[0]->Title->Caption, 也設了 DBGrid->Columns[0]->FieldName; 但 DBGrid->Columns[1] 及 DBGrid->Columns[2] 卻只設 Title->Caption, 但未設 FieldName, 故便不顯示其欄值了. 請用滑鼠右鍵在 DBGrid 上點擊一下, 選 Columns Editor 項, 逐欄將顯示 "TColumn" 的 Column, 於 Object Inspector 上補填其 FieldName, 應該就 Ok 了! |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
可能不是DBGrid和Query方面的問題了
我猜可能是MySQL ODBC或character set相關,而且第一篇的第一張圖好像也有亂碼出現 這方面不熟~ http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=93228 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=87198 |
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
感謝senso大大的指導!
senso大大提供的文章:http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=93228 跟我的問題一樣!所以我也重新安裝ODBC3.1就正常了! 怎麼ODBC5.1會比ODBC3.1還差呢?? 同時也要感謝herbert2大大的指導! 謝謝兩位大大!感謝您! ===================引 用 senso 文 章=================== 可能不是DBGrid和Query方面的問題了 我猜可能是MySQL ODBC或character set相關,而且第一篇的第一張圖好像也有亂碼出現 這方面不熟~ http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=93228 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=87198 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |