|

楼主 |
发表于 2009-7-8 11:21:37
|
显示全部楼层
现在又出现一个问题:我在ECalendar1的click事件中安排值班人,ECalendar1的click事件代码如下所示。如果某一天已经排班,我再次更改排班的时候,会出现该天的值班人没有显示出来的问题,我把功能窗体关了,然后再打开,该天的值班人才正常显示。
procedure TMainForm.FECalendar1Click(Sender: TObject);
var
i, j: Integer;
p: TPoint;
f: TPBCT;
s: String;
kssj:TDateTime;
zbbh,BM,DBLD,DD:string;
filter:string;
begin
Borland.Delphi.Windows.GetCursorPos(p);
p := FECalendar1.ScreenToClient(p);
i := FECalendar1.GetXCol(p.X);
j := FECalendar1.GetYRow(p.Y);
f := TPBCT.Create(Context);
try
f.Date := FECalendar1.GetCellDate(i, j);
if f.ShowModal=Business.Forms.Controls.mrOk then
begin
f.DataSetPBSJJ.First;
while not f.DataSetPBSJJ.Eof do
begin
s:=f.DataSetPBSJJ.FieldByName('ZBRY').AsString;
BM:=f.DataSetPBSJJ.FieldByName('BM').AsString;
DBLD:=f.DataSetPBSJJ.FieldByName('DBLD').AsString;
DD:=ComboBox3.text;
if ((s<>nil)and (s<>'')) then
begin
kssj:=f.Date+DateUtils.TimeOf(f.DataSetPBSJJ.FieldByName('KSSJ').AsDateTime);
filter:='zbapb_kssj=to_date('''+sysutils.DateTimeToStr(kssj)+''',''yyyy-mm-dd hh24:mi:ss'') and ZBAPB_DD='''+DD +'''';
DataSetPB.userFilter:= filter;
DataSetPB.Open;
if DataSetPB.RecordCount<>0 then
begin
zbbh:=DataSetPB.FieldByName('ZBAPB_ZBBH').AsString;
if JSDialogs.QuestionBox(f.DataSetPBSJJ.FieldByName('xs').AsString+'时间段已经排班,确定要替换之前的值班安排吗?', '排班替换', 1)=IDYES then begin
Query1.Close;
Query1.CommandText:='update zbapb set zbapb_dbld='''+DBLD+''' , ZBAPB_ZBRY='''+S+''' , ZBAPB_ZBBM='''+BM+''' where zbapb_zbbh='''+zbbh+'''';
Query1.Execute;
DataSetPB.Refresh;
FECalendar1.Repaint;
end;
end else
begin
DataSetPB.Append;
DataSetPB.FieldByName('ZBAPB_ZBRQ').AsDateTime := f.Date;
DataSetPB.FieldByName('ZBAPB_ZBBM').AsString := f.DataSetPBSJJ.FieldByName('BM').AsString;
DataSetPB.FieldByName('ZBAPB_ZBRY').AsString := f.DataSetPBSJJ.FieldByName('ZBRY').AsString;
DataSetPB.FieldByName('ZBAPB_KSSJ').AsDateTime := f.Date+DateUtils.TimeOf(f.DataSetPBSJJ.FieldByName('KSSJ').AsDateTime);
DataSetPB.FieldByName('ZBAPB_JSSJ').AsDateTime := f.Date+DateUtils.TimeOf(f.DataSetPBSJJ.FieldByName('JSSJ').AsDateTime);
DataSetPB.FieldByName('ZBAPB_DBLD').AsString := f.DataSetPBSJJ.FieldByName('DBLD').AsString;
DataSetPB.FieldByName('ZBAPB_DD').AsString := ComboBox3.text;
DataSetPB.Post;
DataSetPB.ApplyUpdates;
end;
end;// end if ((s<>nil)and (s<>''))
f.DataSetPBSJJ.Next;
end; //end while
end; // end if f.ShowModal=Business.Forms.Controls.mrOk
finally
f.Free;
end;
DataSetPB.Refresh;
FECalendar1.Repaint;
end;
procedure TMainForm.FECalendar1DrawCellProperties(Sender: TObject; ADate: Double; AState: TFECalCellStates; var ALabel: string; CellProperties: TFECellProperties);
begin
if (not (TFECalCellState.csCaption in AState)) and (not (TFECalCellState.csNotInMonth in AState)) then
begin
CellProperties.CaptionStyle := TFECapStyle.csNone;
CellProperties.Color := Graphics.clInfoBk;
CellProperties.Font.Color := Graphics.clGreen;
CellProperties.Layout := TTextLayout.tlTop;
ALabel := GetDateStr(ADate);
end;
end;
function TMAINFORM.GetDateStr(ADate: TDateTime): String;
begin
Result := SysUtils.IntToStr(DateUtils.DayOf(ADate))+'日';
DataSetPB.UserFilter:= 'ZBAPB_ZBRQ=to_date('''+SysUtils.DateToStr(ADate)+''',''yyyy-mm-dd'') and ZBAPB_DD='''+ComboBox3.Text+'''';
DataSetPB.Open;
while not DataSetPB.Eof do
begin
if ((DataSetPB.FieldByName('ZBAPB_ZBRY').AsString<>nil) and (DataSetPB.FieldByName('ZBAPB_ZBRY').AsString<>'')) then
Result := Result+ #13#10 +OrgSys.OrgSystem.GetPerson(DataSetPB.FieldByName('ZBAPB_ZBRY').AsString).DisplayName;
if ((DataSetPB.FieldByName('ZBAPB_ZBRY').AsString=nil) or (DataSetPB.FieldByName('ZBAPB_ZBRY').AsString='')) then
Result := Result+ #13#10 +DataSetPB.FieldByName('ZBAPB_ZBRY').AsString;
DataSetPB.Next;
end;
end; |
|