Исключение ошибки сегментирования приложения Android delphi (11) при вызове Firedac
У меня проблема с приложением Delphi XE5 Firedac. Я использую телефон ZTE Blade 3 для запуска приложения. Я использовал менеджер развертывания, чтобы добавить файл базы данных в каталог 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 ответа
Ошибка возникает в этой строке:
FormTiedot.EditNimi.Text := FDQuery1.FieldByName('Nimi').AsString;
Ошибка сегментации означает, что вы ссылаетесь на неверную память. Таким образом, это может возникнуть по крайней мере по одной из следующих причин:
FormTiedot
является недействительным.FormTiedot.EditNimi
является недействительным.FDQuery1
является недействительным.FDQuery1.FieldByName('Nimi')
возвращаетсяnil
,
Теперь, насколько я знаю, FieldByName()
вызывает исключение, чтобы указать сбой, а не возвращение nil
, А также FDQuery1
безусловно, действителен, иначе более ранний код потерпел бы неудачу.
Итак, наиболее вероятный вывод заключается в том, что либо FormTiedot
или же FormTiedot.EditNimi
являются недействительными Возможно, вам не удалось создать экземпляр FormTiedot
?
Мне удалось решить (я скомпилировал и выдает ошибку в функции function "TClientModule1.GetServerMethods1Client: TServerMethods1Client;" при доступе к классу FServerMethods1Client... Перейти в меню:Project -> Options -> Forms;
Убедитесь, что TClientModule1 является первым в формах автоматического создания.