procedure yourprodname{你自己启过程名)( {这里列举你所用到的行参和具体类型} );
begin
If (TmpTime1<=B_Time1)  And (TmpTime2>=B_Time2) Then
  Begin
    Pb_S :=B_Time1;
    Pb_E :=B_Time2;
  ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
  End;
IF (TmpTime1>=B_Time1) And (TmpTIme2<=B_Time2) Then
  Begin
    Pb_S :=TmpTime1;
    Pb_E :=TmpTime2;
    ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
  End;
end;
注意:如果你的行参需要向过程外部传送数据,请在行参前面写上 var 保留字。

解决方案 »

  1.   

    var
      FBusiness_Look: TFBusiness_Look;
    Function ADOQuery_APPEND(ADOQuery :TADOQuery;p1,p2 :Integer;p3,p4,p5 :String):Boolean;Forward;
    Function ADOQuery_Userinfo(ADOQuery:TADOQuery;P1:Variant):Boolean;Forward;
    Function Pb_Del(ADOQuery:TADOQuery):Boolean;Forward;
    Function ADOQuery_Attnumber(ADOQuery:TADOQuery;P1:Variant):Boolean;Forward;
    Function ADOQuery_Business(ADOQuery:TADOQuery;P1:Variant):Boolean;Forward;
    implementation
    {$R *.DFM}
    Function ADOQuery_Business(ADOQuery:TADOQuery;P1:Variant):Boolean;
    Begin
      Try
        Result :=True;
        ADOQuery.Close;
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('Select * From User_Business Where Userid=:F0');
        ADOQuery.Parameters[0].Value :=P1;
        ADOQuery.Prepared;
        ADOQuery.Open;
      Except
        Result :=False;
      End;
    End;      
    Function ADOQuery_Attnumber(ADOQuery:TADOQuery;P1:Variant):Boolean;
    Begin
      Try
        Result :=True;
        ADOQuery.Close;
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('Select * From Userinfo Where Attnumber=:F0');
        ADOQuery.Parameters[0].Value :=P1;
        ADOQuery.Prepared;
        ADOQuery.Open;
      Except
        Result :=False;
      End;
    End;
    Function Pb_Del(ADOQuery:TADOQuery):Boolean;
    Begin
      Try
        Result :=True;
        ADOQuery.Close;
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('Delete * From PB');
        ADOQuery.Prepared;
        ADOQuery.ExecSQL;
      Except
        Result :=False;
      End;
    End;      
    Function ADOQuery_Userinfo(ADOQuery:TADOQuery;P1:Variant):Boolean;
    Begin
      Try
        Result :=True;
        ADOQuery.Close;
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('Select Userid,Attnumber From Userinfo Where Deptid=:F0');
        ADOQuery.Parameters[0].Value :=P1;
        ADOQuery.Prepared;
        ADOQuery.Open;
      Except
        Result :=False;
      End;
    End;
    Function ADOQuery_APPEND(ADOQuery :TADOQuery;p1,p2 :Integer;p3,p4,p5 :String):Boolean;
    Begin
      Try
        Result :=True;
        ADOQuery.Open;
        ADOQuery.Append;
        ADOQuery.Fields[0].AsInteger :=P1;
        ADOQuery.Fields[1].AsInteger :=p2;
        ADOQuery.Fields[2].AsString  :=p3;
        ADOQuery.Fields[3].AsString  :=P4;
        ADOQuery.Fields[4].AsString  :=p5;
        ADOQuery.Post;
      Except
        Result :=False;
      End;
    End;procedure TFBusiness_Look.dxDBTreeView1Change(Sender: TObject;
      Node: TTreeNode);
    Var
      Node1  :TTreeNode;
      Min,Max,i    :Integer;
      Deptid1      :Integer;
      Deptname1    :String;
    begin
      Pb_Del(ADOQuery2 );
      ComBOBOx1.Clear;
      ComBoBoX1.Items.Clear;
      Node1 :=dxDBTreeView1.Selected;
      If Node1.Level <> 0  Then
        Begin
          If Node1.HasChildren  Then
            Begin
              Min :=Node1.getFirstChild.AbsoluteIndex;
              While Node1.HasChildren Do
                 Node1 :=Node1.GetLastChild;
                 Max :=Node1.AbsoluteIndex;
              For i:=Min-1 To Max Do
                Begin
                  Deptname1 :=dxDBTreeView1.Items[i].Text;
                  ADOQuery1.Close;
                  ADOQuery1.SQL.Clear;
                  ADOQuery1.SQL.Add('Select Deptid From Departments ');
                  ADOQuery1.SQL.Add('Where Deptname =:Fdeptname');
                  ADOQuery1.Parameters[0].Value :=Deptname1;
                  ADOQuery1.Prepared;
                  ADOQuery1.Open;
                  Deptid1 :=ADOQuery1.FieldByName('Deptid').AsInteger;
                  ADOQuery_Userinfo(ADOQuery1,Deptid1);
                  While Not ADOQuery1.Eof  Do
                    Begin
                      ComBOBOx1.Items.Add(IntToStr(ADOQuery1.fieldByName('AttNumber').AsInteger));
                      ADOQuery1.Next;
                    End;
                 End;
              End
            Else  //该节点没有字节点
              Begin
                ADOTable1.Open;
                ADOTable1.Locate('Deptname',Node1.Text,[]);
                Deptid1 :=ADOTable1.FieldByName('Deptid').AsInteger;
                ADOQuery_Userinfo(ADOQuery1,Deptid1);
                While Not ADOQuery1.Eof  DO
                  Begin
                    ComBoBoX1.Items.Add(IntToStr(ADOQuery1.FieldByName('AttNumber').AsInteger));
                    ADOQuery1.Next;
                  End;
               End;
          End
        Else  //当前节点为根节点
          Begin
            ADOQuery1.Close;
            ADOQuery1.SQL.Clear;
            ADOQuery1.SQL.Add('Select Userid,Attnumber From Userinfo');
            ADOQuery1.Prepared;
            ADOQuery1.Open;
            While Not ADOQuery1.Eof  Do
              Begin
                ComBoBox1.Items.Add(IntToStr(ADOQuery1.FieldByName('AttNumber').AsInteger));
                ADOQuery1.Next;
              End;
           End;
           IF ComBoBox1.Items.Count>=2 Then
             ComBoBOx1.Items.Add('<全部>');
    End;procedure TFBusiness_Look.Button1Click(Sender: TObject);
    Var
      TmpTime1,TmpTime2 :TDateTime;
      B_Time1,B_Time2   :TDateTime;
      Pb_S,Pb_E         :TDateTime;
      N1 ,j,Userid1,Attnumber1  :Integer;
      Name1 :String;
      FADOQuery :TADOQuery;
    begin
      TmpTime1 :=Int(DateTimePicker1.DateTime)+Frac(DateTimePicker2.DateTime);
      TmpTime2 :=Int(DateTimePicker3.DateTime)+Frac(DateTimePicker4.DateTime);
      IF ComBoBox1.Text  <>  ''  Then
         Begin
           If ComBoBox1.Text <>  '<全部>'  Then
              Begin
                FADOQuery :=TADOQuery.Create(Self);
                FADOQuery.Connection :=ADOConnection1;
                ADOQuery_Attnumber(FADOQuery,StrToInt(ComBoBox1.Text));
                Userid1 :=FADOQuery.FieldByName('Userid').AsInteger;
                Attnumber1 :=FADOQuery.FieldByName('Attnumber').AsInteger;
                Name1 :=FADOQuery.FieldByName('Name').AsString;
                FADOQuery.Free;
                ADOQuery1.Close;
                ADOQuery1.SQL.Clear;
                ADOQuery1.SQL.Add('Select * From User_Business Where Userid=:F0');
                ADOQuery1.Parameters[0].Value :=Userid1;
                ADOQuery1.Prepared;
                ADOQuery1.Open;
                ADOQuery2.Close;
                ADOQuery2.SQL.Clear;
                ADOQuery2.SQL.Add('Select * From Pb');
                ADOQuery2.Prepared;
                ADOQuery2.Open;
                While Not ADOQuery1.Eof Do
                  Begin
                    B_Time1 :=StrToDateTime(ADOQuery1.FieldByName('B_StartDate').AsString);
                    B_Time2 :=StrToDateTime(ADOQuery1.FieldByName('B_EndDate').AsString);
                    If TmpTime1<=TmpTime2  Then
                       Begin
                          If (TmpTime1<=B_Time1)  And (TmpTime2>=B_Time2) Then
                            Begin
                              Pb_S :=B_Time1;
                              Pb_E :=B_Time2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                             End;
                          IF (TmpTime1>=B_Time1) And (TmpTime2<=B_Time2) Then
                             Begin
                               Pb_S :=TmpTime1;
                               Pb_E :=TmpTime2;
                               ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                            End;
                          If (TmpTime1<=B_Time1) And (TmpTime2>=B_Time1) And (TmpTime2<=B_Time2)  Then
                              Begin
                                Pb_S :=B_Time1;
                                Pb_E :=TmpTime2;
                                ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                              End;
                         If (TmpTime1>=B_Time1) And  (TmpTime1<=B_Time2) And (TmpTime2>=B_Time2)  Then
                            Begin
                              Pb_S :=TmpTime1;
                              Pb_E :=B_Time2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                             End;
                        End;
                      ADOQuery1.Next;
                    End;
               End
           Else  //为<全部>
            Begin
              N1:=ComBoBox1.Items.Count;
              J:=0;
              While j<=N1-2  Do
              //For j:=1  To N1-2  Do
                Begin
                  FADOQuery :=TADOQuery.Create(Self);
                  FADOQuery.Connection :=ADOConnection1;
                  ADOQuery_Attnumber(FADOQuery,StrToInt(ComBoBOx1.Text));
                  Userid1 :=FADOQuery.FieldByName('Userid').AsInteger;
                  Attnumber1 :=FADOQuery.FieldByName('Attnumber').AsInteger;
                  Name1 :=FADOQuery.FieldByName('Name').AsString;
                  FADOQuery.Free;
                  ADOQuery2.Close;
                  ADOQuery2.SQL.Clear;
                  ADOQuery2.SQL.Add('Select * From Pb');
                  ADOQuery2.Prepared;
                  ADOQuery2.Open;
                  ADOQuery1.Close;
                  ADOQuery1.SQL.Clear;
                  ADOQuery1.SQL.Add('Select * From User_Business Where Userid=:F0');
                  ADOQuery1.Parameters[0].Value :=Userid1;
                  ADOQuery1.Prepared;
                  ADOQuery1.Open;
                While Not ADOQuery1.Eof Do
                  Begin
                    B_Time1 :=StrToDateTime(ADOQuery1.FieldByName('B_StartDate').AsString);
                    B_Time2 :=StrToDateTime(ADOQuery1.FieldByName('B_EndDate').AsString);
                    If TmpTime1<=TmpTime2  Then
                       Begin
                          If (TmpTime1<=B_Time1)  And (TmpTime2>=B_Time2) Then
                            Begin
                              Pb_S :=B_Time1;
                              Pb_E :=B_Time2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                             End;
                          IF (TmpTime1>=B_Time1) And (TmpTIme2<=B_Time2) Then
                             Begin
                               Pb_S :=TmpTime1;
                               Pb_E :=TmpTime2;
                                ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                            End;
                         // If (TmpTime1<=B_Time1) And (TmpTime2<=B_Time2) Then
                         // If (TmpTime1>=B_Time2) And (TmpTime2>=B_Time2) Then
                          If (TmpTime1<=B_Time1) And (TmpTime2>=B_Time1) And (TmpTime2<=B_Time2)  Then
                              Begin
                                Pb_S :=B_Time1;
                                Pb_E :=TmpTime2;
                                ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                              End;
                         If (TmpTime1>=B_Time1) And  (TmpTime1<=B_Time2) And (TmpTime2>=B_Time2)  Then
                            Begin
                              Pb_S :=TmpTime1;
                              Pb_E :=B_Time2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                             End;
                        End;
                      ADOQuery1.Next;
                    End;
                    J:=j+1;
               End;End;
    End;
    Button1.Enabled :=False;
    End;procedure TFBusiness_Look.FormClose(Sender: TObject;  var Action: TCloseAction);
    begin
      Button1.Enabled :=True;
      Pb_Del(ADOQuery2 );
    end;procedure TFBusiness_Look.ComboBox1Change(Sender: TObject);
    begin
     Pb_Del(ADOQuery2 );
     Button1.Enabled :=True;
    end;procedure TFBusiness_Look.DateTimePicker1Change(Sender: TObject);
    begin
      Pb_Del(ADOQuery2);
      Button1.Enabled :=True;
    end;procedure TFBusiness_Look.DateTimePicker2Change(Sender: TObject);
    begin
      Pb_Del(ADOQuery2);
      Button1.Enabled :=True;
    end;procedure TFBusiness_Look.DateTimePicker3Change(Sender: TObject);
    begin
      Pb_Del(ADOQuery2);
      Button1.Enabled :=True;
    end;procedure TFBusiness_Look.DateTimePicker4Change(Sender: TObject);
    begin
      Pb_Del(ADOQuery2);
      Button1.Enabled :=True;
    end;procedure TFBusiness_Look.Button2Click(Sender: TObject);
    begin
      Close;
    end;
    end.
      

  2.   

    procedure TFBusiness_Look.Button1Click(Sender: TObject);
    Var
      TmpTime1,TmpTime2 :TDateTime;
      B_Time1,B_Time2  :TDateTime;
      Pb_S,Pb_E        :TDateTime;
      N1 ,j,Userid1,Attnumber1  :Integer;
      Name1 :String;
      FADOQuery :TADOQuery;
      procedure test ( FTmpTime1,FTmpTime2 :TDateTime;
      FB_Time1,FB_Time2  :TDateTime);
      var
        Pb_S,Pb_E        :TDateTime;
      begin
      If (TmpTime1<=B_Time1)  And (TmpTime2>=B_Time2) Then
                            Begin
                              Pb_S :=B_Time1;
                              Pb_E :=B_Time2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                            End;
                          IF (TmpTime1>=B_Time1) And (TmpTime2<=B_Time2) Then
                            Begin
                              Pb_S :=TmpTime1;
                              Pb_E :=TmpTime2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                            End;
                          If (TmpTime1<=B_Time1) And (TmpTime2>=B_Time1) And (TmpTime2<=B_Time2)  Then
                              Begin
                                Pb_S :=B_Time1;
                                Pb_E :=TmpTime2;
                                ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                              End;
                        If (TmpTime1>=B_Time1) And  (TmpTime1<=B_Time2) And (TmpTime2>=B_Time2)  Then
                            Begin
                              Pb_S :=TmpTime1;
                              Pb_E :=B_Time2;
                              ADOQuery_APPEND(ADOQuery2,Userid1,Attnumber1, Name1,DateTimeToStr(Pb_S),DateTimeToStr(Pb_E));
                            End;
      end ;
    begin
      TmpTime1 :=Int(DateTimePicker1.DateTime)+Frac(DateTimePicker2.DateTime);
      TmpTime2 :=Int(DateTimePicker3.DateTime)+Frac(DateTimePicker4.DateTime);
      IF ComBoBox1.Text  <>  ''  Then
        Begin
          If ComBoBox1.Text <>  '<全部>'  Then
              Begin
                FADOQuery :=TADOQuery.Create(Self);
                FADOQuery.Connection :=ADOConnection1;
                ADOQuery_Attnumber(FADOQuery,StrToInt(ComBoBox1.Text));
                Userid1 :=FADOQuery.FieldByName('Userid').AsInteger;
                Attnumber1 :=FADOQuery.FieldByName('Attnumber').AsInteger;
                Name1 :=FADOQuery.FieldByName('Name').AsString;
                FADOQuery.Free;
                ADOQuery1.Close;
                ADOQuery1.SQL.Clear;
                ADOQuery1.SQL.Add('Select * From User_Business Where Userid=:F0');
                ADOQuery1.Parameters[0].Value :=Userid1;
                ADOQuery1.Prepared;
                ADOQuery1.Open;
                ADOQuery2.Close;
                ADOQuery2.SQL.Clear;
                ADOQuery2.SQL.Add('Select * From Pb');
                ADOQuery2.Prepared;
                ADOQuery2.Open;
                While Not ADOQuery1.Eof Do
                  Begin
                    B_Time1 :=StrToDateTime(ADOQuery1.FieldByName('B_StartDate').AsString);
                    B_Time2 :=StrToDateTime(ADOQuery1.FieldByName('B_EndDate').AsString);
                    If TmpTime1<=TmpTime2  Then
                        Begin
                          test ( TmpTime1,TmpTime2 ,B_Time1,FB_Time2 );
                        End;
                      ADOQuery1.Next;
                    End;
              End
          Else  //为<全部>
            Begin
              N1:=ComBoBox1.Items.Count;
              J:=0;
              While j<=N1-2  Do
              //For j:=1  To N1-2  Do
                Begin
                  FADOQuery :=TADOQuery.Create(Self);
                  FADOQuery.Connection :=ADOConnection1;
                  ADOQuery_Attnumber(FADOQuery,StrToInt(ComBoBOx1.Text));
                  Userid1 :=FADOQuery.FieldByName('Userid').AsInteger;
                  Attnumber1 :=FADOQuery.FieldByName('Attnumber').AsInteger;
                  Name1 :=FADOQuery.FieldByName('Name').AsString;
                  FADOQuery.Free;
                  ADOQuery2.Close;
                  ADOQuery2.SQL.Clear;
                  ADOQuery2.SQL.Add('Select * From Pb');
                  ADOQuery2.Prepared;
                  ADOQuery2.Open;
                  ADOQuery1.Close;
                  ADOQuery1.SQL.Clear;
                  ADOQuery1.SQL.Add('Select * From User_Business Where Userid=:F0');
                  ADOQuery1.Parameters[0].Value :=Userid1;
                  ADOQuery1.Prepared;
                  ADOQuery1.Open;
                While Not ADOQuery1.Eof Do
                  Begin
                    B_Time1 :=StrToDateTime(ADOQuery1.FieldByName('B_StartDate').AsString);
                    B_Time2 :=StrToDateTime(ADOQuery1.FieldByName('B_EndDate').AsString);
                    If TmpTime1<=TmpTime2  Then
                      Begin
                        test ( TmpTime1,TmpTime2 ,B_Time1,FB_Time2 );
                        End;
                      ADOQuery1.Next;
                    End;
                    J:=j+1;
              End;End;
    End;
    Button1.Enabled :=False;
    End;