[StringGrid]第2筆搜尋如何尾隨第1筆搜尋的RowCount之後 |
缺席
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
我在StringGrid 下兩筆SQL,
以下是我的第一段語法,第二段跟第一段只有一行不一樣其餘都一樣 [code delphi] //填入的欄位,1~5 都是固定值 , 6~10 是變數 Cells[1,RowCount-2] := '工單'; Cells[2,RowCount-2] := '機種名稱'; Cells[3,RowCount-2] := '批量'; Cells[4,RowCount-2] := '已投入'; Cells[5,RowCount-2] := '今日組裝'; Cells[6,RowCount-2] := '組裝不良'; Cells[7,RowCount-2] := '組裝直通率'; Cells[8,RowCount-2] := '今日測試'; Cells[9,RowCount-2] := '測試不良'; Cells[10,RowCount-2] := '測試直通率'; //SQL S1 := 'SELECT A.WORK_ORDER "工單",C.PART_NO "機種名稱",D.TARGET_QTY "批量",D.INPUT_QTY "已投入", ' 'NVL(A.OUTPUT_QTY,0) "今日組裝",NVL(SUM(B.FAIL_QTY),0) "組裝不良", ' 'TRUNC((A.OUTPUT_QTY - (SUM(B.FAIL_QTY)))*100 / A.OUTPUT_QTY,0)||''%'' "組裝直通率" ' 'FROM SAJET.G_KB_COUNT A, ' 'SAJET.G_SN_COUNT B, ' 'SAJET.SYS_PART C, ' 'SAJET.G_WO_BASE D ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND A.WORK_DATE = B.WORK_DATE ' 'AND A.WORK_ORDER = D.WORK_ORDER ' 'AND A.MODEL_ID = C.PART_ID ' 'AND A.STAGE_NAME IN (''1.ASSY'') ' //第二段SQL跟這段一模一樣,唯一不同就是這裡下的 STAGE 不同,第二筆是2.TEST 'AND A.WORK_DATE = TO_CHAR(SYSDATE,''YYYYMMDD'') ' 'GROUP BY A.WORK_ORDER,C.PART_NO,D.TARGET_QTY,D.INPUT_QTY,A.STAGE_NAME,A.OUTPUT_QTY ' 'ORDER BY A.STAGE_NAME '; [/code] 那我想以A.WORK_ORDER 當作主鍵,第二段搜尋出來的資料, 如果"組裝的WORK_ORDER" = "測試WORK_ORDER" , 那就填入"組裝"後面的"測試欄位" 那如果 WORK_ORDER不等於 , 就自動排列在組裝的下一行... 請問該如何實現.... 感謝大家....
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
補充敘述
[code delphi] Cells[1,RowCount-2] := '工單'; Cells[2,RowCount-2] := '機種名稱'; Cells[3,RowCount-2] := '批量'; Cells[4,RowCount-2] := '已投入'; Cells[5,RowCount-2] := '今日組裝'; Cells[6,RowCount-2] := '組裝不良'; Cells[7,RowCount-2] := '組裝直通率'; Cells[8,RowCount-2] := '今日測試'; Cells[9,RowCount-2] := '測試不良'; Cells[10,RowCount-2] := '測試直通率'; [/code] cells[1-4] ,工單,機種名稱,批量,已投入,是固定值 cells[5-7] ,組裝的值,以工單來當主鍵,如果搜尋有組裝資料,就填入數據到Cells[5 - 7] cells[8-10],測試的值,以工單來當主鍵,如果搜尋有測試資料,就填入數據到Cells[8 - 10] =======================第一種問題====================== 假設工單11A00001 , (機種名稱,批量,已投入,先不管) 有組裝數據跟測試數據,那希望呈現成為 11A00001,今日組裝=8,組裝不良=0,組裝直通率=100%,今日測試=8,測試不良=1,測試直通率=88% 由於組裝跟測試的SQL是分開下的,如果測試的工單=組裝的工單(都是11A00001來講,有組裝跟測試的數據) 就把搜尋出來的測試數據跟組裝數據,以一行來顯示 ======================第二種問題======================= 假設我組裝搜尋出來的工單有三筆,11A00001,22A00002,33A00003,但是 測試搜尋出來有兩筆而且跟組裝的工單不一樣,44A00004,55A00005 這時候希望呈現的是.. 11A00001,今日組裝=10,組裝不良=0,組裝直通率=100%,今日測試=0,測試不良=0,測試直通率=0 (沒有測試數據) 22A00002,今日組裝=20,組裝不良=0,組裝直通率=100%,今日測試=0,測試不良=0,測試直通率=0 (沒有測試數據) 33A00003,今日組裝=30,組裝不良=0,組裝直通率=100%,今日測試=0,測試不良=0,測試直通率=0 (沒有測試數據) 44A00004,今日組裝=0,組裝不良=0,組裝直通率=0,今日測試=40,測試不良=0,測試直通率=100% (沒有組裝數據) 55A00005,今日組裝=0,組裝不良=0,組裝直通率=0,今日測試=50,測試不良=0,測試直通率=100% (沒有組裝數據) 就是希望能呈現44A,55A系列的測試數據能夠自動排列在組裝的下一行(RowCount) 因為一開始不知道組裝搜尋出來的數據有多少RowCount,想要測試數據就自動排列在 組裝的RowCount 1
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
shunaaron
高階會員 發表:13 回覆:94 積分:106 註冊:2006-10-06 發送簡訊給我 |
[code delphi] while not adods.eof do begin indStr := trim(aods.FieldByName('WORK_ORDER ').AsString); ttC := ttStr.indxof(indStr) ; if ttC > -1 then begin SG.Cells[6,ttC] :=........ end else begin SG.Cells[1,ttR]:=... ttStr.Add(indStr); Inc(ttR); end; end; [/code] ===================引 用 lovemari 文 章=================== 我在StringGrid 下兩筆SQL, 以下是我的第一段語法,第二段跟第一段只有一行不一樣其餘都一樣 [code delphi] //填入的欄位,1~5 都是固定值 , 6~10 是變數 Cells[1,RowCount-2] := '工單'; Cells[2,RowCount-2] := '機種名稱'; Cells[3,RowCount-2] := '批量'; Cells[4,RowCount-2] := '已投入'; Cells[5,RowCount-2] := '今日組裝'; Cells[6,RowCount-2] := '組裝不良'; Cells[7,RowCount-2] := '組裝直通率'; Cells[8,RowCount-2] := '今日測試'; Cells[9,RowCount-2] := '測試不良'; Cells[10,RowCount-2] := '測試直通率'; //SQL S1 := 'SELECT A.WORK_ORDER "工單",C.PART_NO "機種名稱",D.TARGET_QTY "批量",D.INPUT_QTY "已投入", ' 'NVL(A.OUTPUT_QTY,0) "今日組裝",NVL(SUM(B.FAIL_QTY),0) "組裝不良", ' 'TRUNC((A.OUTPUT_QTY - (SUM(B.FAIL_QTY)))*100 / A.OUTPUT_QTY,0)||''%'' "組裝直通率" ' 'FROM SAJET.G_KB_COUNT A, ' 'SAJET.G_SN_COUNT B, ' 'SAJET.SYS_PART C, ' 'SAJET.G_WO_BASE D ' 'WHERE A.WORK_ORDER = B.WORK_ORDER ' 'AND A.WORK_DATE = B.WORK_DATE ' 'AND A.WORK_ORDER = D.WORK_ORDER ' 'AND A.MODEL_ID = C.PART_ID ' 'AND A.STAGE_NAME IN (''1.ASSY'') ' //第二段SQL跟這段一模一樣,唯一不同就是這裡下的 STAGE 不同,第二筆是2.TEST 'AND A.WORK_DATE = TO_CHAR(SYSDATE,''YYYYMMDD'') ' 'GROUP BY A.WORK_ORDER,C.PART_NO,D.TARGET_QTY,D.INPUT_QTY,A.STAGE_NAME,A.OUTPUT_QTY ' 'ORDER BY A.STAGE_NAME '; [/code] 那我想以A.WORK_ORDER 當作主鍵,第二段搜尋出來的資料, 如果"組裝的WORK_ORDER" = "測試WORK_ORDER" , 那就填入"組裝"後面的"測試欄位" 那如果 WORK_ORDER不等於 , 就自動排列在組裝的下一行... 請問該如何實現.... 感謝大家....
------
程式沒有這麼難 只是還沒打通其中要絕
編輯記錄
shunaaron 重新編輯於 2008-03-12 02:31:56, 註解 無‧
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
痾 大大我有點看不是很懂耶
你能夠說明一下嗎? ===================引 用 shunaaron 文 章=================== [code delphi] while not adods.eof do begin indStr := trim(aods.FieldByName('WORK_ORDER ').AsString); ttC := ttStr.indxof(indStr) ; if ttC > -1 then begin SG.Cells[6,ttC] :=........ end else begin SG.Cells[1,ttR]:=... ttStr.Add(indStr); Inc(ttR); end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
有人提供一各方法把第二段的語法加上回圈
[code delphi] FOR i:=1 to StringGrid1.RowCount-1 do j:=i; if StringGrid1.Cells[1,j] <> '' then begin ..... .... .... WORK_ORDER = ''' StringGrid1.Cells[0,j] ''' [/code] 我照作了 可是依然無法實現我的目的 是不是那錯了
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
shunaaron
高階會員 發表:13 回覆:94 積分:106 註冊:2006-10-06 發送簡訊給我 |
ttC := ttStr.indxof(indStr) ;
當ttC等於-1時,表示尚未在StringGrid裡出現 所以算是"新"的資料 至資料加入StringGrid裡 並且加到ttSr(TStringList)裡 在加StringGrid的RowCount 1 如果不是-1就表示有加過了 就加在相對的列後面 ttC所對印的值 會是StringGrid的列數 所以直接加用SG.Cells[6,ttC] 即可 TRY ===================引 用 lovemari 文 章=================== 痾 大大我有點看不是很懂耶 你能夠說明一下嗎? ===================引 用 shunaaron 文 章=================== [code delphi] while not adods.eof do begin indStr := trim(aods.FieldByName('WORK_ORDER ').AsString); ttC := ttStr.indxof(indStr) ; if ttC > -1 then begin SG.Cells[6,ttC] :=........ end else begin SG.Cells[1,ttR]:=... ttStr.Add(indStr); Inc(ttR); end; end; [/code]
------
程式沒有這麼難 只是還沒打通其中要絕
編輯記錄
shunaaron 重新編輯於 2008-05-13 01:19:31, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |