德尔福。我甚至无法分配整数变量

时间:2017-03-17 15:07:43

标签: delphi

使用RAD Studio XE5。我在现有函数中添加了一个名为strand_pattern_length的整数变量:

function TDBManager.GetStrandVars(No_of_Strands, No_of_StrandLayers: integer;
                                  StrandPts: TRealPtRecAry; DB_its_a_Strand: TBoolAry;
                                  ProfileIDStr: string): TStrandVars;
var
  StrandVars: TStrandVars;
  i, j, k, n_l, str_count, colour_count, strand_pattern_length: integer;
  strand_pattern: string;
  Inset_dup, Inset_nodup: TInt_Array;
begin
  ... lots of code

  OpenConnect;

  runQuery('SELECT Strand_Pattern FROM ProfileSummary WHERE ProfileID = ''' + ProfileIDStr + '''', True);

  strand_pattern := _query.FieldByName('Strand_Pattern').AsString;

  CloseConnect;

  strand_pattern_length := 0;

  ShowMessage(IntToStr(Length(strand_pattern)));

  strand_pattern_length := Length(strand_pattern);

  ShowMessage(IntToStr(strand_pattern_length));

  if strand_pattern_length <> No_of_Strands then
    ShowMessage('TDBManager.GetStrandVars : The length of the strand pattern (' + IntToStr(length(strand_pattern)) + ') is different from the number of strands (' + IntToStr(No_of_Strands) + ')');

CloseConnect声明之后的四行是我的。

当我调试此项并将注意放在strand_pattern_length上时,它会显示以下消息:

  

E2003未声明的标识符:'strand_pattern_length'。

断点到达strand_pattern_length:=0行,遍历该行(不指定值),然后跳过ShowMessage语句,长度分配和If语句,然后继续通过功能的其余部分。

我已在项目的其他地方声明了各种变量,甚至在此.pas文件的其他地方也声明了这些变量,并且没有出现问题。

有什么想法吗?

我继承了这个Delphi项目,虽然我是一个非常有经验的程序员,但这是我用了近20年的第一个Delphi代码。但是确定分配integer值不应该这么困难!

1 个答案:

答案 0 :(得分:0)

构建应用程序时,Delphi遵循两个步骤 首先将每个单元(.pas)文件编译成dcu(Delphi编译单元)文件 然后将各种dcu文件链接到单个可执行文件中。

Delphi只会重新编译源(.pas)文件,如果它被标记为脏(因为文件已更改或因为内存中的副本已更改)。
如果它没有检测到.pas文件中的更改,它将改为使用先前编译的DCU。

如果你复制了pas文件并编辑了副本,Delphi只会查看原始文件 您可以使用project manager

查看Delphi使用的文件

enter image description here

展开所有源文件,将鼠标悬停在要检查的源文件上(或右键单击并选择open in explorer)。
记下确切的文件路径,并将其与您正在编辑的文件的确切文件路径进行比较 您可以通过清除编辑器中的文件名选项卡来完成此操作。

enter image description here

如果路径名称不匹配,实际上是编辑错误的源文件 关闭不正确的文件,双击项目管理器中的条目,打开Delphi正在使用的文件。