線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3285
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

有關如何DBGrid取出某筆記錄資料~

答題得分者是:cashxin2002
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-29 14:32:36 IP:61.221.xxx.xxx 未訂閱
請問各位~ 如何在DBGrid利用鍵盤或滑鼠左鍵根據三角指標~ 將資料秀在畫面上的每個Edit.text內~ 每次移動就一起改變其值~ 另外~我有利用DBNavigator此元件作移動上下筆資料~ 希望能以點選DBGrid來作改變~ 我已經去討論區研究似乎還是一頭霧水~
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-29 14:48:33 IP:61.218.xxx.xxx 未訂閱
1.如何在DBGrid利用鍵盤或滑鼠左鍵根據三角指標~  <--三角指標是什麼意思? 2.可以在DBGrid對應的dataset的AfterScroll裡寫程式,把dataset裡的欄位內的值寫入到edit.text內 3.如果你的DBNavigator與DBGird共用同一個Dataset的話,那麼兩個就會一起動作了    
引言: 請問各位~ 如何在DBGrid利用鍵盤或滑鼠左鍵根據三角指標~ 將資料秀在畫面上的每個Edit.text內~ 每次移動就一起改變其值~ 另外~我有利用DBNavigator此元件作移動上下筆資料~ 希望能以點選DBGrid來作改變~ 我已經去討論區研究似乎還是一頭霧水~
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-29 14:56:58 IP:202.62.xxx.xxx 未訂閱
您好﹗    建議您使用DBEdit等感知元件處理您的第一個問題﹐方法如下﹕ 在資料集元件的欄位編輯器中(雙擊資料集元件即可開啟)加入所有欄位(Add All Fields)﹐然后點選需要用DBEdit等感知元件顯示的欄位名﹐拖到Form中﹐欄位編輯器即可根据欄位形態自動建立相對應的感知元件﹐此時﹐當DBGrid的資料錄指針移動時﹐感知元件對應的資料也會即時的顯示當前資料值﹐因為自動建立感知元件時﹐已將其DataSource和DataField屬性值自動建立﹒    ========================= 大病初愈﹐休養調整中... =========================
------
忻晟
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-29 15:21:47 IP:61.222.xxx.xxx 未訂閱
不懂您的意思!頭暈中................ 可否用圖形表示,會比較快。
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-29 15:46:09 IP:61.221.xxx.xxx 未訂閱
[quote] 您好﹗ 建議您使用DBEdit等感知元件處理您的第一個問題﹐方法如下﹕ 在資料集元件的欄位編輯器中(雙擊資料集元件即可開啟)加入所有欄位(Add All Fields)﹐然后點選需要用DBEdit等感知元件顯示的欄位名﹐拖到Form中﹐欄位編輯器即可根据欄位形態自動建立相對應的感知元件﹐此時﹐當DBGrid的資料錄指針移動時﹐感知元件對應的資料也會即時的顯示當前資料值﹐因為自動建立感知元件時﹐已將其DataSource和DataField屬性值自動建立﹒ ---------------------------------------------------------- 謝謝~ 我己利用DBEdit等感知元件可做我所要的要求~ 目前我有個修改的按鈕,資料有作修改的動作~ 當我去異動下筆資料時~ 就出現如下的訊息~ Project Moc.exe raised exception class EOleException with message '找不要更新的資料列.最後讀取的值己被變更.' Process stopped. Use Step or Run to continue. 這是我修改button的處理~ procedure TForm1.SpeedButton3Click(Sender: TObject); begin If DBEdit1.Text= '' then begin showmessage('請檢查[製令單號]是否有資料!'); exit; end; ADOQuery4.Close; ADOQuery4.SQL.Clear; ADOQuery4.SQL.Add('Update MOCTA '); ADOQuery4.SQL.Add('Set TA203 = ''' DBEdit2.Text ''', '); ADOQuery4.SQL.Add('TA204 = ''' DBEdit3.Text ''', '); ADOQuery4.SQL.Add('TA205 = ''' DBEdit4.Text ''', '); ADOQuery4.SQL.Add('TA202 = ''' DBComboBox1.Text ''', '); ADOQuery4.SQL.Add('TA208 = ''' DBMemo1.Text ''' '); ADOQuery4.SQL.Add('Where TA002 = ''' DBEdit1.Text ''''); showmessage(DBEdit1.Text); ADOQuery4.ExecSQL; end;
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-29 18:07:43 IP:202.62.xxx.xxx 未訂閱
您好﹗    小弟覺得您所設SpeedButton3的目的就是DBNavigator中nbEdit按鈕和nbPost按鈕的結合體﹐若是這樣的話﹐使用DBNavigator就可以啦﹐如果是要自訂按鈕的話﹐也可用下列的方法﹐比較簡單﹕
begin
  if DBEdit1.Text= '' then
    begin
      ShowMessage('請檢查[製令單號]是否有資料!');
      Exit;
    end
  else
    begin
      if ADOQuery4.State = dsEdit then
      //若是還需要判斷是否為新增的狀態﹐可寫成如下﹕
      //if ADOQuery4.State in [dsEdit, dsInsert] then
        ADOQuery4.Post
      else
        ShowMessage('資料集元件不處于修改狀態');
    end;
end;
========================= 大病初愈﹐休養調整中... =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-29 19:59:52 IP:59.104.xxx.xxx 未訂閱
謝謝!cashxin2002~ 請問~您所建議這段程式~是不是我只需要放在原來的區段內呢~ procedure TForm1.SpeedButton3Click(Sender: TObject); begin .... end; 另外~可否在請教一個問題呢~ 您不是建議我將ComboBox改DBComboBox嗎~ 感知元件對應的資料也會即時的顯示當前資料值~ 但是DBComboBox目前所根據是DataSource1的某欄位~ 可是當點選下拉按鈕~原需求是指定到DataSource2元件~ 比例像以下~ DataSource1->指主要表格資料(NO,NAME,ADDESS,CITY). DataSource2->依據表格內資料(CITY) 如此,我怎麼去作到這種需求~ 或者有別的方式可解決呢~麻煩你~
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-01 00:08:48 IP:220.134.xxx.xxx 未訂閱
利用DBLOOKUPCOMBOBOX元件 ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-01 09:17:39 IP:202.62.xxx.xxx 未訂閱
引言: 謝謝!cashxin2002~ 請問~您所建議這段程式~是不是我只需要放在原來的區段內呢~ procedure TForm1.SpeedButton3Click(Sender: TObject); begin .... end; 另外~可否在請教一個問題呢~ 您不是建議我將ComboBox改DBComboBox嗎~ 感知元件對應的資料也會即時的顯示當前資料值~ 但是DBComboBox目前所根據是DataSource1的某欄位~ 可是當點選下拉按鈕~原需求是指定到DataSource2元件~ 比例像以下~ DataSource1->指主要表格資料(NO,NAME,ADDESS,CITY). DataSource2->依據表格內資料(CITY) 如此,我怎麼去作到這種需求~ 或者有別的方式可解決呢~麻煩你~
您好﹗ 將程式碼寫于原事件中即可﹒ 第二個問題﹐likush兄已經有答覆了﹐分別設定好DataSource, DataField, ListSource, ListField, KeyField屬性即可﹒ ========================= 大病初愈﹐休養調整中... =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-01 12:44:53 IP:61.221.xxx.xxx 未訂閱
謝謝~likush兄/cashxin2002兩位 我會作試試~因為初次接觸所以許多不懂的地方~ 麻煩你們嘍~ 可否在問~如果在這些感知元件下~ 我要利用一個DBEdit欄位作查詢動作~ 我應如何去做~試幾個尋找的命令~ 似乎不知如何去指定到這筆資料並作修改動作~ 資料只會指向第一筆~ thk^^
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-01 13:55:41 IP:61.221.xxx.xxx 未訂閱
HI~ 我利用Locate來作查詢動作~ 可以作到那指定那一筆並更動資料動作~ 但有個錯誤~ 利用指定那筆是ok~ ADOQuery1.Locate('製令單號','T4X27B20',[]); 如程式修改為 dat := Trim(ADOQuery1.FieldByName('製令單號').AsString); ADOQuery1.Locate('製令單號',dat,[]); 就發生錯誤~我有將dat資料秀出來是正確滴~ 謝謝~^^
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-01 16:39:58 IP:61.221.xxx.xxx 未訂閱
請問各位~ 關係locate錯誤訊息~ 執行下面此段程式就會發生~ dat := Trim(ADOQuery1.FieldByName('製令單號').AsString); ADOQuery1.Locate('製令單號',dat,[]); Project MOC.exe rasised exception class EOleException with message 'Violation of PRIMARY KEY constraint 'PK_MOCTA'.Cannot insert duplicate key in object 'MOCTA'.Process stopped.Use Step or Run to continue. 如dat是一個字串值(ex'T4X27B20')~就不會有問題~怪怪滴~ thk
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-11-01 18:13:00 IP:202.62.xxx.xxx 未訂閱
您好﹗    單從您貼出程式碼的語法來看﹐應該沒有錯誤﹐但此種寫法似乎有些不合常理﹐因為您使用同一個ADOQuery(即ADOQuery1)﹐無論如何蒐索﹐資料錄指針都不會做移動﹐因為蒐索的條件即是當前筆資料的欄位值﹒ 從錯誤信息來看﹐是受到鍵值欄位的限制﹐建議您檢查一下鍵值欄位相關的部分﹒或者貼出此段詳細的程式碼﹐大家再幫您看看﹒    ========================= 大病初愈﹐休養調整中... =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-11-01 19:29:46 IP:59.104.xxx.xxx 未訂閱
謝謝~ 目前我表單上有建立一個SpeedButton元件(查詢Button)~ 至於由使用者輸入DBEdit1.Text值其實是由 ADOQuery1所帶出來的值~ 但是如果使用者如重新輸入,例如編號'T4X27B20'時~按查詢按鈕 希望指標可直接指向至那筆資料~並加以作修改動作~ 如果利用ADOQuery1來查詢是不合常理~ 以我目前的需求~是否有其他方法可解決呢~
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-11-02 08:52:35 IP:202.62.xxx.xxx 未訂閱
您好﹗    建議您在做蒐索動作時﹐使用無感知功能的元件(如Edit)﹐先判斷ADOQuery目前處于的狀態﹐如果是瀏覽狀態﹐且Edit的Text內容不為空白﹐則做Locate查詢動作﹐查詢條件是Edit.Text
begin
  if ADOQuery1.State = dsBrowse and Edit1.Text <> '' then
    begin
      if ADOQuery1.Locate('製令單號', Edit1.Text, []) then
        ShowMessage('已經找到該筆資料'   #10#13   '資料錄指針已指向該筆資料')
      else
        ShowMessage('無相符資料');
   end;
end;
========================= 大病初愈﹐休養調整中... ========================= 發表人 - cashxin2002 於 2004/11/02 08:58:27
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-11-02 11:08:06 IP:61.221.xxx.xxx 未訂閱
謝謝~ 這樣是OK的~但是表單就要多加個edit1似乎會讓使用者搞錯~ 但是如按查詢鈕時~秀出一個表單有個Edit1欄位作輸入條件值~ 再將指標指向所查詢那筆記錄~查詢正確值時並將此表單並作關閉~ 如以這樣需求應如何去做修改呢~ 麻煩~ ^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-11-02 12:08:16 IP:202.62.xxx.xxx 未訂閱
您好﹗    在按下查詢鍵時﹐使用InputQuery對話方框即可達到要求﹒ 步驟﹕ 1. 先在private區域設定一個字串變數﹐如下﹕ private   Str : String; 2. 在查詢按鍵的OnClick事件中
begin
  if InputQuery('查詢作業', '請輸入查詢條件', Str) then
    begin
      if ADOQuery1.State = dsBrowse and Str <> '' then
        begin
          if ADOQuery1.Locate('製令單號', Str, []) then
            ShowMessage('已經找到該筆資料'   #10#13   '資料錄指針已指向該筆資料')
          else
            ShowMessage('無相符資料');
        end;
    end;
end;
========================= 大病初愈﹐休養調整中... =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-11-02 12:32:42 IP:61.221.xxx.xxx 未訂閱
HI~ 以下是修改內容~ 查詢按鈕 procedure TForm1.SpeedButton4Click(Sender: TObject); begin Form3.Show; end; 於Form3建立Edit1 / Button1 procedure TForm3.Button1Click(Sender: TObject); begin if Form1.ADOQuery1.State = dsBrowse then -->有錯誤 if Edit1.Text <> '' then begin if Form1.ADOQuery1.Locate('製令單號', Edit1.Text, []) then ShowMessage('已經找到該筆資料' #10#13 '資料錄指針已指向該筆資料') else ShowMessage('無相符資料'); end; end; end. 請問這樣是不是可以將資料指向查詢那筆記錄~ thk ^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-11-02 12:55:32 IP:202.62.xxx.xxx 未訂閱
您好﹗    修改如下﹐見紅色字部分﹕
引言:
查詢按鈕
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
  Form3.Show;
end;    於Form3建立Edit1 / Button1
此處記得在Form3中Uses Form1    procedure TForm3.Button1Click(Sender: TObject);
begin
  if Form1.ADOQuery1.State = dsBrowse then
    begin
      if Edit1.Text <> '' then
        begin
          if Form1.ADOQuery1.Locate('製令單號', Edit1.Text, []) then
          ShowMessage('已經找到該筆資料'   #10#13   '資料錄指針已指向該筆資料');
          Form3.Close; //把Form3關閉
        end
      else
        begin
          ShowMessage('無相符資料');
          Edit1.SetFucos; //使Edit重新取得焦點
        end;
    end;
end;
========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-11-02 13:24:24 IP:61.221.xxx.xxx 未訂閱
謝謝~太麻煩cashxin2002兄~ 原寫法~ if ADOQuery1.State = dsBrowse and Str <> '' then 後來,因為試這個方式有問題~ 原因好像是這個部份(Str <> '' )分開就可執行~ 如下~ if ADOQuery1.State = dsBrowse then if Str <> '' then 為什麼呢~ thk^^
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-11-02 13:30:55 IP:61.221.xxx.xxx 未訂閱
不好意思~ 於Form3建立Edit1 / Button1 此處記得在Form3中Uses Form1 是什麼意思~ ^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#22 引用回覆 回覆 發表時間:2004-11-02 14:11:23 IP:202.62.xxx.xxx 未訂閱
您好﹗    在雙條件左右各用()將其歸納起來即可﹐如下﹕ if (ADOQuery1.State = dsBrowse) and (Str <> '') then 因為您要在Form3中使用Form1中的ADOQuery1﹐所以需要先Uses Form1﹐才可讓Form3認識位于Form1的ADOQuery1﹐方法如下﹕ 點選Form3中/File/Use unit﹐開啟其對話方框﹐在對話方框中選擇Form1﹐點擊[ok]按鍵即可﹒或直接在Form3的程式碼中加入Uses Unit1即可﹐位置可寫于implementation之后﹐如下﹕ implementation Uses Unit1 另外﹐在您的程式碼中﹐因為在Form1中有使用Form3.Show;的程式碼﹐所以Form1也需要Uses Form3﹐方法同前所述﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#23 引用回覆 回覆 發表時間:2004-11-02 17:06:47 IP:61.221.xxx.xxx 未訂閱
謝謝~ procedure TForm3.Button1Click(Sender: TObject); begin if Form1.ADOQuery1.State = dsBrowse then ->有錯 : : end; 分別於Form1 / Form3 己填入 Form1-> implementation Uses Unit3 Form3-> implementation Uses Unit2 可是還是有問題~thk^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#24 引用回覆 回覆 發表時間:2004-11-02 17:25:05 IP:202.62.xxx.xxx 未訂閱
您好﹗    出錯信息是什么﹖    ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#25 引用回覆 回覆 發表時間:2004-11-03 09:18:00 IP:61.221.xxx.xxx 未訂閱
您好~ procedure TForm3.Button1Click(Sender: TObject); begin if Form1.ADOQuery1.State = dsBrowse then ->有錯 : : end; 不知道為什呢~><"
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#26 引用回覆 回覆 發表時間:2004-11-03 09:50:53 IP:202.62.xxx.xxx 未訂閱
您好﹗    ============================================================= 分別於Form1 / Form3 己填入 Form1-> implementation Uses Unit3 Form3-> implementation Uses Unit2 //此處應是Uses Unit1吧 ============================================================= 另外﹐此處的Uses的單元﹐需是對應Form的Unit﹐注意其存檔的正确名稱﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#27 引用回覆 回覆 發表時間:2004-11-03 12:01:21 IP:61.221.xxx.xxx 未訂閱
您好! 我試著重新作兩個表單~ form1 -> Unit1 form2 -> Unit2 同樣在Unit1.pas , implementation Uses Unit2 在Unit2.pas , implementation Uses Unit2 --------------------------- form1有ADOConnection1 / ADOQuery1 / DataSource / SpeedButton / DBGrid 元件 form2有Edit / Button 元件 --------------------------- Unit1.pas procedure TForm1.SpeedButton1Click(Sender: TObject); begin Form2.Show; end Unit2.pas procedure TForm2.Button1Click(Sender: TObject); begin if Form1.ADOQuery1.State = dsBrowse then begin if Edit1.Text <> '' then : : end; end; ---------------------------------------- 我都己檢查過~^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#28 引用回覆 回覆 發表時間:2004-11-03 12:16:54 IP:202.62.xxx.xxx 未訂閱
您好﹗ ===================================== implementation Uses Unit2 在Unit2.pas implementation Uses Unit2 //此處應是Unit1 ===================================== 如果還有錯誤的話﹐請問錯誤訊息是什么﹖ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#29 引用回覆 回覆 發表時間:2004-11-03 13:45:51 IP:61.221.xxx.xxx 未訂閱
不好意思~ 在Unit2.pas , implementation Uses Unit2 --------->是Unit1我手誤~ --------------------------------------- 並沒有錯誤訊息~因為我按執行時~ 游標是停留在~ if Form1.ADOQuery1.State = dsBrowse then ><"
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#30 引用回覆 回覆 發表時間:2004-11-03 14:05:19 IP:202.62.xxx.xxx 未訂閱
您好﹗    將您的程式碼上傳至求助區吧﹐那樣方便幫您查錯﹒    ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#31 引用回覆 回覆 發表時間:2004-11-04 10:32:37 IP:61.221.xxx.xxx 未訂閱
您好~ 我己將資料放至求助區~ 謝謝~ ^^
[<<] [1] [2] [>>]
系統時間:2024-05-20 10:58:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!