如何在Edit.Text上加入條件篩選 |
答題得分者是:老大仔
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
小弟在寫程式中的Edit上讓使用者可以填寫資料
如何在使用者每填寫一筆資料就SELECT 該資料是否存在TABLE 有的話就存入Edit.Text 沒有的話就出現警告訊息 這樣做是避免使用者亂填序號 MEMO 序號 1 [ENTER] (SELECT 1 FROM TABLE 檢查1 是否存在TABLE 若存在就填入Edit.Text 不存在就不填入並且出現警告) 2 [ENTER] (SELECT 2 FROM TABLE 檢查2 是否存在TABLE 若存在就填入Edit.Text 不存在就不填入並且出現警告) 等等以此類推 以下是我的CODE 不知道為什麼總是顯示"該序號尚未在QC'" [code delphi] if Key = #13 then begin with csTempCheck do begin CommandText := 'SELECT A.CUSTOMER_SN "CSN"' 'FROM SAJET.G_SN_STATUS A, ' 'SAJET.G_WO_BASE B ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND B.WO_STATUS = ''3'' ' 'AND A.WIP_PROCESS = ''100032'' ' 'AND A.PROCESS_ID = ''100028'' '; csTempCheck.Open; If Edit1.Text <> csTempCheck.Fieldbyname('CSN').AsString Then showmessage('該序號尚未在QC') ELSE ShowMessage('OK') END; END; {ELSE Memo1.Lines.Add(Edit1.Text); Edit1.Clear end else begin Exit end; } [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
但是我有先在資料庫查過
我在Edit1輸入的確實是存在的 不該不等於 CSN的 我的疑問在於 我在Edit輸入的CSN 確確實實是存在該TALBE的 可是卻一直出現警告 不知道那裡有問題 PS.我的CSN是一連串數字 我在Edit 輸入的是其中之一 ===================引 用 老大仔 文 章=================== 因為你查詢出來的CSN值並不等於Edit1的值啊 所以才會一直顯示 ' 該序號尚未存在' 啊...
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
我的CSN 一連串是指說
排序 CSN 1 123 2 456 3 789 4 012 5 345 6 678 那我在Edit1 輸入其中的012 or 789 等其中之一 我怕是不是我程式那裏寫錯 沒有跑Next 結果再做篩選的時候 程式一值在判斷第一筆CSN 123 請問大大我有這方面的錯誤嗎??? ===================引 用 老大仔 文 章=================== PS.我的CSN是一連串數字 我在Edit 輸入的是其中之一 你這個意思是: CSN : 123456 Edit :123 是這個嗎? 或許樓上的大大的方法可以先試看看 and~你也可以先把CSN查詢出來的資料 先放在某個edit或memo來看看 看是不是查詢的資料是否一樣
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
改成
[code delphi] CommandText := 'SELECT A.CUSTOMER_SN' ' FROM SAJET.G_SN_STATUS A, ' ' SAJET.G_WO_BASE B ' ' WHERE A.WORK_ORDER = B.WORK_ORDER ' ' AND B.WO_STATUS = ''3'' ' ' AND A.WIP_PROCESS = ''100032'' ' ' AND A.PROCESS_ID = ''100028'' ' ' AND A.CUSTOMER_SN=' QuotedStr(Edit1.Text); csTempCheck.Open; If csTempCheck.isEmpty [/code] |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
to max 大
小弟改成下列狀態 他還是只會跑 then begin showmessage('該序號尚未在QC') 這段而已 [code delphi] with csTempCheck do begin CommandText := 'SELECT A.CUSTOMER_SN "CSN"' 'FROM SAJET.G_SN_STATUS A, ' 'SAJET.G_WO_BASE B ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND B.WO_STATUS = ''3'' ' 'AND A.WIP_PROCESS = ''100032'' ' 'AND A.PROCESS_ID = ''100028'' ' 'AND A.CUSTOMER_SN = ' QuotedStr(Edit1.Text) ' '; csTempCheck.Open; while not csTempCheck.eof do begin with StringGrid1 do begin Params.Clear; Cells[1, RowCount - 1] := Fieldbyname('CSN').AsString; RowCount := RowCount 1; end; NEXT; end; if csTempCheck.isEmpty //if Edit1.Text <> csTempCheck.Fieldbyname('CSN').AsString then begin showmessage('該序號尚未在QC') end else begin ShowMessage('OK') end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
也試了這段
結果都是只跑 then begin showmessage('該序號尚未在QC') [code delphi] If POS( Edit1.Text ,csTempCheck.Fieldbyname('CSN').AsString )=0 //if csTempCheck.isEmpty //if Edit1.Text <> csTempCheck.Fieldbyname('CSN').AsString then begin showmessage('該序號尚未在QC') end else begin ShowMessage('OK') end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
------
What do we live for if not to make life less difficult for each other? |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
大大妳們好
小弟按照上文所敘修改 已經ok了 可有一各很怪的現象 如果我第一次輸入CSN是正確的 會顯示 OK 可第二筆我故意輸入錯誤 結果還是OK 如果我第一次輸入CSN是錯誤的 會顯示 序號不在QC 可第二筆我輸入正確的 結果還是顯示 序號不在QC 變成第一比好像會影響到後期 以下是我完整程式碼 [code delphi] procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var i, j: Integer; begin if Key = #13 then begin with StringGrid1 do begin Cells[1, 0] := 'CSN'; end; with csTempCheck do begin CommandText := 'SELECT A.CUSTOMER_SN "CSN"' 'FROM SAJET.G_SN_STATUS A, ' 'SAJET.G_WO_BASE B ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND B.WO_STATUS = ''3'' ' 'AND A.WIP_PROCESS = ''100032'' ' 'AND A.PROCESS_ID = ''100028'' ' 'AND A.CUSTOMER_SN = ' QuotedStr(Edit1.Text) ' '; csTempCheck.Open; while not csTempCheck.eof do begin with StringGrid1 do begin Params.Clear; Cells[1, RowCount - 1] := Fieldbyname('CSN').AsString; RowCount := RowCount 1; end; NEXT; end; csTempCheck.First; if csTempCheck.isEmpty then //if Edit1.Text <> csTempCheck.Fieldbyname('CSN').AsString begin showmessage('該序號尚未在QC') end else begin ShowMessage('OK'); Edit1.Clear; end; end; {ELSE Memo1.Lines.Add(Edit1.Text); Edit1.Clear end else begin Exit end; } end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet
編輯記錄
lovemari 重新編輯於 2009-04-24 14:41:34, 註解 無‧
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
說實在的,
您的程式邏輯整個就很怪?? 看不出真正的原需求?? 我猜猜是不是要將子: [code delphi] procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var i, j: Integer; begin if Key <> #13 then exit; StringGrid1.Cells[1, 0] := 'CSN'; csTempCheck. CommandText := 'SELECT A.CUSTOMER_SN "CSN"' 'FROM SAJET.G_SN_STATUS A, ' 'SAJET.G_WO_BASE B ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND B.WO_STATUS = ''3'' ' 'AND A.WIP_PROCESS = ''100032'' ' 'AND A.PROCESS_ID = ''100028'' ' 'AND A.CUSTOMER_SN = ' QuotedStr(Edit1.Text) ' '; csTempCheck.Open; if csTempCheck.isEmpty then showmessage('該序號尚未在QC') else begin ShowMessage('OK'); Cells[1, RowCount - 1] := Fieldbyname('CSN').AsString; RowCount := RowCount 1; Edit1 end; csTempCheck.Close; {ELSE Memo1.Lines.Add(Edit1.Text); Edit1.Clear end else begin Exit end; } end; [/code] |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
= =
屙....我是一開始先把CSN 帶出來 放在StringGird裡面 然後讓使用者輸入CSN 並且存在MEMO裡面 我還有後續動作是要把MEMO 的存在TABLE 但使用者不一定會把所有CSN 都輸入 可能StringGrid 帶出來有十筆 但使用者只會用到2-3筆 然後這2-3筆存在MEMO之後 會再存到TALBE 我現在是卡在這2-3筆CSN 必須要是有在StringGrid裡面的才可以存入MEMO 要不然不能繼續下一步....
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
請加上紅色字那兩段試試
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var i, j: Integer; begin if Key = #13 then begin csTempCheck.Close; with StringGrid1 do begin Cells[1, 0] := 'CSN'; end; with csTempCheck do begin CommandText := 'SELECT A.CUSTOMER_SN "CSN"' 'FROM SAJET.G_SN_STATUS A, ' 'SAJET.G_WO_BASE B ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND B.WO_STATUS = ''3'' ' 'AND A.WIP_PROCESS = ''100032'' ' 'AND A.PROCESS_ID = ''100028'' ' 'AND A.CUSTOMER_SN = ' QuotedStr(Edit1.Text) ' '; csTempCheck.Open; while not csTempCheck.eof do begin with StringGrid1 do begin Params.Clear; Cells[1, RowCount - 1] := Fieldbyname('CSN').AsString; RowCount := RowCount 1; end; NEXT; end; csTempCheck.First; if csTempCheck.isEmpty then //if Edit1.Text <> csTempCheck.Fieldbyname('CSN').AsString begin showmessage('該序號尚未在QC') end else begin ShowMessage('OK'); Edit1.Clear; end; end; {ELSE Memo1.Lines.Add(Edit1.Text); Edit1.Clear end else begin Exit end; } end; csTempCheck.Close; end; |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |