![]() |
Datenbank: Keine • Version: keine • Zugriff über: keine
ClientDataSet.CreateDataSet + Exception
Moin,
weas mache ich denn jetzt wieder falsch ?? Ich will den Dataset dann aus einem CSV befüllen.
Delphi-Quellcode:
Sobald es zum ClientDataSet.CreateDateSet kommt gibt es eine Exception:
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; --------------------------- 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 |
AW: ClientDataSet.CreateDataSet + Exception
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. |
AW: ClientDataSet.CreateDataSet + Exception
Zitat:
Delphi-Quellcode:
markiert. Und - wenn es helfen sollte - im Aufrufstack steht ein hellblauer Pfeil vor 00685687 TCustomClientDataSet.InternalCheck
Mahn.ClientDataSet_OPListe.Active := True;
Zitat:
Delphi-Quellcode:
dann bekomme ich beim compilieren schon eine Fehlermeldung:
ClientDataSet_OPListe.Active := False;
ClientDataSet_OPListe.FieldDefs.Clear; ClientDataSet_OPListe.FieldDefs.Add('KundenNummer', ftString, 5); E2003: undeklarierter Bezeichner: 'ClientDataSet_OPListe Zitat:
Gruss Hans |
AW: ClientDataSet.CreateDataSet + Exception
Zitat:
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. :oops: |
AW: ClientDataSet.CreateDataSet + Exception
Moin,
kein Thema ....
Delphi-Quellcode:
Gruss
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. Hans |
AW: ClientDataSet.CreateDataSet + Exception
Moin...:P
Ich habe das mal umgeschrieben...:P 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 :wink:
Delphi-Quellcode:
Unstimmigkeiten:
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. 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
Delphi-Quellcode:
und überschreibst du den letzten Wert. :gruebel:
FLetzteFrist := Now + 7;
3. Status "Verarbeitung" wird nicht zurückgesetzt? Soll das so sein? |
AW: ClientDataSet.CreateDataSet + Exception
Zitat:
vielen Dank für die ganze Mühe die Du dir gegeben hast !! Zitat:
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 Zitat:
Zitat:
Zitat:
Zitat:
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. |
AW: ClientDataSet.CreateDataSet + Exception
Moin,
nur noch mal eine Nachfrage zum allgemeinen Verständnis. Meine Kenntnisse kommen ja eher aus der TP3.0-Zeit: Zitat:
a) alle Proceduren und Functionen die man im Programm nutzt nochmal in den private-Kopf schreibt b) alle Variablen die ich immer noch in den VAR-Teil nach der Implementation ebenso in den private-Kopf kommen ? Hans |
AW: ClientDataSet.CreateDataSet + Exception
Wir sind seit sehr vielen Jahren objektorientiert (OOP) und nicht mehr prozedual.
Alles, was mit der Klasse (dem Objekt) zu tun hat, gehört auch da rein. private, wenn nur das Objekt damit zu tun hat, protected, wenn auch Nachfahren damit was machen dürfen und public wenn Andere darauf zugreifen dürfen. "ohne" ist bei TComponent/TPersistent-Nachfahren wie published und sonst public. published ist wie public, nur mit Zusatzinfos, damit z.B. der DFM-Loader und der OI diese Daten interpretieren kann. |
AW: ClientDataSet.CreateDataSet + Exception
Zitat:
Hans |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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-2025 by Thomas Breitkreuz