Delphi中调试程序时,怎么连注释掉的语句也能运行?

kingwanggs 2005-10-27 03:59:49
从来没遇到过这种情况,单步调试时能进入{......}中执行语句。大惑不解,请高人指点。
...全文
316 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingwanggs 2005-10-31
  • 打赏
  • 举报
回复
多谢各位!

找到原因了,程序调用的是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'
kingwanggs 2005-10-31
  • 打赏
  • 举报
回复
问题解决了,感谢各位。
mastersky 2005-10-29
  • 打赏
  • 举报
回复
你的这段代码好长,不过应该不是代码的问题。
其他的Pas有没有问题?
如果其他Pas没有问题就是这个Pas的问题,否则就可能是你操作系统或者Delphi的问题。

如果只是这个Pas有问题,那么把这个pas从工程里面移掉。
重新做一个。Pas名称,窗体名称不要太简单,最好是唯一的。这样可能2、3个小时能解决问题,也好过胡乱猜测了。
kingwanggs 2005-10-29
  • 打赏
  • 举报
回复
更有甚者,{}中加了一句ShowMessage,
靠!它竟然不执行。

我把这个按妞事件也全删除了,写了一个showmessage,设置了断点测试了一下,
结果根本没有执行这个语句,从结果看还是执行的原来程序。

那它执行的是那里的代码,难倒闹鬼了。
kingwanggs 2005-10-28
  • 打赏
  • 举报
回复
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;

lijinghe1 2005-10-28
  • 打赏
  • 举报
回复
我把除了.dfm和.pas以外的文件删了,故障依旧。
使用Compile All Projects编译,故障依旧。
其它路径下的所有同名文件删了,故障依旧。
build all projects ,故障依旧。
绝望中!

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

再按浪说的方法试试,不行,重新把所有代码重写一。。。。。呵呵
mastersky 2005-10-28
  • 打赏
  • 举报
回复
你出错的那个Pas中的所有代码。
mastersky 2005-10-28
  • 打赏
  • 举报
回复
没有你说的那种情况。代码都是目前正在使用的。
我现在只是在上面做修改。

你有没有把你的代码复制到记事本中看看?
china618 2005-10-28
  • 打赏
  • 举报
回复
LZ什么都删了还不行啊
还有最后一招,把Delphi也删了
。。。再重装试试
kingwanggs 2005-10-28
  • 打赏
  • 举报
回复
我把除了.dfm和.pas以外的文件删了,故障依旧。
使用Compile All Projects编译,故障依旧。
其它路径下的所有同名文件删了,故障依旧。
build all projects ,故障依旧。
绝望中!
ffwin 2005-10-28
  • 打赏
  • 举报
回复
是一系统错误,象错觉,build all projects,ok
YFLK 2005-10-28
  • 打赏
  • 举报
回复
遇到过类似情况,但重新编译就解决了。
lijinghe1 2005-10-28
  • 打赏
  • 举报
回复
和源码是没有什么关系的。delphi会在seaching path,lib path,browsing path中搜索源文件,看看上面这些目录中有没有pas或dcu和工程中的文件的同名文件
kingwanggs 2005-10-27
  • 打赏
  • 举报
回复
to: mastersky(浪)
没有你说的那种情况。代码都是目前正在使用的。
我现在只是在上面做修改。
靓风有信 2005-10-27
  • 打赏
  • 举报
回复
你把程序全部关掉,
再重新打开不就行了
mastersky 2005-10-27
  • 打赏
  • 举报
回复
这个问题其实很简单,但是一般不碰到过是不会明白的。
你的代码不是在Delphi下面敲进来的,是从网页上或者写字板或者QQ等工具里拷过来的。
Delphi的回车换行符是#13#10,但是网页和某些工具#13就换行了。Copy进Delphi编辑器的时候,看起来是换行了,但是调试工具不认识。就造成了“错行”的现象。也就是断点所指示的行并不是当前所运行的行。
解决办法:
将你的代码Copy到记事本中,你会看到有问题的地方是一个黑方块而没有换行。删掉那个黑方块,回车一下,处理完了再拷回Delphi里面重新编译就可以了。
kingwanggs 2005-10-27
  • 打赏
  • 举报
回复
换成//也不行。也没有打开另外一个工程,重新打开也一样。
我还把其它地方的同名文件也删除了。也没用。唉!
.Dcu文件能删吗?
SydPink 2005-10-27
  • 打赏
  • 举报
回复
删除该单元对应的 .DCU 文件
hellolongbin 2005-10-27
  • 打赏
  • 举报
回复
依稀记得我也遇到过类似的情况……
把注释的代码删掉或者全部改成//就没事了
加载更多回复(4)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