Einzelnen Beitrag anzeigen

H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: ClientDataSet.CreateDataSet + Exception

  Alt 10. Jun 2017, 12:04
Moin...
Ich habe das mal umgeschrieben...
Moin haentschman,
vielen Dank für die ganze Mühe die Du dir gegeben hast !!

Ist der Fehler nun nicht mehr da? Ist auf der Form eine Komponente namens ClientDataSet_OPListe?
Ja - die Komponente ist da - kann sein das ich da nen Namen gelöscht hatte - das Programm startet jetzt aber so wie Du es geschrieben hast. Nur .... es ist viel schlimmer ... es gab wieder einen Exception. Nur dann habe ich eben den kompletten Source auf meine Laptop kopiert ... und da gibt es KEINE Exception.

Ich werde also auf diesem Rechner hier erst einmal einen MemTest machen müssen und dann das RAD-Studio komplett neu installieren. Ein Glück das ich ab Mittwoch im Homeoffice bin und die Ruhe dazu habe

Hans


Korrekturen:
1. globale Variablen in private verlagert
2. prozeduren in private verlagert
3. ein wenig sortiert
Danke - so etwas weiß ich zwar (theoretisch), denke aber immer viel zu selten daran
Unstimmigkeiten:
1. Wo arbeitest du mit dem DataSet? Ist das noch nicht implementiert?
Nein - das Programm ist jetzt ganz neu - alles andere sollte jetzt kommen

2. LetzteFrist: Du liest erst die INI ein. Damit setzt du die LetzteFrist auf den INI Wert (10). Danach setzt du FLetzteFrist := Now + 7; und überschreibst du den letzten Wert.
LACH - stimmt, das hatte ich aus einer Vorgänderversion - EIGENTLICH sollte LetzteFrist einstellbar werden

3. Status "Verarbeitung" wird nicht zurückgesetzt? Soll das so sein?
Nein - auch da kommt noch mehr - das ist ja auch nur die Anzeige auf der Oberfläche was gerade passiert - da kommt noch "Daten einlesen", "Drucken" usw.

Hans

P.S. Weil noch drei kleine Fehler drin waren (FLetzteFristTage fehlte, FormClose noch im Kopf) hier noch einmal der komplette Source - so ist er lauffähig.

Delphi-Quellcode:
unit MahnUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids,
  Datasnap.DBClient, Vcl.StdCtrls, IniFiles, Vcl.ExtCtrls, Printers;

