D
dirk
Unregistered / Unconfirmed
GUEST, unregistred user!
这两天真衰,昨天的一个帖子被某个版主删了,只是想发表一下心情,不知道为什么!
今天编程,在一个TDataModule里添加了二个字符串常量数组,还压根儿没在程序中使用,
运行测试一下,另一个早就做好的、n久没有碰过的(n>30天)、没有错误的、毫不相干的
模块居然出错,错误涉及的代码主要是:
function TFrm_set.GetUnit: boolean;
var
i:integer;
begin
Result :=false;
with DM_Power do
begin
SQL:='select TBJH003_001 as [id],TBJH003_002 as [name] from TBJH003';
ADOQ_1.Close;
ADOQ_1.SQL.Clear ;
ADOQ_1.SQL.Add(SQL);
ADOQ_1.Open ;
while not ADOQ_1.Eof do
begin
if FReg.ValueExists(RvUnitx+trim(ADOQ_1.FieldByName('id').AsString)) then
begin
i:=length(SysDW);
setlength(SysDW,i+1);
SysDW.ID :=ADOQ_1.FieldByName('id').AsInteger ;
SysDW.SelectedID :=FReg.ReadInteger(RvUnitx+trim(ADOQ_1.FieldByName('id').AsString)) ;
SysDW.Name :=trim(ADOQ_1.FieldByName('name').AsString) ;//<<--出错行
……
其中SysDW是个动态数组,也在那个TDataModule中定义的,数据库中有值的,setlength,
再赋值,居然出错,错误是写非法地址?????
想来想去,之前只是在那个TDataModule中加了两个常量数组,把那两行注释调,哈哈,好
嘛,Ctrl+F9,就出现了错误:Internal error: L470 ,我晕、我晕、我晕晕晕!是不是
在告诉我,我的程序让编译器出了内部错误啊?我关掉delphi,再打开,Ctrl+F9,还是:
Internal error: L470 !!!不把那两行注释掉,编译一点也不错,但运行出错,注释
掉,编译就出错!!!我想注释掉两行在程序中还从未被使用的两行定义常量数组的语句
都不行,这不是要我死吗?我又把代码拷到其他机器上(纯源码,连res文件都不带),
Internal error: L470 错误是没有再出现了,可前面的错误依旧!(那两行常数定义还
没有注释掉,注释掉即好,加上又错,注释又好……)我的一个上午的时间就耗在这查错
上了,最后,你知道我是怎么解决的吗?我在那个出错的模块中的任意一个空行中敲了一
个空格,再Ctrl+F9,这个模块就重新编译了,生成了新的dcu,一切ok!再把那两行常数
定义加上,也好,倒!
我又反复试验,发现,只要那两行常数在,那个会出错的模块第一编译后生成的exe文件运
行到上面指出的地方100%出错,只要另这个模块重新编译(删除dcu或随便编辑一下源码),
100%ok!这是不是编译器的问题啊?我的程序都是标准控件,只有个第三方控件xlgrid1.7,
程序写法也没有错,会出这种问题,实在没法解释,为什么第一次编译出来的dcu就会出错
(两台机器上都这样)?
再回到自己的机器上,Internal error: L470 错误竟然奇迹般地消失了,另一个错误重新
编译就ok了,但我一个上午的时间就这样过去了!
我用D5。
今天编程,在一个TDataModule里添加了二个字符串常量数组,还压根儿没在程序中使用,
运行测试一下,另一个早就做好的、n久没有碰过的(n>30天)、没有错误的、毫不相干的
模块居然出错,错误涉及的代码主要是:
function TFrm_set.GetUnit: boolean;
var
i:integer;
begin
Result :=false;
with DM_Power do
begin
SQL:='select TBJH003_001 as [id],TBJH003_002 as [name] from TBJH003';
ADOQ_1.Close;
ADOQ_1.SQL.Clear ;
ADOQ_1.SQL.Add(SQL);
ADOQ_1.Open ;
while not ADOQ_1.Eof do
begin
if FReg.ValueExists(RvUnitx+trim(ADOQ_1.FieldByName('id').AsString)) then
begin
i:=length(SysDW);
setlength(SysDW,i+1);
SysDW.ID :=ADOQ_1.FieldByName('id').AsInteger ;
SysDW.SelectedID :=FReg.ReadInteger(RvUnitx+trim(ADOQ_1.FieldByName('id').AsString)) ;
SysDW.Name :=trim(ADOQ_1.FieldByName('name').AsString) ;//<<--出错行
……
其中SysDW是个动态数组,也在那个TDataModule中定义的,数据库中有值的,setlength,
再赋值,居然出错,错误是写非法地址?????
想来想去,之前只是在那个TDataModule中加了两个常量数组,把那两行注释调,哈哈,好
嘛,Ctrl+F9,就出现了错误:Internal error: L470 ,我晕、我晕、我晕晕晕!是不是
在告诉我,我的程序让编译器出了内部错误啊?我关掉delphi,再打开,Ctrl+F9,还是:
Internal error: L470 !!!不把那两行注释掉,编译一点也不错,但运行出错,注释
掉,编译就出错!!!我想注释掉两行在程序中还从未被使用的两行定义常量数组的语句
都不行,这不是要我死吗?我又把代码拷到其他机器上(纯源码,连res文件都不带),
Internal error: L470 错误是没有再出现了,可前面的错误依旧!(那两行常数定义还
没有注释掉,注释掉即好,加上又错,注释又好……)我的一个上午的时间就耗在这查错
上了,最后,你知道我是怎么解决的吗?我在那个出错的模块中的任意一个空行中敲了一
个空格,再Ctrl+F9,这个模块就重新编译了,生成了新的dcu,一切ok!再把那两行常数
定义加上,也好,倒!
我又反复试验,发现,只要那两行常数在,那个会出错的模块第一编译后生成的exe文件运
行到上面指出的地方100%出错,只要另这个模块重新编译(删除dcu或随便编辑一下源码),
100%ok!这是不是编译器的问题啊?我的程序都是标准控件,只有个第三方控件xlgrid1.7,
程序写法也没有错,会出这种问题,实在没法解释,为什么第一次编译出来的dcu就会出错
(两台机器上都这样)?
再回到自己的机器上,Internal error: L470 错误竟然奇迹般地消失了,另一个错误重新
编译就ok了,但我一个上午的时间就这样过去了!
我用D5。