从来没遇到过这种情况,单步调试时能进入{......}中执行语句。大惑不解,请高人指点。

解决方案 »

  1.   

    重新build一遍,再检查一下其他目录有没有同名的文件
      

  2.   

    应该不是病毒的问题,我装Norton,每天更新。
      

  3.   

    删除该单元对应的 .DCU 文件
      

  4.   

    换成//也不行。也没有打开另外一个工程,重新打开也一样。
    我还把其它地方的同名文件也删除了。也没用。唉!
    .Dcu文件能删吗?
      

  5.   

    这个问题其实很简单,但是一般不碰到过是不会明白的。
    你的代码不是在Delphi下面敲进来的,是从网页上或者写字板或者QQ等工具里拷过来的。
    Delphi的回车换行符是#13#10,但是网页和某些工具#13就换行了。Copy进Delphi编辑器的时候,看起来是换行了,但是调试工具不认识。就造成了“错行”的现象。也就是断点所指示的行并不是当前所运行的行。
    解决办法:
    将你的代码Copy到记事本中,你会看到有问题的地方是一个黑方块而没有换行。删掉那个黑方块,回车一下,处理完了再拷回Delphi里面重新编译就可以了。
      

  6.   

    to: mastersky(浪)
    没有你说的那种情况。代码都是目前正在使用的。
    我现在只是在上面做修改。
      

  7.   

    是一系统错误,象错觉,build all projects,ok
      

  8.   

    我把除了.dfm和.pas以外的文件删了,故障依旧。
    使用Compile All Projects编译,故障依旧。
    其它路径下的所有同名文件删了,故障依旧。
    build all projects ,故障依旧。
    绝望中!
      

  9.   

    LZ什么都删了还不行啊
    还有最后一招,把Delphi也删了
    再重装试试
      

  10.   

    你出错的那个Pas中的所有代码。
      

  11.   

    我把除了.dfm和.pas以外的文件删了,故障依旧。
    使用Compile All Projects编译,故障依旧。
    其它路径下的所有同名文件删了,故障依旧。
    build all projects ,故障依旧。
    绝望中!再按浪说的方法试试,不行,重新把所有代码重写一。。呵呵
      

  12.   

    我把除了.dfm和.pas以外的文件删了,故障依旧。
    使用Compile All Projects编译,故障依旧。
    其它路径下的所有同名文件删了,故障依旧。
    build all projects ,故障依旧。
    绝望中!------------------
    肯定是做的还不够彻底,dcu和源文件的版本不一致。把工程选项和环境选项的目录设置检查一下
      

  13.   

    to:mastersky(浪)
    看了,没有。
    to:lijinghe1(ljh)
    工程选项和环境选项的目录设置应该注意什么。代码如下:
    procedure TfrmOverTurnDoWith.tblOverTimeBeforePost(DataSet: TDataSet);
      var  vSeg_Year,vSeg_Month,vSeg_Day : Word;
           vSeg_WaitMsg  : TfrmWaitMessage;
           vSeg_Component : TComponent;
           vSeg_WeekSta,vSeg_WeekSun : string;
    begin
      inherited;
      if (tblOverTime.FieldByName('ove_OverTime').AsFloat > 0) and
      (tblOverTime.FieldByName('ove_Pay').AsFloat >= 0) then
      begin
        tblOverTime.FieldByName('ove_TurnIn').AsFloat :=
        tblOverTime.FieldByName('ove_OverTime').AsFloat
        - tblOverTime.FieldByName('ove_Pay').AsFloat
      end;  if tblOverTime.FieldByName('ove_TurnIn').AsFloat > tblOverTime.FieldByName('ove_OverTime').AsFloat then
      begin
        ShowMessage('倒休时不能大于加班时');
        Abort;
      end;
      if tblOverTime.FieldByName('ove_Pay').AsFloat > tblOverTime.FieldByName('ove_OverTime').AsFloat then
      begin
        ShowMessage('支付时不能大于加班时');
        Abort;
      end;
      if tblOverTime.FieldByName('ove_Department').AsString <= '   ' then
      begin
        ShowMessage('请输入部门名称');
        dbgOverTimeove_Department.Field.FocusControl;
        Abort;
      end;
      if tblOverTime.FieldByName('ove_WorkNo').AsString <= '   ' then
      begin
        ShowMessage('请输入员工工号');
        dbgOverTimeove_WorkNo.Field.FocusControl;
        Abort;
      end;
      if tblOverTime.FieldByName('ove_Date').AsString <= '0' then
      begin
        ShowMessage('请输入日期');
        dbgOverTimeove_Date.Field.FocusControl;
        Abort;
      end;  DecodeDate(tblOverTime.FieldByName('ove_Date').AsDateTime,vSeg_Year,vSeg_Month,vSeg_Day);
      tblOverTime.FieldByName('ove_Year').AsInteger        := vSeg_Year;
      tblOverTime.FieldByName('ove_Month').AsInteger       := vSeg_Month;  stpCheckRepeatmonth.ParamByName('@pg_mon_WorkNO').AsString  :=
      tblOverTime.FieldByName('ove_WorkNo').AsString;
      stpCheckRepeatmonth.ParamByName('@pg_mon_Year').AsInteger   := vSeg_Year;
      stpCheckRepeatmonth.ParamByName('@pg_mon_month').AsInteger  := vSeg_Month;
      stpCheckRepeatmonth.ParamByName('@Ficount').AsInteger       := 0;
      stpCheckRepeatmonth.Prepare;
      stpCheckRepeatmonth.ExecProc;
      if (stpCheckRepeatmonth.ParamByName('@Ficount').AsInteger > 0) and (vg_UserName<>'AD1M') then
      begin
        ShowMessage('月考勤已锁');
        vSeg_Component := Application.FindComponent('frmWaitMessage');
        if  vSeg_Component <> nil then
        vSeg_Component.Free;
        Abort;
      end
      else begin
        if tblOverTime.FieldByName('ove_OverTimeType').AsString <> 'z' then
        begin
          {if dbcldep_Department.Text <> '制模部' and dbcldep_Department.Text <> '开发部' and dbcldep_Department.Text <> '市场部' then
          begin
            tblOverTime.FieldByName('ove_OverTimeType').AsString := '平时';
            if Pos(tblOverTime.FieldByName('workgroup').AsString,'塑一 塑二 塑三') > 0 then
            begin
              if tblOverTime.FieldByName('workgroup').AsString = '塑一'  then
              begin
                if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 2 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周六';
                if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 3 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周日';
              end;
              if tblOverTime.FieldByName('workgroup').AsString = '塑二'  then
              begin
                if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 4 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周六';
                if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 5 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周日';
              end;
              if tblOverTime.FieldByName('workgroup').AsString = '塑三'  then
              begin
                if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 6 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周六';
                if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 7 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周日';
              end;
            end
            else begin
              if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 7 then
                tblOverTime.FieldByName('ove_OverTimeType').AsString := '周六';
              if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = 1 then
              tblOverTime.FieldByName('ove_OverTimeType').AsString := '周日';
            end;
            if chkSWeek.Checked then
            begin
              tblOverTime.FieldByName('ove_OverTimeType').AsString := '平时';
              vSeg_WeekSta := cbWeek.Text;
              vSeg_WeekSun := cdeWeek.Text;
              if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = GetWeekSerial(vSeg_WeekSta) then
                 tblOverTime.FieldByName('ove_OverTimeType').AsString := '周六';
              if DayofWeek(tblOverTime.FieldByName('ove_Date').AsDateTime) = GetWeekSerial(vSeg_WeekSun) then
                 tblOverTime.FieldByName('ove_OverTimeType').AsString := '周日';
            end;
            if stpgetHoliday.Active then
               stpgetHoliday.Active := False;
            stpgetHoliday.ParamByName('@pg_Date').AsDateTime :=
            tblOverTime.FieldByName('ove_Date').AsDateTime;
            stpgetHoliday.Prepare;
            stpgetHoliday.ExecProc;
            if not stpgetHoliday.Active then
               stpgetHoliday.Active := True;
            if stpgetHoliday.RecordCount > 0 then
              tblOverTime.FieldByName('ove_OverTimeType').AsString := '假日';
          end
          else} begin
            tblOverTime.FieldByName('ove_OverTimeType').AsString := '平时';
            if stpgetHoliday.Active then
               stpgetHoliday.Active := False;
            stpgetHoliday.ParamByName('@pg_Date').AsDateTime :=
            tblOverTime.FieldByName('ove_Date').AsDateTime;
            stpgetHoliday.Prepare;
            stpgetHoliday.ExecProc;
            if not stpgetHoliday.Active then
               stpgetHoliday.Active := True;
            if stpgetHoliday.RecordCount > 0 then
              tblOverTime.FieldByName('ove_OverTimeType').AsString := '假日';
          end;
        end
        else begin
          if Pos(tblOverTime.FieldByName('ove_OverTimeType').AsString ,'平时,假日,周六,周日') = 0 then
          begin
            ShowMessage('输入加班类型不下确');
            dbgOverTimeove_OverTimeType.Field.FocusControl;
            Abort;
          end;
        end;
      end;
    end;
      

  14.   

    和源码是没有什么关系的。delphi会在seaching path,lib path,browsing path中搜索源文件,看看上面这些目录中有没有pas或dcu和工程中的文件的同名文件
      

  15.   

    更有甚者,{}中加了一句ShowMessage,
    靠!它竟然不执行。我把这个按妞事件也全删除了,写了一个showmessage,设置了断点测试了一下,
    结果根本没有执行这个语句,从结果看还是执行的原来程序。 那它执行的是那里的代码,难倒闹鬼了。
      

  16.   

    你的这段代码好长,不过应该不是代码的问题。
    其他的Pas有没有问题?
    如果其他Pas没有问题就是这个Pas的问题,否则就可能是你操作系统或者Delphi的问题。如果只是这个Pas有问题,那么把这个pas从工程里面移掉。
    重新做一个。Pas名称,窗体名称不要太简单,最好是唯一的。这样可能2、3个小时能解决问题,也好过胡乱猜测了。
      

  17.   

    多谢各位!找到原因了,程序调用的是bpl文件,所以对form的修改不起作用。
    现在新的问题又来了,直接编译此bpl文件不能通过。在下对bpl以前没用过,
    望各位继续帮助。  
    错误提示如下:
    [Error] OverTurnDoWith.pas(360): Statement expected but 'PROCEDURE' found
    [Hint] OverTurnDoWith.pas(131): Private symbol 'GetWeekSerial' declared but never used
    [Fatal Error] pkgOverTurnDoWith.dpk(48): Could not compile used unit '..\Form\OverTurnDoWith.pas'