type
  TMahn = class(TForm)
    BtnDrucken: TButton;
    BtnAdresse: TButton;
    BtnMailTausch: TButton;
    DataSource_OpListe: TDataSource;
    DBGrid_OpListe: TDBGrid;
    LbEStatus: TLabeledEdit;
    CBDruckerAuswahl: TComboBox;
    PrintDialog1: TPrintDialog;
    ClientDataSet_OpListe: TClientDataSet;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CBDruckerAuswahlChange(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FProgrammGestartet: Boolean;
    FLetzteFrist: TDateTime;
    FKundenDatei: string;
    FOPDatei: string;
    FMahnGebuehren1: Real;
    FMahnGebuehren2: Real;
    FMahnGebuehren3: Real;
    FLetzteFristTage: Integer;
    FMailAbsender: string;
    FMailPasswort: string;
    FMailServer: string;
    FMailPort: Integer;
    FVertreterAdressenList: TStringList;
    FVertreterNummernList: TStringList;
    FAktuelleZeile: Integer;
    procedure IniDateiLesen;
    procedure TabellenHeaderSetzen;
    procedure ShowStatus(Meldung: string);
  public
    { Public-Deklarationen }
  end;

var
  Mahn: TMahn;

implementation
{$R *.dfm}

procedure TMahn.FormCreate(Sender: TObject);
begin
  FProgrammGestartet := False;
  FVertreterAdressenList := TStringList.Create;
  FVertreterNummernList := TStringList.Create;
end;

procedure TMahn.FormDestroy(Sender: TObject); // Create und Destroy gehören zusammen //! verlagert TMahn.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FVertreterAdressenList.Free;
  FVertreterNummernList.Free;
end;

procedure TMahn.IniDateiLesen;
var
  Ini: TIniFile;
  LetzteFristTage: Integer;
begin
  Ini := TIniFile.Create(ExtractFilePath(ExpandFileName(ParamStr(0))) + 'MahnProjekt.ini');
  try
    FKundenDatei := Ini.ReadString('Allgemein', 'Kundendatei', '');
    FOPDatei := Ini.ReadString('Allgemein', 'OPdatei', '');
    FMailAbsender := Ini.ReadString('EMail-Versand', 'MailAbsender', '');
    FMailPasswort := Ini.ReadString('EMail-Versand', 'MailPasswort', '');
    FMailServer := Ini.ReadString('EMail-Versand', 'MailServer', '');
    FMailPort := Ini.ReadInteger('EMail-Versand', 'MailPort', 0);
    FMahnGebuehren1 := Ini.ReadFloat('Mahngebuehren', 'Mahngebuehren1', 0);
    FMahnGebuehren2 := Ini.ReadFloat('Mahngebuehren', 'Mahngebuehren2', 0);
    FMahnGebuehren3 := Ini.ReadFloat('Mahngebuehren', 'Mahngebuehren3', 0);
    FLetzteFristTage := Ini.ReadInteger('Mahngebuehren', 'Letztefrist', 10);
    Ini.ReadSection('ADAdressen', FVertreterAdressenList);
    Ini.ReadSection('ADNummern', FVertreterNummernList);
  finally
    Ini.Free;
  end;
  FLetzteFrist := FLetzteFrist + LetzteFristTage;
end;

procedure TMahn.TabellenHeaderSetzen;
begin
  ClientDataSet_OPListe.Active := False;
  ClientDataSet_OPListe.FieldDefs.Clear;
  ClientDataSet_OPListe.FieldDefs.Add('KundenNummer', ftString, 5);
  ClientDataSet_OPListe.FieldDefs.Add('KundeKurz', ftString, 30);
  ClientDataSet_OPListe.FieldDefs.Add('RechnungNr', ftString, 10);
  ClientDataSet_OPListe.FieldDefs.Add('RechnungsDatum', ftString, 10);
  ClientDataSet_OPListe.FieldDefs.Add('FaelligDatum', ftString, 10);
  ClientDataSet_OPListe.FieldDefs.Add('Betrag', ftString, 10);
  ClientDataSet_OPListe.FieldDefs.Add('FaelligTage', ftString, 4);
  ClientDataSet_OPListe.FieldDefs.Add('MahnStufe', ftString, 1);
  ClientDataSet_OPListe.FieldDefs.Add('Mahnen', ftString, 1);
  ClientDataSet_OPListe.FieldDefs.Add('Firma1', ftString, 30);
  ClientDataSet_OPListe.FieldDefs.Add('Firma2', ftString, 30);
  ClientDataSet_OPListe.FieldDefs.Add('Strasse', ftString, 30);
  ClientDataSet_OPListe.FieldDefs.Add('Land', ftString, 2);
  ClientDataSet_OPListe.FieldDefs.Add('PLZ', ftString, 5);
  ClientDataSet_OPListe.FieldDefs.Add('Ort', ftString, 30);
  ClientDataSet_OPListe.FieldDefs.Add('Telefax', ftString, 30);
  ClientDataSet_OPListe.FieldDefs.Add('Email', ftString, 90);
  ClientDataSet_OPListe.FieldDefs.Add('Vertreter', ftString, 50);
  ClientDataSet_OPListe.FieldDefs.Add('RnEmail', ftString, 90);
  ClientDataSet_OPListe.CreateDataSet;
  ClientDataSet_OPListe.Active := True;
end;

procedure TMahn.ShowStatus(Meldung: string);
begin
  LbEStatus.Text := Meldung;
  LbEStatus.Refresh;
end;

procedure TMahn.FormShow(Sender: TObject);
begin
  if not FProgrammGestartet then
  begin
    FProgrammGestartet := True;
    IniDateiLesen;
    TabellenHeaderSetzen;
    ShowStatus('Verarbeitung');
    FLetzteFrist := Now + 7;
    CBDruckerAuswahl.items := Printer.printers;
    CBDruckerAuswahl.ItemIndex := Printer.PrinterIndex;
  end;
end;

procedure TMahn.CBDruckerAuswahlChange(Sender: TObject);
begin
  Printer.PrinterIndex := CBDruckerauswahl.ItemIndex;
end;

end.
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat