调用Firedac时Android delphi应用程序Segmentation fault(11)异常

时间:2013-12-30 12:53:44

标签: android delphi firedac

我在使用Delphi XE5 Firedac应用程序时遇到问题。我使用中兴Blade 3手机运行应用程序。我使用Deployment Manager将数据库文件添加到assets \ internal目录。但是当我调用FDQuery1.FieldByName('Nimi')。AsString时,它会引发异常分段错误(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');

2 个答案:

答案 0 :(得分:1)

此行发生错误:

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

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

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

现在,据我所知,FieldByName()会引发异常以指示失败,而不是返回nilFDQuery1肯定是有效的,否则早期的代码就会失败。

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

答案 1 :(得分:0)

我能够解决(我编译并且错误在函数函数" TClientModule1.GetServerMethods1Client:TServerMethods1Client;"在访问类FServerMethods1Client时提供... 转到菜单: 项目 - >选项 - >形式;

验证TClientModule1是自动创建表单中的第一个。