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

如何輸入數值取得資料庫的資料

尚未結案
jace0421
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-08 22:31:20 IP:218.163.xxx.xxx 未訂閱
請教各位大大,如何在edit內輸入數值,進而取得資料庫的資料 我要設計的是輸入一筆數字,這數字與欄位P_ID的值相等。 進而在DBGrid顯示出資料庫表單的所有欄位。 資料庫是使用MsSQL,我已經用ADO連接好資料庫了。 以下是我的寫法: void __fastcall TForm1::Edit1Enter(TObject *Sender) { ADOQuery1->Close(); ADOQuery1->SQL->Clear(); if(Edit1->Text=="")return; int Id=Edit1->Text.ToInt(); ADOQuery1->SQL->Add("Select * from product"); ADOQuery1->SQL->Add("Where Id=P_ID"); ADOQuery1->Parameters("Id")->AsInteger=Edit1->Text.ToInt() ADOQuery1->Prepared=true; ADOQuery1->Open(); ADOQuery1->ExecSQL(); } 在執行後紅色那行有bug,「call of nonfunction 」 請幫個忙~~謝謝。 發表人 - jace0421 於 2005/08/08 22:50:45
Stallion
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-08 23:43:29 IP:211.22.xxx.xxx 未訂閱
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("Select * from product Where Id=:P_ID"); //假設ID是你的欄位
ADOQuery1->Parameters->ParamByName("P_ID")->Value=Edit1->Text;

ADOQuery1->Prepared=true;
ADOQuery1->Open();
ADOQuery1->ExecSQL();
}
請參考! ---------------------------------------------- We will either find a way, or make one. -Hannibal -。 發表人 - stallion 於 2005/08/08 23:45:00
jace0421
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-09 14:43:25 IP:61.225.xxx.xxx 未訂閱
Stallion,我照按你的修改完後已經沒有bug, 但是執行完後,我輸入與P_ID相等的值按enter後 在DBGrid不會顯示出表單的欄位耶~~ 請問哪裡還要修改呢?? 我說清楚一點吧~~ 在Edit輸入的數值我把他設為ID 我要讓ID=資料庫欄位P_ID 接下來才會在DBGrid顯示出表單的欄位 謝謝指教。
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-09 16:20:32 IP:218.15.xxx.xxx 未訂閱
插花: 
 
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  if(Edit1->Text=="")return;
  int Id=Edit1->Text.ToInt();
  ADOQuery1->SQL->Add("Select * from product");
  ADOQuery1->SQL->Add("Where P_ID=:ID"); 
  ADOQuery1->Parameters("Id")->AsInteger=Edit1->Text.ToInt();
//若不行,将上句改为:
//ADOQuery1->Parameters("Id")->DataType=FtString;
//ADOQuery1->Parameters("Id")->Value=Edit1->Text;
  ADOQuery1->Prepared=true;
  ADOQuery1->Open();
  ADOQuery1->ExecSQL();  //多余
}
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
jace0421
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-09 18:02:16 IP:61.225.xxx.xxx 未訂閱
void __fastcall TForm1::Edit1Enter(TObject *Sender) { 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(); ADOQuery1->ExecSQL(); } deity,很抱歉~~還是有錯誤 上以是我的程式,沒有bug 但是我輸入與P_ID相等的值按enter後 在DBGrid不會顯示出表單的欄位
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-09 22:12:35 IP:219.129.xxx.xxx 未訂閱
您好:要想 我輸入與P_ID相等的值按enter後 在DBGrid不會顯示出表單的欄位 您将代码写至Edit1的OnKeyDown事件中即可。
{
  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();
  ADOQuery1->ExecSQL();//此行删除
}
}
上面的代码不知有无错,因没BCB作业环境,所以不知改对了没有,下面是Delphi版:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=13 then
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from product Where P_ID=:ID');
      ADOQuery1.Parameters.ParamByName('ID').Value=Edit1.Text;
      ADOQuery1.Prepared:=true;
      ADOQuery1.Open;
    end;
end;
这样按enter就会触发上面事件。另您的DBGrid.DataSource1.DataSet应指向ADOQuery1 ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
jace0421
一般會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-10 00:00:48 IP:61.225.xxx.xxx 未訂閱
請問為什麼會有這行 「if (key==13) 」 而且執行後會有錯誤呢?? 錯誤是:undefined symbol "key" DBGird 內的 DataSource 是指到DataSource1 DataSource 內的 DataSet 是指到ADOQuery1
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-10 09:09:17 IP:218.15.xxx.xxx 未訂閱
您好:上面已经说得很明白了您将代码写至Edit1的OnKeyDown事件而非OnEnter(获得焦点触发,而非按Enter触发)事件中即可。
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  if (key==13)  //key=13,也即enter键。按下enter键执行下列语句
{ 
  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();
}
}
试试看
    <>
============================
 为什么经过多年以后,得失的过程如此冷漠
============================

        
crazykai
一般會員


發表:8
回覆:6
積分:2
註冊:2005-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-10 09:33:33 IP:60.248.xxx.xxx 未訂閱
jace妳好:     我的做法如下    
void __fastcall TForm1::Edit1KeyDown(TObject *Sender)
{
  int a =testEdit->Text.Length();
  if(a==5)  //假設你的P_ID的長度是5
  {      
    ADOQuery1->Active=false;
    ADOQuery1->SQL->Clear();
    String sql;
    sql="select * from product where P_ID=" Edit1->Text;
    ADOQuery1->SQL->Add(sql);
    ADOQuery1->Active=true;
  }
提供你做參考嚕 發表人 -
jace0421
一般會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-12 10:40:45 IP:218.164.xxx.xxx 未訂閱
deity 你好, 我已經將程式寫在Edit1的OnKeyDown事件 { 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(); } } 但是會出現錯誤:undefined symbol "key"
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-12 16:28:04 IP:218.15.xxx.xxx 未訂閱
引言: 我已經將程式寫在Edit1的OnKeyDown事件
{
//if (key==13)改为:
  if (Key==13) //K为大写的k,用惯了delphi,没注意到大小写您试试看,小弟试了没问题
{ 
  >>>>>>>>>>>>>
但是會出現錯誤:>< face="Verdana, Arial, Helvetica">    
============================
 为什么经过多年以后,得失的过程如此冷漠
============================
    發表人 - deity 於 2005/08/12  17:01:36
        
jace0421
一般會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-08-14 13:57:05 IP:218.163.xxx.xxx 未訂閱
deity 謝謝你解決我的問題。
系統時間:2024-11-23 10:04:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!