【问题标题】:Android delphi application Segmentation fault (11) exception when calling FiredacAndroid delphi应用Segmentation fault(11)调用Firedac时出现异常
【发布时间】:2013-12-30 12:53:43
【问题描述】:

我对 Delphi XE5 Firedac 应用程序有疑问。我使用 ZTE Blade 3 手机运行应用程序。我使用部署管理器将数据库文件添加到 assets\internal 目录。但是当我调用 FDQuery1.FieldByName('Nimi').AsString 时,它会引发异常 Segmentation fault (11)。谢谢。

FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('SELECT * FROM Laskuttaja');

FDQuery1.Open();
FDQuery1.First;
while(not FDQuery1.Eof) do begin
FormTiedot.EditNimi.Text := FDQuery1.FieldByName('Nimi').AsString;
FormTiedot.EditOsoite.Text := FDQuery1.FieldByName('Osoite').AsString;
FormTiedot.EditY.Text := FDQuery1.FieldByName('Ytunnus').AsString;
FDQuery1.Next;
end;
if FormTiedot.ShowModal = mrOk then begin
FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('UPDATE Laskuttaja SET Nimi = '+QuotedStr(FormTiedot.EditNimi.Text)+', Osoite = ' + QuotedStr(FormTiedot.EditOsoite.Text) + ', Ytunnus=' + QuotedStr(FormTiedot.EditY.Text));
FDQuery1.SQL.Add('WHERE ID=1');

【问题讨论】:

  • 在问题行设置调试器断点,然后运行您的应用程序。当断点被命中时,检查FormTiedot 看它是否真的有一个值。当您按名称引用表单时,这通常是一个不好的迹象,尤其是当这段代码在该表单的方法中运行时。
  • 是的,谢谢您的帮助。我忘记了 TFormTiedot.Create() 调用。现在还有一个异常问题。异常类 ENotImplemented with message "
  • 您安装了 XE5 Update 2 吗?如果没有,那么你应该安装它。

标签: android delphi firedac


【解决方案1】:

错误发生在这一行:

FormTiedot.EditNimi.Text := FDQuery1.FieldByName('Nimi').AsString;

分段错误意味着您指的是无效内存。因此,这可能至少有以下原因之一:

  • FormTiedot 无效。
  • FormTiedot.EditNimi 无效。
  • FDQuery1 无效。
  • FDQuery1.FieldByName('Nimi') 返回nil

现在,据我所知,FieldByName() 会引发异常以指示失败,而不是返回 nil。并且FDQuery1 肯定是有效的,否则之前的代码会失败。

因此,最可能的结论是FormTiedotFormTiedot.EditNimi 无效。也许你没有实例化FormTiedot

【讨论】:

  • @user3146414:顺便说一句,我只是有点惊讶没有人评论你的 while 循环似乎毫无意义,因为它会将 FormTiedot 编辑文本分配给读入的最后一条记录的字段值循环,无论先前记录中的字段值如何,因此阅读所有前面的记录似乎是浪费时间(除非分配具有您未向我们展示的副作用)。
【解决方案2】:

我能够解决(我编译并且错误在函数function “TClientModule1.GetServerMethods1Client: TServerMethods1Client;”访问FServerMethods1Client类时给出...... 进入菜单: 项目 -> 选项 -> 表单;

验证 TClientModule1 在自动创建表单中是否位于首位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    相关资源
    最近更新 更多