AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ClientDataSet.CreateDataSet + Exception
Thema durchsuchen
Ansicht
Themen-Optionen

ClientDataSet.CreateDataSet + Exception

Ein Thema von H.Bothur · begonnen am 9. Jun 2017 · letzter Beitrag vom 16. Jun 2017
Antwort Antwort
H.Bothur

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

ClientDataSet.CreateDataSet + Exception

  Alt 9. Jun 2017, 17:42
Datenbank: Keine • Version: keine • Zugriff über: keine
Moin,

weas mache ich denn jetzt wieder falsch ?? Ich will den Dataset dann aus einem CSV befüllen.

Delphi-Quellcode:
  Mahn.ClientDataSet.Active := False;
  Mahn.ClientDataSet.FieldDefs.Clear;
  Mahn.ClientDataSet.FieldDefs.Add('KundenNummer', ftString, 5);
  Mahn.ClientDataSet.FieldDefs.Add('KundeKurz', ftString, 30);
  Mahn.ClientDataSet.FieldDefs.Add('RechnungNr', ftString, 10);
  Mahn.ClientDataSet.FieldDefs.Add('RechnungsDatum', ftString, 10);
  Mahn.ClientDataSet.CreateDataSet;
  Mahn.ClientDataSet.Active := True;
Sobald es zum ClientDataSet.CreateDateSet kommt gibt es eine Exception:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Mahnung.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x00685687: read of address 0x00000000' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Gruß
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#2

AW: ClientDataSet.CreateDataSet + Exception

  Alt 9. Jun 2017, 19:14
Welche Codezeile ist denn $00685687 ?

Ich hoffe dieser Code liegt nicht in einer Methode einer Form/DataModul, welches sich TMahn schimpft.
Und ohne weitere Informationen ist dieser einsame Codeschnipsel jedenfalls funktionsfähig.


PS: Dankt dem gekauften AnyDAC wäre TFDMemTable die bessere Komponente, in aktuelleren Delphis.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Jun 2017 um 19:18 Uhr)
  Mit Zitat antworten Zitat
H.Bothur

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

AW: ClientDataSet.CreateDataSet + Exception

  Alt 9. Jun 2017, 20:45
Welche Codezeile ist denn $00685687 ?
Im Sourcecode ist die Zeile

  Mahn.ClientDataSet_OPListe.Active := True; markiert. Und - wenn es helfen sollte - im Aufrufstack steht ein hellblauer Pfeil vor 00685687 TCustomClientDataSet.InternalCheck

Zitat:
Ich hoffe dieser Code liegt nicht in einer Methode einer Form/DataModul, welches sich TMahn schimpft.
Und ohne weitere Informationen ist dieser einsame Codeschnipsel jedenfalls funktionsfähig.
Doch - weil wenn ich das nicht schreibe sondern nur

Delphi-Quellcode:
  ClientDataSet_OPListe.Active := False;
  ClientDataSet_OPListe.FieldDefs.Clear;
  ClientDataSet_OPListe.FieldDefs.Add('KundenNummer', ftString, 5);
dann bekomme ich beim compilieren schon eine Fehlermeldung:

E2003: undeklarierter Bezeichner: 'ClientDataSet_OPListe


Zitat:
PS: Dankt dem gekauften AnyDAC wäre TFDMemTable die bessere Komponente, in aktuelleren Delphis.
OK - Kuck ich mal !

Gruss
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#4

AW: ClientDataSet.CreateDataSet + Exception

  Alt 9. Jun 2017, 21:21
Doch - weil wenn ich das nicht schreibe sondern nur ...
Jetzt rate mal, was wäre, wenn man die paar Codezeilen drumrum auch mit zeigen würde.

Ich rate einfach mal und wette mit dir um 300$, dass Mahn oder Mahn.ClientDataSet_OPListe nil ist,
aber das hätte dir der Debugger auch sofort kostenlos sagen können, wenn man ihn nutzen täte.


Auch wenn die andere Komponente etwas besser ist, behebt sie nicht "dieses" Problemchen.
Ob ich nun mit 'ner Ente oder einem Ferrari gegen 'ne Wand fahre ... kaputt gehn Beide.
Nur bei 'ner Blondine geht die Wand kaputt ... der Klügere gibt halt nach.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Jun 2017 um 21:25 Uhr)
  Mit Zitat antworten Zitat
H.Bothur

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

AW: ClientDataSet.CreateDataSet + Exception

  Alt 9. Jun 2017, 21:32
Moin,

kein Thema ....

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;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure CBDruckerAuswahlChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Mahn: TMahn;

implementation
{$R *.dfm}

var
  ProgrammGestartet: Boolean;
  LetzteFrist: TDateTime;
  KundenDatei,
  OPDatei: String;

  MahnGebuehren1,
  MahnGebuehren2,
  MahnGebuehren3: Real;

  MailAbsender,
  MailPasswort,
  MailServer: String;
  MailPort: Integer;

  VertreterAdressenList,
  VertreterNummernList: TStringList;
  AktuelleZeile: Integer;

procedure IniDateiLesen;
var
  Ini: TIniFile;
  LetzteFristTage: Integer;
begin
  Ini:=TIniFile.Create(ExtractFilePath(ExpandFileName(ParamStr(0))) +'MahnProjekt.ini');
  try
    KundenDatei := Ini.ReadString('Allgemein', 'Kundendatei', '');
    OPDatei := Ini.ReadString('Allgemein', 'OPdatei', '');
    MailAbsender := Ini.ReadString('EMail-Versand', 'MailAbsender', '');
    MailPasswort := Ini.ReadString('EMail-Versand', 'MailPasswort', '');
    MailServer := Ini.ReadString('EMail-Versand', 'MailServer', '');
    MailPort := Ini.ReadInteger('EMail-Versand', 'MailPort', 0);
    MahnGebuehren1 := Ini.ReadFloat('Mahngebuehren', 'Mahngebuehren1', 0);
    MahnGebuehren2 := Ini.ReadFloat('Mahngebuehren', 'Mahngebuehren2', 0);
    MahnGebuehren3 := Ini.ReadFloat('Mahngebuehren', 'Mahngebuehren3', 0);
    LetzteFristTage := Ini.ReadInteger('Mahngebuehren', 'Letztefrist', 10);
    Ini.ReadSection('ADAdressen', VertreterAdressenList);
    Ini.ReadSection('ADNummern', VertreterNummernList);
  finally
    Ini.Free;
  end;
  LetzteFrist := LetzteFrist +LetzteFristTage;
end;

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

procedure ShowStatus(Meldung: String);
begin
  Mahn.LbEStatus.Text := Meldung;
  Mahn.LbEStatus.Refresh;
end;

procedure TMahn.FormCreate(Sender: TObject);
begin
  ProgrammGestartet := False;
  VertreterAdressenList := TStringList.Create;
  VertreterNummernList := TStringList.Create;
end;

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

procedure TMahn.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  VertreterAdressenList.Free;
  VertreterNummernList.Free;
end;

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

end;

end.
Gruss
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.429 Beiträge
 
Delphi 12 Athens
 
#6

AW: ClientDataSet.CreateDataSet + Exception

  Alt 10. Jun 2017, 08:07
Moin...
Ich habe das mal umgeschrieben...
Ist der Fehler nun nicht mehr da? Ist auf der Form eine Komponente namens ClientDataSet_OPListe?

Korrekturen:
1. globale Variablen in private verlagert
2. prozeduren in private verlagert
3. ein wenig sortiert
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;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    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;
    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.
Unstimmigkeiten:
1. Wo arbeitest du mit dem DataSet? Ist das noch nicht implementiert?
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.
3. Status "Verarbeitung" wird nicht zurückgesetzt? Soll das so sein?

Geändert von haentschman (10. Jun 2017 um 08:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz