编译器错误E2029'。'预期,但';'发现

时间:2013-12-31 13:07:54

标签: android delphi showmodaldialog

我收到编译错误“[DCC错误] FormMain.pas(78):E2029'。'预期,但';'发现“但我无法确定问题出在哪里,因为我直接从http://blog.marcocantu.com/blog/xe5_anonymous_showmodal_android.html复制了这个问题 我使用这种代码:

procedure TForm1.ButtonMuutaClick(Sender: TObject);
var FormTiedot :TFormTiedot;
begin
FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('SELECT * FROM Laskuttaja WHERE ID=:ID');
FDQuery1.ParamByName('ID').AsString := '1';
FDQuery1.Open();
  FDQuery1.First;
  FormTiedot := TFormTiedot.Create(nil);
  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;
  FormTiedot.ShowModal(procedure(ModalResult: TModalResult) begin if ModalResult = mrOK then begin
      // if OK was pressed and an item is selected, pick it
        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');
        FDQuery1.ExecSQL;

      end;
      FormTiedot.DisposeOf;
    end);
    //FormTiedot.DisposeOf;
  //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');

    //FDQuery1.ParamByName('Nimi').Value := FormTiedot.EditNimi.Text;
    //FDQuery1.ParamByName('Osoite').Value := FormTiedot.EditOsoite.Text;
    //Error Y-tunnus not found here
    //FDQuery1.ParamByName('Ytunnus').Value := FormTiedot.Edit1.Text;

  end;
end;

1 个答案:

答案 0 :(得分:8)

代码中有一个迷路end。 penulatimate end与方法的begin匹配。应删除最后一个。

如果您查看已注释掉的代码,则注释掉begin,但未能对匹配的end进行注释。

  //if FormTiedot.ShowModal = mrOk then begin   !! commented out 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');

    //FDQuery1.ParamByName('Nimi').Value := FormTiedot.EditNimi.Text;
    //FDQuery1.ParamByName('Osoite').Value := FormTiedot.EditOsoite.Text;
    //Error Y-tunnus not found here
    //FDQuery1.ParamByName('Ytunnus').Value := FormTiedot.Edit1.Text;

  end;  !! and the matching end is not commented !!

你说“我直接从中复制了”这有点奇怪,实际上这里的代码与你链接的代码几乎没有明显的关系。显然你没有直接复制它 - 你必须注意到你编辑了它,评论了部分等等。

代码的不良缩进使您很难检测到错误。您始终可以要求IDE格式化您的代码,它将修复您的缩进。这很好地说明了为什么仔细布局代码很重要。