问题一、我是N久前才碰到的,当时觉得奇怪,但是由于急着赶工,就放过了我在一个过程中定义了一个变量
var
   i : Integer;(做调试用的,当时数据库有一条异常记录,我想在发生错误的时候查看这个变量的值)但是在这样一句语句居然不编译,也没有任何提示与错误信息
i := 0;
i := i+1;也就是没有出现能够被执行的蓝色小点,我只能改成如下:i : Real;
i := 0.0;
i := i + 0.1;
才能执行问题二:我在对一个TStringGrid的对象进行换行的时候类似如下语句 GrdData.Row := GrdData.Row + 1;在单步执行中,查看+1前和+1后GrdData中Row的值,没有任何变化,只想问一句,大家有没有碰到过这样的问题?唉,现在苦啊,在维护一个几十万行的程序,天天就是测试、改动、扩充。

解决方案 »

  1.   

    i := 0;
    i := i+1;这种 不编译很正常 因为你后面没用到它呀
    如果你加上 ShowMessage(IntToStr(i)); 编译器看到这个i还有别用 那么就会对齐处理
    所以说delphi的编译器还是很强的 你把其优化去掉试试应该也可以GrdData.Row := GrdData.Row + 1;
    这个当然是会变的 你不要单步跟踪 用 两次ShowMessage 一次修改前的 一次修改后的。
      

  2.   

    一、
    关于第一个问题i := i+1我是放在 While Not Query.Eof do中的, 也就是在Query.Next后,我执行一次 i := i+1;然后将 I的值插入到一个文本文件中,如果异常我就查看是到了哪条记录,然后再查看记录有什么不妥。
    也就是我是使用了i的,不会这样也将它优化掉吧二、确确实实没变的,因为我要对单据输完一行后换行,所以发现这个问题,用ShowMessage前后显示出来仍然为1:-(纳闷Ing,
      

  3.   

    并且如果整数被优化掉,那为啥我用Real却不会被优化
      

  4.   

    1.real也一样被优化掉,你用个最简单的程序看一下
      

  5.   

    编译没编译,变化没变化,Showmessage不就出来了吗,至于吗.我新手,看不懂!
      

  6.   

    To jinjazz谢谢你关注并解答.PS: 阁下似乎太过敏感
      

  7.   

    哈哈优化 有相应的设置等级,开关 之类的。。二、确确实实没变的,因为我要对单据输完一行后换行,所以发现这个问题,用ShowMessage前后显示出来仍然为1:-(纳闷Ing,
    // 你用的是什么控件?? 是DELPHI自带的么
      

  8.   

    我的确没有碰到过啊,而且表笑,stringgrid几乎没用过-_-!!
      

  9.   

    看了看stringgrid的源代码,Row:=Row+1,执行时会执行click方法.
    如果不是越界的话,检查一下click方法的代码.另外,属性值赋值有条件的,不一定都能赋成功.