有關如何DBGrid取出某筆記錄資料~ |
答題得分者是:cashxin2002
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
change.jian
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
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 發送簡訊給我 |
您好﹗ 建議您使用DBEdit等感知元件處理您的第一個問題﹐方法如下﹕
在資料集元件的欄位編輯器中(雙擊資料集元件即可開啟)加入所有欄位(Add All Fields)﹐然后點選需要用DBEdit等感知元件顯示的欄位名﹐拖到Form中﹐欄位編輯器即可根据欄位形態自動建立相對應的感知元件﹐此時﹐當DBGrid的資料錄指針移動時﹐感知元件對應的資料也會即時的顯示當前資料值﹐因為自動建立感知元件時﹐已將其DataSource和DataField屬性值自動建立﹒ =========================
大病初愈﹐休養調整中...
=========================
------
忻晟 |
wameng
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
[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 發送簡訊給我 |
您好﹗ 小弟覺得您所設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 發送簡訊給我 |
謝謝!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 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: 謝謝!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 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
請問各位~
關係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 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 建議您在做蒐索動作時﹐使用無感知功能的元件(如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 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 在按下查詢鍵時﹐使用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 發送簡訊給我 |
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 發送簡訊給我 |
您好﹗ 修改如下﹐見紅色字部分﹕
引言:========================= 我是您的朋友﹐有您真好﹗ =========================查詢按鈕 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 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 在雙條件左右各用()將其歸納起來即可﹐如下﹕
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 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ =============================================================
分別於Form1 / Form3 己填入
Form1->
implementation
Uses Unit3
Form3->
implementation
Uses Unit2 //此處應是Uses Unit1吧
============================================================= 另外﹐此處的Uses的單元﹐需是對應Form的Unit﹐注意其存檔的正确名稱﹒ =========================
我是您的朋友﹐有您真好﹗
=========================
------
忻晟 |
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
您好!
我試著重新作兩個表單~
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 發送簡訊給我 |
您好﹗
=====================================
implementation
Uses Unit2
在Unit2.pas
implementation
Uses Unit2 //此處應是Unit1
=====================================
如果還有錯誤的話﹐請問錯誤訊息是什么﹖ =========================
我是您的朋友﹐有您真好﹗
=========================
------
忻晟 |
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
t0288542
中階會員 ![]() ![]() ![]() 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |