Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#30

Re: Exception richtig behandeln

  Alt 8. Jan 2010, 14:46
Zitat von sx2008:
Folgender Code hat gleich drei Fehler:
Ich habe das mal geändert. Wäre das jetzt so OK. Hier jetzt mal mit den Funktionen "SendMail()" und "SaveHTML()"...
Delphi-Quellcode:
{HTML-Datei für MB-Serie erstellen}
procedure THTMLExportForm.HTMLErzeugenMBSerie;
Var
  slHTML : TStringList;
  i : integer;
  mrResult: Integer;
  FileName : String;
begin
  try
    try
      slHTML := TStringList.Create;

      slHTML.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"');
      slHTML.Add('<html>');

      slHTML.Add('<head>');
      slHTML.Add('<link rel="stylesheet" type="text/css" href="MB.css"');
      slHTML.Add('<Style type="text/css"></style>');
      slHTML.Add('<title>Protokolldatei</title>');
      slHTML.Add('</head>');

      slHTML.Add('<body>');
      slHTML.Add('<img src= ".\Kopf1.bmp" width= "900" height= "150" align= "rigth" alt= "Titel" >');
      slHTML.Add('<h1 style="color:#FFFFFF; background-color:#000080; align= "right">Firma hartmann & uebach Nachrichtentechnik GmbH</h1>');
      slHTML.Add('<h1 style="color:#000080;">Objekt: '
                 +QryVorgabe.FieldByName('KUNDEOBJEKT').AsString+'</h1>');
      slHTML.Add('<table border="0" style="border-collapse:separate;"'+
                 'width="100%" style="'+
                 'border-left:5px solid #000080;border-right:5px solid #000080;'+
                 'border-top:5px solid #000080;border-bottom:5px solid #000080;>');
      slHTML.Add('<tr>');
      slHTML.Add('<th align="left">Protokolldatei vom '+DateTimeToStr(Now)+'</th>');
      slHTML.Add('<th align="left">ID</th>');
      slHTML.Add('<th align="left">LfdNr</th>');
      slHTML.Add('<th align="left">Datum</th>');
      slHTML.Add('<th align="left">Uhrzeit</th>');
      slHTML.Add('<th align="left">Ereignis</th>');
      slHTML.Add('<th align="left">Teilnehmer</th>');
      slHTML.Add('<th align="left">Bereich</th>');
      slHTML.Add('<tr>');
      for i := 0 to QryHTML.RecordCount -1 do
        begin
          slHTML.Add('<tr class="' + QryHTML.FieldByName('Ereignis').AsString + '">');
          slHTML.Add('<td>');
          slHTML.Add(IntToStr(QryHTML.FieldByName('ID').AsInteger));
          slHTML.Add('</td>');
          slHTML.Add('<td>');
          slHTML.Add(IntToStr(QryHTML.FieldByName('LfdNr').AsInteger));
          slHTML.Add('</td>');
          slHTML.Add('<td>');
          slHTML.Add(DateToStr(QryHTML.FieldByName('Datum').AsDateTime));
          slHTML.Add('</td>');
          slHTML.Add('<td>');
          slHTML.Add(TimeToStr(QryHTML.FieldByName('Uhrzeit').AsDateTime));
          slHTML.Add('</td>');
          slHTML.Add('<td>');
          slHTML.Add(QryHTML.FieldByName('Ereignis').AsString);
          slHTML.Add('</td>');
          slHTML.Add('<td>');
          slHTML.Add(QryHTML.FieldByName('Teilnehmer').AsString);
          slHTML.Add('</td>');
          slHTML.Add('<td>');
          slHTML.Add(QryHTML.FieldByName('Bereich').AsString);
          slHTML.Add('</td>');
          slHTML.Add('</tr>');
          QryHTML.Next;
        end;
      slHTML.Add('</table>');
      slHTML.Add('</body>');
      slHTML.Add('</html>');
    except
      on e : Exception do begin
        TForm1.Servicememo.Lines.Add(e.Message);
      raise;
      end;
    end;

    try
      FileName := SaveHTML(slHTML);
    except
      on e : Exception do begin
        e.Message := 'Datei konnte nicht gespeichert werden'#13#10+e.Message;
      raise;
      end;
    end;

    try
      if AnzeigenCheckBox.Checked then
        ShellExecute(Application.Handle, 'open', PAnsiChar(FileName), nil, nil, SW_ShowNormal);
    except
      on e : Exception do begin
        e.Message := 'Datei konnte nicht geöffnet werden'#13#10+e.Message;
      raise;
      end;
    end;

    try
      if VersendenCheckBox.Checked then
        SendMail(FileName);
    except
      on e : Exception do begin
        e.Message := 'Datei konnte nicht als E-Mail versendet werden'#13#10+e.Message;
      raise;
      end;
    end;

    try
      if DruckenCheckBox.Checked then
        ShellExecute(handle, 'print', PAnsiChar(FileName), '', '', SW_HIDE);
    except
      on e : Exception do begin
        e.Message := 'Datei konnte nicht gedruckt werden'#13#10+e.Message;
      raise;
      end;
    end;

  finally
    slHTML.Free;
  end;
end;

{HTML in Datei speichern}
function THTMLExportForm.SaveHTML(HTMLFile : TStringlist):string;
begin
  if SaveDialog1.Execute then
    HTMLFile.SaveToFile(SaveDialog1.FileName);
    Result := SaveDialog1.FileName;
end;

{HTML-Datei als E-Mail versenden}
procedure THTMLExportForm.SendMail(HTMLFileName : String);
var
  Attachment : TStringList;
  i : integer;
begin
  try
    QryVorgabe.Close;
    QryVorgabe.SQL.Text := 'SELECT * FROM VORGABE';
    QryVorgabe.Open;
  except
    on e : Exception do
      begin
        e.Message := 'Datenbank konnte nicht geöffnet werden'#13#10+e.Message;
      raise;
    end;
  end;

  try
    Attachment := TStringList.Create;
    Attachment.Add(HTMLFileName);
    Attachment.Add('.\Kopf1.bmp');
      with mesgMessage do begin
        Clear;
        From.Text := QryVorgabe.FieldByName('EIGENE_E_MAIL').AsString;
        Recipients.Add.Text := AnEMailEdit.Text;
        Subject := BetreffEdit.Text;
        Body.Assign(EMailMemo.Lines);
          if FileExists(HTMLFileName) then
            begin
              if assigned(Attachment) then
                for i := 0 to Attachment.Count - 1 do
                  TIdAttachmentFile.Create(MessageParts, Attachment.Strings[i]);
            end
      end;

      with smtpSendMail do begin
        Username := QryVorgabe.FieldByName('BENUTZERNAME_E_MAIL').AsString;
        Password := QryVorgabe.FieldByName('PASSWORT_E_MAIL').AsString;
        Host := QryVorgabe.FieldByName('SMTP_SERVER').AsString;
        Connect;
      try
        Send(mesgMessage);
      finally
        Disconnect;
      end;
    end;
    showmessage('Mail wurde erfolgreich an folgende Adressen versendet.'+sLineBreak+sLineBreak+
                    'An: '+AnEMailEdit.Text);
  finally
    Attachment.Free;
  end;
  QryVorgabe.Close;
end;
Kann ich dann eigendlcih auch einfach einen try..except Block für die gesamten Anweisung nehmen und das ganze dann so machen...

Delphi-Quellcode:
{HTML-Datei für MB-Serie erstellen}
procedure THTMLExportForm.HTMLErzeugenMBSerie;
Var
  slHTML : TStringList;
  i : integer;
  mrResult: Integer;
  FileName : String;
begin
  try
    try
      slHTML := TStringList.Create;

      slHTML.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"');
      slHTML.Add('<html>');
      ....
      ....
      if VersendenCheckBox.Checked then
        SendMail(FileName);
      ....
      ....
      if DruckenCheckBox.Checked then
        ShellExecute(handle, 'print', PAnsiChar(FileName), '', '', SW_HIDE);
    except
      on e : Exception do begin
        Memo1.Lines.Add := 'Fehler beim erstellen der Datei';
        Memo1.Lines.Add := 'Fehler aufgetreten: '+e.Message;
      if FehlerCheckBox.Cheched then
        raise; //Wenn CheckBox Fehleranzeigen aktiv, wird der Fehler angezeigt, ansonsten nur Eintrag im Memo
      end;
    end;

  finally
    slHTML.Free;
  end;
end;
Das müsste doch so auch gehen...

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat