請教一個有關資料庫連結的問題 |
答題得分者是:kevin2004
|
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
各位大大.. 我是新手... 請教一個有關於資料庫的問題 ... 如所附之檔案(圖片) 右上兩個comebox選項"元件代號"和"故障模式" 我想要先選擇"元件代號" 之後再選取"故障模式" 完成條件組合進而按下查詢鍵 所查詢資料便可出現在最下面一欄"故障率"那邊 這是我目前的程式碼 if Table1.locate('故障模式',ComboBox2.Text,[])then MessageBeep(0) end; 請各位大大教我..... 小弟將感激不盡....... 謝謝各位大大....
------
請多多指教^^
附加檔案:48735963d0458_6.PNG
編輯記錄
taishyang 重新編輯於 2008-07-08 21:03:11, 註解 無‧
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
大大...你好..
我的問題..有附上圖片檔案說....^^|| 不知道您有沒有注意到.... 我在form右上角有兩個comebox 可以選擇左邊資料庫的元件代號和故障模式 例如:我要元件代號裡面的AB警報器和故障模式的該鳴而不鳴組合之故障率 按下查詢鍵 就可以顯示在故障率的那個欄位 我目前的問題就是不管我選擇哪個組合 他只會出現AA蜂鳴器全毀及AA蜂鳴器該鳴而不鳴的故障率 煩請大大為我解決..... 因為我是新手.. 所以有時候問題我不知道要怎麼問.... 不好意思啦....^^|| 可以的話.. 還煩請您為我解答一下... 小弟將會感激不盡... 謝謝啦....^^||
------
請多多指教^^
編輯記錄
lcy701011 重新編輯於 2008-07-09 14:35:00, 註解 無‧
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
我目前的問題就是不管我選擇哪個組合.....
==>小弟似乎有點瞭解你的意思了。不過還是要確認一下, ==>1.不同元件會有不同的故障模式,或2.所有元件可能的故障模式均同 ==>通常是第一種吧?那可在User選完元件﹝ComboBox1.OnExitEven﹞去 ==> 抓此元件可能的故障模式清單填入ComboBox2.ItemS,在自動移到 ==> ComboBox2及自動展開ComboBox2.ItemS供選,再在 ==> ComboBox2.OnExitEven去DB去撈資料。 ==>是這樣嗎? ==>如果是第二種,那流程也是大同小異,應該沒有問題,才是。
------
Kevin |
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
大大你好
首先感謝您的回覆 真的很感謝... 我的元件及故障組合 例如....我的AB警報器....有很多種故障模式(全毀....該鳴而不鳴等等) 每種故障模式都有不同的故障率 現在的問題...就是AA蜂鳴器的兩種故障模式所顯示出來的故障率沒問題 但我選擇其他元件的時候 例如....我選擇AB警報器...故障模式為全毀 按下查詢鍵 所得到的故障率變成AA蜂鳴器全毀的故障率.. 反之...我選擇AB警報器...故障模式為該鳴而不鳴 所得到的故障率變成AA蜂鳴器該鳴而不鳴的故障率 怎麼會這樣呢?? 大大是專家.. 應該可以很輕易的了解我的問題.. 煩請大大救命阿....>< 還有..我是初學者.. 可以的話... 大大可以為我詳細的解說嗎?? 拜託...... 小弟將感激不盡....謝謝....><
------
請多多指教^^
編輯記錄
lcy701011 重新編輯於 2008-07-09 16:27:50, 註解 無‧
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
請看
Implements a virtual method for searching a dataset for a specified record and making it the active record. Delphi syntax: function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; virtual; 紅色的字表示在DATASET中的欄位名稱不是DBGRID的抬頭名稱 若要知道寫法可以在DELPHI的程式上面有[工具]或[TOOL]然後看DELPHI HELP 希望老師沒在看K.TOP~
------
====================== 昏睡~ 不昏睡~ 不由昏睡~
編輯記錄
ko 重新編輯於 2008-07-09 18:23:48, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
很抱歉, 請不要把初學者一直掛在嘴上. "初學者"這個名詞不是原罪的代名詞, 就好像說一個剛拿到駕照的人開車上路, 總是會貼上一個"新手上路, 請多包涵"的貼紙, 但這代表就可以毫無顧慮的亂開車, 出事了也因為"新手"就可以讓人要求免責嗎? 提這段是因為你在po文中太強調"新手", "初學者", 事實上我們從各位的提問中就可以看出提問者的功力大約在那裡, 無須大家來告訴我們你是初學者, 然而我們並非看輕一些剛入門的學習者, 只是掛上"初學者"不代表就能要求解答, 先自問, 自己是否有認真的去查問題, 自己是否有對老師的教授上有詳細的了解, 查問題不是看到結果不對就馬上要求求助, 雖然我們現在已脫離"初學者"的包袱, 但當初我們在學習時是怎樣的找資料, 網路不發達, 找不到人問, 怎麼辦, 像這類問題, 可能翻遍數本甚至數十本的書來查(未必會買, 我們多半到書局翻), 那現在的"初學者"呢? 雖然你是很虛心很客氣的提問, 但從回答中我並沒有辦法感受"提問者"的心在那裡?(看過搶救貧窮大作戰吧)
不好意思, 拉了一大堆, 其實不是針對你而提, 而是最近太多"初學者"都犯了這樣毛病(請容我用這個詞), 所以有感而發 好了, 說了這麼多, 提供你一些方向(我個人的習慣, 不會直接給答案) 1. 不管是用sql語法來寫或是其他方式, 基本上你是要兩個條件來組合一個過濾條件, 如果你對 sql是完全不懂的話, 請朝向 Table1.Fitler:= xxxxx 的方式來找, filter 如何指定兩個條件組合, 這在所有的Delphi的基礎書一定都有, 千萬不要告訴我找不到, 就連Delphi的help都有說明 2.我不懂你使用locate的用意在那裡, 因為 locate 只能做搜尋記錄用, 並不能挑選記錄, 而且你第一份po文使用兩個locate 我完全看不懂 3.不要管有幾組 combobox , 只要看你要的條件如何組合, 例如 Field1="combobox1.text" and Field2="combobox2.text", 這樣不就是兩組條件了嗎? 然後在運用上面所提到 filter, 如何組合起來, 花點時間研究一下, 這是"初學者"應該都要看得懂的, 本站也很多相關 filter 的討論 努力一點, 加油! |
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
我不曉得你的資料結構是如何設計的,你也沒講清,我只有邊寫邊猜。我想
1.你應該有三個表,甲表是元件清單、乙表是故障清單、丙表是實務時各 元件可能有的故障與處理法等記錄。 2.此功能有兩個表:甲表與丙表,且此兩表是Master-Detail關係。如此你才 可能用Loctae甲表而能自動移位到丙表相關資料項目。 // 不過,這時又有個問提題。Locate只是移位,要如何限制DBGrid展示的 // 資料清單。你是用Filter嗎?如果用了Filter,那又何需用Locate? // 這邊有不少疑惑。 如果是這樣的話,那錯誤篩選的問題應該出在你的Locate指令下錯了。Locate 的用法有好幾層變化。可能你要看一下。 另一個可能的原因是你的DB-Stru設計與檢索key欄值有問題,這也要看一下。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
通常來講,你可能用了不好的結構來處理你的問題。這要怎麼說?我想想。TTable及
Locate就是讓我頭皮發麻的東西。 我通常是不會用TTable或TAdoTable等這種元件,而會用TQuery或TAdoQuery可以 自己下SQL來控制的元件。如果你的資料有個幾十萬或幾百萬筆,TTable全抓到 前端來,那還得了。即使你的資料只有數十筆,那也要養成習慣不要用TTable。 Locate是一個很快很好用的指令,可是如果對大筆數的表格也是很不適宜的。如果你 的TAdoQuery一次只抓三十筆到Client端,那很好。可是如果你要作Locate的端 資料庫是好幾時萬筆,那絕對是個災難。Locate要用對的方才好用。 你該用一個甲ComboBox,先用SQL去抓設好元件清單。及另一個乙ComboBox放故障種類。 在甲ComboBox.OnExitEven時組SQL字串到後端丙表抓此元件的可能故障清單。在 乙ComboBox.OnExitEven再組字串去後端撈你的DBGrid中的資料。 此時如果你的DB-Stru正常的話,那就沒問題了。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
如果真的很趕時間,把碼貼上來,先幫你看看,先交差吧
===================引 用 lcy701011 文 章=================== 恩恩... 謝謝大大的回覆.. 我自己也很努力的去尋找答案...(但成果有限...><) 畢竟我才剛接觸這個軟體兩天.....(因為時間很趕....必須這幾天有結果....) 所以很多我真的看不懂.. 加上我不是資工背景的(我本身是學環工的....可以說是完全沒基礎...= = ) 但是...還是很謝謝大大您的指教... 我自己會更努力研究的....^^|| 再次感謝大大您的細心教導....... 謝謝......................^^
------
Kevin |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
至少你還有一個"工"字扯上邊, 我是學觀光的, 所以本身學經歷不是重點
看來 至少還有K兄能夠協助你, 世界還是有温暖的! ===================引 用 lcy701011 文 章=================== 恩恩... 謝謝大大的回覆.. 我自己也很努力的去尋找答案...(但成果有限...><) 畢竟我才剛接觸這個軟體兩天.....(因為時間很趕....必須這幾天有結果....) 所以很多我真的看不懂.. 加上我不是資工背景的(我本身是學環工的....可以說是完全沒基礎...= = ) 但是...還是很謝謝大大您的指教... 我自己會更努力研究的....^^|| 再次感謝大大您的細心教導....... 謝謝......................^^ |
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
真的很開心你能這麼細心的為我解答
很感動...謝謝......^^|| 老闆身邊有一套故障樹分析軟體(由delphi及其他程式所寫的) 但是在資料庫讀取的時後會出現亂碼 因此老闆希望我自己可不可以學一下這個軟體.. 做個簡單的測試....然後跟他報告... 所以才會這麼趕........ 或許我這樣發問問題...有點好像直接希望你們來幫我做的感覺.. 但.....情非得已....... 因為時間緊湊.....又加上自己真的短時間之內摸不著頭緒.. 所以只好上來求助各位高手.. 還好各位大大都很熱心.. 讓小弟真的非常備感溫馨... 再次跟您說聲謝謝...^^ ===================引 用 kevin2004 文 章=================== 如果真的很趕時間,把碼貼上來,先幫你看看,先交差吧 ===================引 用 lcy701011 文 章=================== 恩恩... 謝謝大大的回覆.. 我自己也很努力的去尋找答案...(但成果有限...><) 畢竟我才剛接觸這個軟體兩天.....(因為時間很趕....必須這幾天有結果....) 所以很多我真的看不懂.. 加上我不是資工背景的(我本身是學環工的....可以說是完全沒基礎...= = ) 但是...還是很謝謝大大您的指教... 我自己會更努力研究的....^^|| 再次感謝大大您的細心教導....... 謝謝......................^^
------
請多多指教^^ |
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
以下是我目前所得到的程式碼
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, Db, DBTables, ActnList, Mask, DBCtrls; type TForm1 = class(TForm) DataSource1: TDataSource; Table1: TTable; DBGrid1: TDBGrid; ComboBox1: TComboBox; ComboBox2: TComboBox; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; DBEdit1: TDBEdit; procedure Button1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure DBEdit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin if Table1.locate('元件代號',ComboBox1.Text,[])then if Table1.locate('故障模式',ComboBox2.Text,[])then MessageBeep(0) else ShowMessage('找不到資料'); end; procedure TForm1.ComboBox1Change(Sender: TObject); begin end; procedure TForm1.ComboBox2Change(Sender: TObject); begin end; procedure TForm1.DBEdit1Change(Sender: TObject); begin end; end. 大大可以幫我檢查一下.. 到底是哪邊出錯嗎 ?? 小弟將會非常感激不盡....>< ===================引 用 kevin2004 文 章=================== 如果真的很趕時間,把碼貼上來,先幫你看看,先交差吧 ===================引 用 lcy701011 文 章=================== 恩恩... 謝謝大大的回覆.. 我自己也很努力的去尋找答案...(但成果有限...><) 畢竟我才剛接觸這個軟體兩天.....(因為時間很趕....必須這幾天有結果....) 所以很多我真的看不懂.. 加上我不是資工背景的(我本身是學環工的....可以說是完全沒基礎...= = ) 但是...還是很謝謝大大您的指教... 我自己會更努力研究的....^^|| 再次感謝大大您的細心教導....... 謝謝......................^^
------
請多多指教^^ |
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
現在的問題...就是AA蜂鳴器的兩種故障模式所顯示出來的故障率沒問題
但我選擇其他元件的時候 例如....我選擇AB警報器...故障模式為全毀 按下查詢鍵 所得到的故障率變成AA蜂鳴器全毀的故障率.. 反之...我選擇AB警報器...故障模式為該鳴而不鳴 所得到的故障率變成AA蜂鳴器該鳴而不鳴的故障率 locate會從資料第一筆開始找(我用tclientdataset是這樣,table1應該也是吧..), 因為lcy701011用二個locate去找資料, 所以找到的都是故障模式=combox2.text的第一筆資料 if Table1.Locate('元件代號;故障模式',vararrayof([ComboBox1.Text,ComboBox2.Text]),[]) then MessageBeep(0) else ShowMessage('找不到資料'); end; ===================引 用 lcy701011 文 章=================== procedure TForm1.Button1Click(Sender: TObject); begin if Table1.locate('元件代號',ComboBox1.Text,[])then if Table1.locate('故障模式',ComboBox2.Text,[])then MessageBeep(0) else ShowMessage('找不到資料'); end;
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008
編輯記錄
jackiemi2_seed 重新編輯於 2008-07-11 08:34:30, 註解 無‧
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
問題重點有幾個:
1.Locate運作原理就如jackiemi2_seed兄講的都是由第一筆開始找起先,而且 資料庫輸入資料的順序及各家DB對表格實體與顯示順序由其各別慣習的控制 ,所以會出現你第一次查詢沒問題,但第二次有問題的緣故。 // 你應看一下ko兄提供的Locate說明,Locate的參數是其強大威力的來源, // 不好好用用,實在可惜。 2.可確定,你樣碼的兩層Locate是錯的,羅輯是不通的。而且通常應只將合條 件的資料篩出來就好,而不應寄望User是可自行過慮無關資訊的專家﹝實務 上,我們都假設User是老犯錯的白癡,及User都是心懷恨意的不得意員工老 想破壞系統及資料庫的壞人﹞。 另外: 1.Filter是壞東西,TTable也好不到那去。趕快廢了它吧。 jackiemi2_seed兄講的就是正確答案。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-07-11 09:30:56, 註解 無‧
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
查詢鈕 的 onclick 事件中寫 if (combobox1.itemindex>=0) and (combobox2.itemindex>=0) then begin if table1.locate('故障模式',[ComboBox1.Text,ComboBox2.Text],[]) then begin edit1.text :=floattostr(table1.fieldbyname('故障率').asfloat); end; end;
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
lcy701011
一般會員 發表:1 回覆:6 積分:1 註冊:2008-07-08 發送簡訊給我 |
大大你好..
謝謝你的細心指導 你的程式碼非常符合我的需要... 以解決我的問題....謝謝你... 可是...由於kevin兄...一開始就很熱心不厭其煩的指導我... 要在你們之間選取一個人給積分.. 實在是很困擾...^^|| 如果說可以同時給其他人積分... 我一定投你一票... 真的.... 總之.....真的很謝謝你... ^^ 希望以後還可以有更多機會多向您請教........^^ ===================引 用 jackiemi2_seed 文 章=================== 現在的問題...就是AA蜂鳴器的兩種故障模式所顯示出來的故障率沒問題 但我選擇其他元件的時候 例如....我選擇AB警報器...故障模式為全毀 按下查詢鍵 所得到的故障率變成AA蜂鳴器全毀的故障率.. 反之...我選擇AB警報器...故障模式為該鳴而不鳴 所得到的故障率變成AA蜂鳴器該鳴而不鳴的故障率 locate會從資料第一筆開始找(我用tclientdataset是這樣,table1應該也是吧..), 因為lcy701011用二個locate去找資料, 所以找到的都是故障模式=combox2.text的第一筆資料 if Table1.Locate('元件代號;故障模式',vararrayof([ComboBox1.Text,ComboBox2.Text]),[]) then MessageBeep(0) else ShowMessage('找不到資料'); end; ===================引 用 lcy701011 文 章=================== procedure TForm1.Button1Click(Sender: TObject); begin if Table1.locate('元件代號',ComboBox1.Text,[])then if Table1.locate('故障模式',ComboBox2.Text,[])then MessageBeep(0) else ShowMessage('找不到資料'); end;
------
請多多指教^^ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |