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

查詢某天所有的工作時間

答題得分者是:GrandRURU
qqer
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-10 13:21:35 IP:140.125.xxx.xxx 未訂閱


procedure TForm1.Button1Click(Sender: TObject);
VAR
Last_DATE: String;
TEMP_DATEF,TEMP_DATET,SQL_DATE,TEMP_X: 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_DATEF;
HCunt:=40;
While HCunt >= 30 do
BEGIN
//查詢排程某天的工時
With FORM1.Query4 Do
Begin
Close;
SQL.Clear;
SQL.Add('Select sum(Results_Workh) as HCunt From Check_Results Where Results_MEMBER = :_MEMBER AND Results_EQMT = :_EQMT AND Results_ITEM = :_check AND Results_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;
open;
HCunt:=FORM1.Query4.FieldByName('HCunt').value;
close;
end;
//如果當天工時超過 則日期 1繼續回到迴圈
If HCunt > 30 then
begin
SQL_DATE:=SQL_DATE 1;
end;
ParamByName('SQL_DATE').AsDateTime :=FORM1.Query2.FieldByName('Results_DATE').AsDateTime;
end;
NEXT;
TEMP_X:=SQL_DATE;
table5.Open;
table5.first;
if NOT table5.Locate('Temp_MEMBER;Temp_EQMT;Temp_ITEM;Temp_DATE',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)]),[]) 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').asstring:=FormatDateTime('yyyy/mm/dd',TEMP_X);
table5.Post;
end;
table5.Close;
TEMP_X:=TEMP_X FORM1.Query1.FieldByName('Kind_Freq').ASInteger;
END;
NEXT;
END;
end;
table5.close;
table5.OpEN;

此按鈕是先加上同一天的所有工時,然後去判別有沒有超過特定時數,一旦超過就儲存在未滿特定時數的天數。
在執行程式的時候出現'QUERY4:field 'SQL_DATE' is of an unknown type'.
不知道怎麼修正,下面有附上程式,請幫我解惑,謝謝。

GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-10 14:30:35 IP:59.120.xxx.xxx 訂閱
 84行開始
到88行open query4
沒看到你設定
SQL_DATE參數
應該就是那裡錯了吧
系統時間:2024-03-29 0:42:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!