如何在迴圈判斷之後有兩個規則 |
尚未結案
|
qqer
一般會員 發表:5 回覆:4 積分:1 註冊:2010-03-24 發送簡訊給我 |
//加上該項目工時 HCunt:=HCunt FORM1.Query1.FieldByName('Kind_Workh').AsInteger; //如果未超出180分鐘,則寫入暫存檔 If HCunt <= 180 then break; //如果超出180分鐘,showmessage並將日期 1 繼續 迴圈 ShowMessage('人員:' FORM1.Query1.FieldByName('Response_MEMBER').ASString chr(13) '設備:' FORM1.Query1.FieldByName('Response_EQMT').ASString chr(13) '項目:' FORM1.Query1.FieldByName('Kind_ID').ASString chr(13) '日期:' datetostr(_SQL_DATE) '累計時數超出,將作業延至下一日'); _SQL_DATE:=_SQL_DATE - 1; End; 以上是目前的程式碼,現在我要把他所排定的第一天日期 1,剩下其他日期都改成-1,可是我不管怎麼寫都出現錯誤,請大大幫我解惑,謝謝 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
qqer
一般會員 發表:5 回覆:4 積分:1 註冊:2010-03-24 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
VAR Last_DATE: String; TEMP_DATEF,TEMP_DATET,TEMP_X,_SQL_DATE: TDATETIME; HCunt: Integer; begin TEMP_DATEF:=STRTODATE(EDIT1.TEXT); TEMP_DATET:=STRTODATE(EDIT2.TEXT); //清空暫存檔 With FORM1.Query3 Do Begin Close; SQL.Clear; SQL.Add('delete From Check_Schedule'); If (not Prepared) Then Prepare; ExecSQL; END; With FORM1.Query1 Do Begin Close; SQL.Clear; SQL.Add('Select * From Check_Response,Check_Item,Check_Kind Where Response_EQMT=Item_ID AND Item_check=Kind_ID '); If (DBLookupComboBox1.Text<>'') Then SQL.Add(' And Response_MEMBER = :XMBM '); If (DBLookupComboBox2.Text<>'') Then SQL.Add(' And Response_EQMT = :XEQMT '); If (DBLookupComboBox3.Text<>'') Then SQL.Add(' And Item_check = :XITEM '); SQL.Add(' ORDER BY Response_MEMBER,Response_EQMT '); If (DBLookupComboBox1.Text<>'') Then ParamByName('XMBM').Asstring := DBLookupComboBox1.Text; If (DBLookupComboBox2.Text<>'') Then ParamByName('XEQMT').Asstring := DBLookupComboBox2.Text; If (DBLookupComboBox3.Text<>'') Then ParamByName('XITEM').Asstring := DBLookupComboBox3.Text; Open; WHILE NOT EOF DO BEGIN Last_DATE:=''; //該設備已檢查的資料最後日期 With FORM1.Query2 Do Begin Close; SQL.Clear; SQL.Add('Select * From Check_Results Where Results_MEMBER = :_MEMBER AND Results_EQMT = :_EQMT AND Results_ITEM = :_check ORDER BY Results_DATE DESC '); ParamByName('_MEMBER').Asstring := FORM1.Query1.FieldByName('Response_MEMBER').ASString; ParamByName('_EQMT').Asstring := FORM1.Query1.FieldByName('Response_EQMT').ASString; ParamByName('_check').Asstring := FORM1.Query1.FieldByName('Kind_ID').ASString; open; Last_DATE:=FORM1.Query2.FieldByName('Results_DATE').ASString; close; end; //如果這筆是新的未被排過 IF Last_DATE = '' THEN BEGIN //日期使用(檢查日期-起) TEMP_X:=TEMP_DATEF; END ELSE BEGIN //某工作項目紀錄的最後一天 該工作項目的頻率 > (檢查日期-起) //日期使用(某工作項目紀錄的最後一天 該工作項目的工時) IF STRTODATE(Last_DATE) FORM1.Query1.FieldByName('Kind_Freq').ASInteger > TEMP_DATEF THEN TEMP_X:=STRTODATE(Last_DATE) FORM1.Query1.FieldByName('Kind_Freq').ASInteger ELSE //日期使用(檢查日期-起) TEMP_X:=TEMP_DATEF; END; //一直排到(檢查日期-終) WHILE TEMP_X <= TEMP_DATET DO BEGIN //帶入SQL的日期預設為(檢查日期-起) _SQL_DATE:=TEMP_X; // 從from 找到 to 直到找到第一筆符合條件的日期 才跳出迴圈 寫入資料 // 1000514 While _SQL_DATE <= TEMP_DATET do BEGIN //查詢排程某天的工時 With FORM1.Query4 Do Begin Close; SQL.Clear; //SQL.Add('Select sum(Daily_Workh) as Cunt From Check_Daily Where Daily_MEMBER = :_MEMBER AND Daily_EQMT = :_EQMT AND Daily_ITEM = :_check AND Daily_DATE = :_SQL_DATE '); SQL.Add('Select sum(Daily_Workh) as Cunt From Check_Daily Where Daily_MEMBER = :_MEMBER AND Daily_DATE = :_SQL_DATE '); ParamByName('_MEMBER').Asstring := FORM1.Query1.FieldByName('Response_MEMBER').ASString; //ParamByName('_EQMT').Asstring := FORM1.Query1.FieldByName('Response_EQMT').ASString; //ParamByName('_check').Asstring := FORM1.Query1.FieldByName('Kind_ID').ASString; //DeBug用 //Edit3.Text := FloatToStr(_SQL_DATE); //Edit3.Text := DateToStr(_SQL_DATE); //ParamByName('_DATE_T').Asstring :=DateToStr(_SQL_DATE); ParamByName('_SQL_DATE').AsDateTime :=_SQL_DATE; open; HCunt:=FORM1.Query4.FieldByName('Cunt').AsInteger; close; end; // 1000514 //上述為已排的作業時數 //底下為本次預排的時數 With FORM1.Query5 Do Begin Close; SQL.Clear; SQL.Add('Select sum(Temp_Workh) as Cunt From Check_Schedule Where Temp_MEMBER = :_MEMBER AND Temp_DATE = :_SQL_DATE '); ParamByName('_MEMBER').Asstring := FORM1.Query1.FieldByName('Response_MEMBER').ASString; ParamByName('_SQL_DATE').AsDateTime :=_SQL_DATE; open; HCunt:=HCunt FORM1.Query5.FieldByName('Cunt').AsInteger; close; end; //加上該項目工時 HCunt:=HCunt FORM1.Query1.FieldByName('Kind_Workh').AsInteger; //如果未超出180分鐘,則寫入暫存檔 If HCunt <= 180 then break; //如果超出180分鐘,showmessage並將日期 1 繼續 迴圈 ShowMessage('人員:' FORM1.Query1.FieldByName('Response_MEMBER').ASString chr(13) '設備:' FORM1.Query1.FieldByName('Response_EQMT').ASString chr(13) '項目:' FORM1.Query1.FieldByName('Kind_ID').ASString chr(13) '日期:' datetostr(_SQL_DATE) '累計時數超出,將作業延至); TEMP_DATEF:=_SQL_DATE-1; AND _SQL_DATE:=_SQL_DATE 1; End; TEMP_X:=_SQL_DATE; table5.Open; table5.first; if NOT table5.Locate('Temp_MEMBER;Temp_EQMT;Temp_ITEM;Temp_DATE;TEMP_Workh',vararrayof([FORM1.Query1.FieldByName('Response_MEMBER').ASString,FORM1.Query1.FieldByName('Response_EQMT').ASString,FORM1.Query1.FieldByName('Kind_ID').ASString,FormatDateTime('yyyy/mm/dd',TEMP_X),FORM1.Query1.FieldByName('Kind_Workh').AsInteger]),[]) then begin table5.Append; table5.FieldByName('Temp_MEMBER').asstring:=FORM1.Query1.FieldByName('Response_MEMBER').ASString; table5.FieldByName('Temp_EQMT').asstring:=FORM1.Query1.FieldByName('Response_EQMT').ASString; table5.FieldByName('Temp_ITEM').asstring:=FORM1.Query1.FieldByName('Kind_ID').ASString; table5.FieldByName('Temp_DATE').asdatetime:=TEMP_X; table5.FieldByName('TEMP_Workh').AsInteger:=FORM1.Query1.FieldByName('Kind_Workh').AsInteger; table5.Post; end; table5.Close; TEMP_X:=TEMP_X FORM1.Query1.FieldByName('Kind_Freq').ASInteger; END; NEXT; END; end; table5.close; table5.OpEN; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |