qyj628 发表于 2023-8-24 17:54:11

赋值语句不生效,被Delphi跳过

本帖最后由 qyj628 于 2023-8-24 18:36 编辑

class function TFrmRep.REPL(replJson:ISuperObject;Frm:TFrmPoe;fQTY:Integer;fNo:Integer): Boolean;
var
F: TFrmRep;
begin
F := TFrmRep.Create(Application);
try
    F.Frm := Frm;
    F.replJson := replJson;
    if F.ShowModal = mrOK then
    begin
      fQTY:=StrToInt(F.iqty);
      fNo:=StrToInt(F.ichoose);
      Result := True;
    end
    else
    begin
      fQTY:= 0;
      fNo:= 0;
      Result := False;
    end
finally
    FreeAndNil(F);
end;
end;

procedure TFrmRep.FormShow(Sender: TObject);
var
JsonArr: TSuperArray;
I,J:Integer;
bcd:string;
begin
inherited;
if cds.Active then
    cds.EmptyDataSet
else
    cds.CreateDataSet;

if InputEdit.Enabled then
begin
    InputHandle := InputEdit.Handle;
    InputEdit.SetFocus;
end;

    JsonArr:= replJson.AsArray;
    for I:=0 toJsonArr.Length-1 do
    begin
      cds.Append;
      cds.FieldByName('no').Value:= IntToStr(i + 1);
      cds.FieldByName('qty').Value:= JsonArr.S['qty'];
    end;

end;


procedure TFrmRepl.getqty;
var
qtystr: string;
HDRec: THDRec;
b:Boolean;
DisAMT,Yqty:Currency;
index:Integer;
begin
qtystr := InputEdit.Text;
try
    if (qtystr <> '') then
    begin
      index :=cds.FieldByName('no').AsInteger;
      if StrToFloat(qtystr) > 9999999 then raise Exception.Create('商品数量不合理');
      if StrToFloat(qtystr) = 0 then raise Exception.Create('数量不能0');
      if Frm.stype = 1 then   //更改数量
      begin
      with cds do
         begin
         Edit;
         FieldByName('qty').AsString:=qtystr;
         end;
      iqty:= cds.FieldByName('qty').AsInteger;//数量赋值给本页面全局变量
      ichoose:=cds.FieldByName('no').Value;//no同上
      InputEdit.Text:='';
      end;
    end
    else
      raise Exception.Create('操作错误');
except
    on e: Exception do
    begin
      InError := True;
      ErrInfo := e.Message;
      Exit;
    end;
end;
end;两个页面之间传参,f2页面关闭时给参数赋值的语句不生效,Delphi给这个语句打断点时,只要编译断点就变成错号,语句被标为绿色,该怎么解决(代码逻辑:页面1通过 TFrmRep.REPL方法将kson传至页面2,页面2formshow方法解析json展示,getqty获取改动的数量值,赋值给全局变量iqty,关闭页面时判断showmodal=mrok,将页面2的全局变量iqty赋值给TFrmRep.REPL方法中的fqty,烦请看下是哪里写的有问题)

Mike_python小 发表于 2023-8-24 17:54:35

Delphi中赋值语句不生效的解决方案

当在Delphi中赋值语句不生效,可能是由于以下几个原因导致的:

1. 代码逻辑错误:请确保赋值语句位于正确的位置,并且逻辑上可以执行到该语句。检查前面的代码是否存在条件分支、循环或其他可能导致程序跳过赋值语句的结构。

2. 变量作用域问题:请确认被赋值的变量在赋值语句所在的作用域内声明。如果变量的作用域不包括赋值语句所在的代码块,那么赋值将不会生效。

3. 类型兼容性问题:请确保被赋值的变量和赋值语句右侧的表达式类型兼容。如果两者的数据类型不匹配,赋值操作将无法进行。

4. 其他代码问题:检查赋值语句周围的代码,查看是否存在其他可能导致赋值失效的问题,例如异常处理、对象销毁等。确保没有其他代码修改了被赋值的变量的值。

5. 编译器或调试器问题:在某些情况下,Delphi编译器或调试器可能会出现问题,导致代码无法正常执行。尝试重新编译、重启IDE或使用其他调试工具进行调试,以解决可能的编译器或调试器问题。

总结:根据以上可能的原因,逐一检查代码并进行排查。如果问题仍然存在,请提供更多相关代码和错误信息,以便进一步帮助你解决问题。

希望这些信息对你有所帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-8-24 17:54:38

这个问题可能是由于代码的逻辑错误或者语法错误导致的。以下是一些可能的解决方法:

1. 检查代码逻辑:确保赋值语句在正确的位置和正确的条件下执行。检查代码中是否有条件语句或循环,可能导致赋值语句被跳过。

2. 检查语法错误:确保赋值语句的语法是正确的。例如,检查变量名称是否正确拼写、检查是否缺少分号等。

3. 检查变量作用域:确保赋值语句中使用的变量在当前作用域内是可见的。如果变量是在其他地方声明的,可能需要将其声明在正确的位置。

4. 检查异常处理:如果赋值语句可能会引发异常,确保代码中有适当的异常处理机制,以防止异常导致赋值语句被跳过。

如果以上方法都没有解决问题,我建议您提供更多的代码细节和错误信息,以便更好地理解问题并提供更具体的解决方案。

陶远航 发表于 2023-8-24 17:54:49

出现编译错误并且断点变为错号的情况可能有多种原因。下面是一些可能导致这个问题的原因和解决方法:

1. 语法错误:请确保赋值语句的语法是正确的,没有拼写错误或者其他语法错误。仔细检查赋值语句的语法,并确认所有变量和参数都已经正确声明。

2. 代码执行路径不符合预期:检查一下调试过程中代码的执行路径是否符合预期。确保在关闭 f2 页面时能够执行到给参数赋值的语句。如果没有执行到该语句,可能需要检查代码逻辑或者事件触发的条件。

3. 调试环境配置问题:有时候 Delphi 的调试环境配置会出现问题,导致断点无法正常工作。可以尝试重新设置调试环境配置,包括清除编译生成的文件、重新编译项目等。

4. 优化选项导致的问题:对于某些版本的 Delphi,默认情况下可能启用了优化选项,可能导致代码被优化掉或者顺序改变。可以尝试禁用优化选项,看是否能够解决问题。

5. 其他外部因素:如果以上方法都无效,可能需要考虑其他外部因素,例如代码库或者 Delphi 版本的问题。可以尝试更新 Delphi 版本或者使用其他方法进行跟踪调试(例如输出日志信息)。

如果问题仍然存在,建议提供更多的代码示例和详细的错误信息,以便更好地帮助你解决问题。
如果问题已经解决,请设置最佳答案

ba21 发表于 2023-8-24 19:34:45

代码中不能用颜色,改改再问吧。

琅琊王朝 发表于 2023-8-25 10:19:14

由于我只能处理简短的代码片段而非完整的Delphi项目,所以无法提供完全准确的解决方案。但是,我可以给出一些常见的可能导致您描述的问题的原因和解决方法:

1. 考虑检查变量名称是否正确匹配:确保在页面1和页面2之间传递的变量名称相匹配。可能存在拼写错误或大小写不匹配的情况。

2. 确保页面2的FormShow方法被正确触发:检查页面2的FormShow方法是否正确地触发,以确保你的参数赋值语句在正确的时机执行。

3. 检查调用showmodal方法的代码:确保在关闭页面2时使用的方法是showmodal,并且检查返回值是否正确判断为mrok。这样才能触发赋值操作。

4. 检查赋值的语法和顺序:确保你在关闭页面2之前正确地执行了赋值操作。可能需要先将当前页面2的全局变量iqty赋值给fqty,然后再关闭页面。

5. 考虑使用debugger工具进行调试:尝试使用Delphi的调试器来逐步跟踪代码并查看变量的值。这样可以更好地了解在哪个环节发生了错误。

最后,如果以上方法没有解决问题,建议提供更多的相关代码片段和更具体的报错信息,以便我能够更准确地帮助你。

liuhongrun2022 发表于 2023-8-25 10:40:06

根据您提供的信息,问题可能是由于编译时出现错误导致的。编译错误可能会导致断点无法正确设置,代码语句被标为绿色,并且无法正常执行。

首先,建议您检查页面2关闭时给参数赋值的语句是否正确,在确认语法和逻辑上没有问题后,尝试解决编译错误。

以下是一些可能导致编译错误的常见原因和解决方法:

1. 语法错误:确保赋值语句的语法正确,变量名称拼写正确,引用的对象存在等。

2. 类型不匹配:检查赋值语句的左右两侧的数据类型是否匹配。如果类型不匹配,可以使用类型转换来解决。

3. 缺少引用或单元:如果在页面2中使用了页面1定义的类型或变量,需要确保在页面2的uses子句中包含页面1所在的单元。

4. 其他编译错误:检查编译器输出窗口中的错误信息,尝试根据错误信息进行排除。

如果尝试解决编译错误后仍然遇到问题,建议您提供更具体的代码和错误信息,以便我能够更好地帮助您找到问题的根本原因并给出解决方案。此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!

琅琊王朝 发表于 2023-8-25 11:29:18

根据你的描述,问题可能出现在以下几个方面:

1. 编译错误:当你给某行代码设置了断点后,编译时出现错误并且该行代码被标记为绿色。这可能是由于语法错误或其他编译问题导致的。请检查该行代码是否存在语法错误,并确保代码的上下文环境正确。

2. 变量作用域:确保你使用的全局变量 `iqty` 在页面2中正确声明,并且可以在页面1中进行访问和赋值。如果该变量的作用域范围未正确设置,可能导致无法正确传递参数值。

3. 代码执行顺序:确保在页面2关闭时将参数值赋给全局变量 `iqty` 的代码在正确的位置执行。例如,在页面2的关闭事件中执行此赋值操作,而不是在 `FormShow` 方法中。

4. 调试方法:如果你遇到断点无法正常工作的情况,可以尝试以下方法:
   - 清除项目并重新构建:在 Delphi 中,选择“Project”菜单下的“Clean Project”选项,然后重新构建项目。
   - 检查断点设置:确保断点正确设置在期望的行上,并查看是否有其他条件限制了断点的触发。
   - 尝试使用日志输出:在需要调试的代码行附近添加日志输出语句,将相关变量的值输出到日志中,以便进行进一步的调试。

如果仍然无法解决问题,请尝试提供更详细的代码片段和错误信息,这样我才能更准确地帮助你分析和解决问题。

希望这些提示对你有所帮助!如果你还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!

琅琊王朝 发表于 2023-8-25 11:35:50

根据你的描述,可能有几个原因导致页面2关闭时给参数赋值的语句不生效,并且打断点时出现错误标志和绿色显示。以下是一些可能的原因和解决方法:

1. 编译错误:绿色显示和错误标志通常表示代码存在语法错误或其他编译问题。请检查该语句周围的代码是否存在语法错误,并确保代码的上下文环境正确。

2. 变量作用域:确保你在页面2中正确声明了全局变量 `iqty`,并且可以在页面1进行访问和赋值。如果该变量的作用域范围未正确设置,可能导致无法正确传递参数值。另外,确保给全局变量 `iqty` 赋值的语句在正确的位置执行。

3. 程序流程控制:请确保在页面2关闭时判断 `ShowModal = mrOk` 的条件成立,从而进入相应的赋值语句块。如果条件不满足,那么赋值语句将不会执行。

4. 调试方法:
   - 清除项目并重新构建:在 Delphi 中,选择“Project”菜单下的“Clean Project”选项,然后重新构建项目。
   - 检查断点设置:确保断点正确设置在期望的行上,并查看是否有其他条件限制了断点的触发。
   - 使用日志输出:在需要调试的代码行附近添加日志输出语句,将相关变量的值输出到日志中,以便进行进一步的调试。

如果这些方法都无法解决问题,请尝试提供更详细的代码片段和错误信息,这样我才能更准确地帮助你分析和解决问题。

希望这些提示对你有所帮助!如果你还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!

琅琊王朝 发表于 2023-8-25 12:20:12

根据你的描述,可能有几个原因导致页面2关闭时给参数赋值的语句不生效,并且在Delphi中打断点时出现错误标志和绿色显示。以下是一些可能的原因和解决方法:

1. 编译错误:绿色显示和错误标志通常表示代码存在语法错误或其他编译问题。请检查该语句周围的代码是否存在语法错误,并确保代码的上下文环境正确。

2. 作用域问题:确保你在页面2中正确声明了全局变量 `iqty`,并且可以在页面1进行访问和赋值。如果该变量的作用域范围未设置正确,可能导致无法正确传递参数值。另外,确保给全局变量 `iqty` 赋值的语句在正确的位置执行。

3. 程序流程控制:请确保在页面2关闭时判断 `ShowModal = mrOk` 的条件成立,从而进入相应的赋值语句块。如果条件不满足,那么赋值语句将不会执行。

4. 设置断点方式:在Delphi中,断点的设置可以通过鼠标点击行号,在需要设置断点的代码行上单击即可。如果使用快捷键设置断点,确保光标位于正确的行上。另外,检查是否有其他条件限制了断点的触发。

5. 调试方法:
   - 清除项目并重新构建:在Delphi中选择“Project”菜单下的“Clean Project”选项,然后重新构建项目。
   - 检查断点设置:确保断点正确设置在期望的行上,并查看是否有其他条件限制了断点的触发。
   - 使用日志输出:在需要调试的代码行附近添加日志输出语句,将相关变量的值输出到日志中,以便进行进一步的调试。

如果这些方法都无法解决问题,请提供更详细的代码片段和错误信息,这样我才能更准确地帮助你分析和解决问题。

希望这些提示对你有所帮助!如果你还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!

琅琊王朝 发表于 2023-8-25 15:12:06

根据你的描述,出现断点变成错号且语句标为绿色的情况可能是由于以下原因:

1. 编译器错误:如果断点所在的行出现了语法错误或其他编译问题,编译器可能无法正确识别该行代码,导致断点变成错号。请确保断点所在的语句没有语法错误。

2. 优化选项:在调试模式下,编译器可能会对代码进行优化,从而导致断点位置被修改。这可能会导致断点失效或代码执行顺序发生变化。可以尝试关闭编译器的优化选项,以便更精确地调试代码。

解决这个问题的方法有以下几种:

1. 确保代码正确:检查断点所在的语句是否存在语法错误,并修复任何报错的部分。

2. 关闭优化选项:在 Delphi 的编译选项中,找到并关闭与代码优化相关的选项。这样可以避免编译器对代码进行优化,确保断点位置与实际代码一致。

3. 使用调试日志:在需要调试的代码行附近添加日志输出语句,将相关变量的值输出到日志中,以便进行进一步的调试。通过检查日志输出,可以观察代码的执行流程并确保变量的值在预期范围内。

4. 使用调试工具:除了 Delphi 自带的调试功能外,还可以考虑使用其他调试工具来定位问题。例如,可以尝试使用第三方调试器或代码分析工具来提供更准确的调试信息和功能,以解决断点问题。

请注意,由于我无法直接查看你的代码和运行环境,以上建议仅作为一般性指导。具体解决方法可能因实际情况而异。如果问题持续存在,建议咨询相关Delphi社区或专业技术支持,以获取更准确和针对性的帮助。

希望这些提示对你有所帮助!如果还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!

小甲鱼的二师兄 发表于 2023-11-28 06:03:39

ba21 发表于 2023-8-24 19:34
代码中不能用颜色,改改再问吧。

这个你也会?{:10_257:}

ba21 发表于 2023-11-28 20:06:19

小甲鱼的二师兄 发表于 2023-11-28 06:03
这个你也会?

编程不都大同小异
页: [1]
查看完整版本: 赋值语句不生效,被Delphi跳过