全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1487
推到 Plurk!
推到 Facebook!

如何在迴圈判斷之後有兩個規則

尚未結案
qqer
一般會員


發表:5
回覆:4
積分:1
註冊:2010-03-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-29 11:44:55 IP:122.117.xxx.xxx 訂閱

//加上該項目工時
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-29 23:28:35 IP:118.169.xxx.xxx 未訂閱
1.建議你把這段完全PO上來,
2.不知道發生錯誤, 錯誤是什麼?
qqer
一般會員


發表:5
回覆:4
積分:1
註冊:2010-03-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-31 10:52:20 IP:140.125.xxx.xxx 訂閱
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;
系統時間:2024-07-01 9:56:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!