0

我对 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');
4

2 回答 2

2

错误发生在这一行:

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

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

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

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

所以,最有可能的结论是要么无效,FormTiedot要么FormTiedot.EditNimi无效。也许你没有实例化FormTiedot

于 2013-12-31T14:46:48.837 回答
0

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

验证 TClientModule1 是否首先出现在自动创建表单中。

于 2017-09-07T03:34:43.873 回答