Исключение ошибки сегментирования приложения 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 является первым в формах автоматического создания.

Другие вопросы по тегам