我在使用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');
答案 0 :(得分:1)
此行发生错误:
FormTiedot.EditNimi.Text := FDQuery1.FieldByName('Nimi').AsString;
分段错误意味着您指的是无效内存。因此,这可能至少出现以下原因之一:
FormTiedot
无效。FormTiedot.EditNimi
无效。FDQuery1
无效。FDQuery1.FieldByName('Nimi')
返回nil
。现在,据我所知,FieldByName()
会引发异常以指示失败,而不是返回nil
。 FDQuery1
肯定是有效的,否则早期的代码就会失败。
因此,最可能的结论是FormTiedot
或FormTiedot.EditNimi
无效。也许您未能实例化FormTiedot
?
答案 1 :(得分:0)
我能够解决(我编译并且错误在函数函数" TClientModule1.GetServerMethods1Client:TServerMethods1Client;"在访问类FServerMethods1Client时提供... 转到菜单: 项目 - >选项 - >形式; 强>
验证TClientModule1是自动创建表单中的第一个。