Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   undefinierter Bezeichner (self) (https://www.delphipraxis.net/214122-undefinierter-bezeichner-self.html)

kdrexler 21. Nov 2023 07:12

Delphi-Version: 6

undefinierter Bezeichner (self)
 
Hallo zusammen,

beim compilieren kommt immer die Fehlermeldimg "undefinierter" Bezeihncer self.

fstammdaten.BSpeichernClick(self);

Das Formular TFStammdaten ist aber mit eingebunden.

Danke für die Hilfe.

TiGü 21. Nov 2023 07:15

AW: undefinierter Bezeichner (self)
 
Zeig mal die Zeilen darüber einschließlich Funktions- bzw. Prozedurkopf.

kdrexler 21. Nov 2023 07:22

AW: undefinierter Bezeichner (self)
 
Hier die komplette unit.
Ustammdatenerfassung - aus deiser Unit kommt der Aufruf Fstammdatenspeichern.clik(self)

Delphi-Quellcode:
unit udatenabgleich;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  comobj, Excel2000, OleServer, ExtCtrls, ComCtrls, FileCtrl,

  inifiles,
  Mask, Menus, ExtDlgs,



  Dialogs, StdCtrls, Buttons,
  ustammdatenerfassung,
  uinit,utypen,uconst;

type
  Tfdatenabgleich = class(TForm)
    OpenDialog1: TOpenDialog;
    lefamilienname: TLabeledEdit;
    levorname: TLabeledEdit;
    LEPersonennummer: TLabeledEdit;
    BitBtn1: TBitBtn;
    Excel: TExcelApplication;
    ExcelWorkbook: TExcelWorkbook;
    Sheet: TExcelWorksheet;
    pbVerein: TProgressBar;
    pbstammdatei: TProgressBar;
    Label1: TLabel;
    Label2: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const udatenabgleich_const = '8.004/231120';

var
  fdatenabgleich: Tfdatenabgleich;
  Excel,sheet : variant;
  excelzeile,excelspalte, Mitgliedsnummer : integer;
  excel_dummy : zeile;
  leer_person : tname;
  leer_adresse : tadresse;

procedure Datenabgleich;


implementation

{$R *.dfm}


procedure Datenabgleich;
Begin
  fdatenabgleich.Visible := true;
  fdatenabgleich.Text := 'Datenabgleich - ' + udatenabgleich_const;
  fdatenabgleich.Update;
  fdatenabgleich.OpenDialog1.Execute;
  assignfile(stammdatei,stammverzeichnisname + '\' + datenverzeichnisname + '\' + stammdateiname);
  reset(stammdatei);

  excel := createoleobject('Excel.Application');
  excel.Workbooks.Open(trim(fdatenabgleich.OpenDialog1.FileName));
  sheet := excel.workbooks[1].worksheets[1];
  excelzeile := 1;
  fdatenabgleich.pbVerein.Max := 0;

  repeat
    dummy_zeile := excel.cells[excelzeile,1].value;
    inc(excelzeile);
    fdatenabgleich.pbverein.min := 0;
    fdatenabgleich.pbVerein.Max := fdatenabgleich.pbVerein.Max +1;
  until length(trim(dummy_zeile)) = 0;

  fdatenabgleich.pbstammdatei.Max := filesize(stammdatei);
  fdatenabgleich.pbstammdatei.Min := 0;
  fdatenabgleich.pbstammdatei.Step := 1;

  fdatenabgleich.pbverein.min := 0;
  fdatenabgleich.pbVerein.Step := 1;

  assign(adressdatei,stammverzeichnisname + '\' + datenverzeichnisname + '\' + adressdateiname);
  reset(Adressdatei);

  excelzeile := 1;
  excelspalte := 1;
  repeat
    inc(excelzeile);
    fdatenabgleich.pbVerein.StepIt;
    excel_dummy := excel.cells[excelzeile,1].value;
    reset(stammdatei);
    gefunden := false;
    fdatenabgleich.pbstammdatei.Min := 0;
    repeat
      fdatenabgleich.pbstammdatei.StepIt;
      namens_init(person);
      read(stammdatei,person);
      fdatenabgleich.Update;
      val(person.flag_string[personennummer_HV_const],mitgliedsnummer,valok);
      if length(excel_dummy) > 0 then
         if (trim(person.flag_String[personennummer_HV_const]) = trim(excel_dummy)) then
           gefunden := true;
    until (gefunden) or (eof(stammdatei));
    if gefunden then
      Begin
        with person do
          Begin
            n_name := trim(excel.cells[excelzeile,2].value);
            v_name := trim(excel.cells[excelzeile,3].value);
            fdatenabgleich.lefamilienname.Text := n_name;
            fdatenabgleich.levorname.Text := v_name;
            fdatenabgleich.LEPersonennummer.Text := excel_dummy;
            fdatenabgleich.Update;
            dummy_zeile := excel.cells[excelzeile,13].value;
            person.geburtsdatum := strtodate(trim(dummy_zeile));
            // Eintritt
            person.flag_string[6] := excel.cells[excelzeile,14].value;
            // Kündigung am
            person.flag_string[4] := excel.cells[excelzeile,15].value;
            // Kündigung zum
            person.flag_string[5] := excel.cells[excelzeile,16].value;
            seek(stammdatei,person.Nummer - 1);
            write(stammdatei,person);
            reset(adressdatei);
            adressen_init(adresse);
            seek(adressdatei,person.Nummer - 1);
            read(adressdatei,adresse);
            dummy_zeile := excel.cells[excelzeile,4].value;
            adresse.adresse[plz_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,5].value;
            adresse.adresse[ort_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,6].value;
            adresse.adresse[strasse_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,11].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[email_const] := trim(dummy_zeile);

            dummy_zeile := excel.cells[excelzeile,7].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[telprivat_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,8].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[telgesch_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,9].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[mobil_const] := trim(dummy_zeile);

            if length(trim(person.Verein)) <= 3 then
              Begin
                person.Verein := 'VFL Nürnberg';
                person.flag_boolean[sg_const] := false;
                person.flag_boolean[stammdatensatzaenderung_const] := true;
                person.mannschaft := 'Liste Hauptverein';
              end;

            leer_person := person;
            leer_adresse := adresse;
            stammdatenerfassung(true);
            person := leer_person;
            adresse := leer_adresse;
            abgleich(person,adresse);
          end;
          seek(adressdatei,adresse.Schwimmer_nummer - 1);
          write(adressdatei,adresse);
          if fstammdaten.Visible then
            fstammdaten.Visible := false;


      end
    else // Datensatz wird in SwimBase neu angelegt
      Begin
        namens_init(person);
        adressen_init(adresse);
        with person do
          Begin
            n_name := trim(excel.cells[excelzeile,2].value);
            v_name := trim(excel.cells[excelzeile,3].value);
            fdatenabgleich.lefamilienname.Text := n_name;
            fdatenabgleich.levorname.Text := v_name;
            fdatenabgleich.LEPersonennummer.Text := excel_dummy;
            fdatenabgleich.Update;
            dummy_zeile := excel.cells[excelzeile,13].value;
            person.geburtsdatum := strtodate(trim(dummy_zeile));
            // Eintritt
            person.flag_string[6] := excel.cells[excelzeile,14].value;
            // Kündigung am
            person.flag_string[4] := excel.cells[excelzeile,15].value;
            // Kündigung zum
            person.flag_string[5] := excel.cells[excelzeile,16].value;
            adressen_init(adresse);
            dummy_zeile := excel.cells[excelzeile,4].value;
            adresse.adresse[plz_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,5].value;
            adresse.adresse[ort_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,6].value;
            adresse.adresse[strasse_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,11].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[email_const] := trim(dummy_zeile);

            dummy_zeile := excel.cells[excelzeile,7].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[telprivat_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,8].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[telgesch_const] := trim(dummy_zeile);
            dummy_zeile := excel.cells[excelzeile,9].value;
            if length(dummy_zeile) <> 0 then
              adresse.adresse[mobil_const] := trim(dummy_zeile);

            if length(trim(person.Verein)) <= 3 then
              Begin
                person.Verein := 'VFL Nürnberg';
                person.flag_boolean[sg_const] := false;
                person.flag_boolean[stammdatensatzaenderung_const] := true;
                person.mannschaft := 'Liste Hauptverein';
              end;

            leer_person := person;
            leer_adresse := adresse;
            stammdatenerfassung(true);
            person := leer_person;
            adresse := leer_adresse;
            abgleich(person,adresse);
            fstammdaten.BSpeichernClick(self);
          end;
          if fstammdaten.Visible then
            fstammdaten.Visible := false;
      end;

  until (length(excel_dummy) = 0);



  closefile(adressdatei);
  closefile(stammdatei);

  Excel.Quit; //Beendet Excel
  Excel := Unassigned;
  fdatenabgleich.Close;
End;

end.

DeddyH 21. Nov 2023 07:30

AW: undefinierter Bezeichner (self)
 
Ich rate mal und behaupte, der gezeigte Code befindet sich innerhalb einer regulären Prozedur/Funktion und nicht innerhalb einer Methode.

MEissing 21. Nov 2023 09:22

AW: undefinierter Bezeichner (self)
 
Die "procedure Datenabgleich;" hängt alleine im Raum. Und kennt daher self nicht.

Häng' die als Methode an Tfdatenabgleich und schon kennt die auch self. Oder nutze halt die Instanzvariable "fdatenabgleich"

himitsu 21. Nov 2023 09:31

AW: undefinierter Bezeichner (self)
 
Und wenn schon, dann auch gleich diese globanen Variablen in die Klasse mitnehmen (private).

Sinspin 21. Nov 2023 10:43

AW: undefinierter Bezeichner (self)
 
Dann noch
Delphi-Quellcode:
with person do
auflösen, also entfernen. Das ist ganz schlechter Programmierstil. :zwinker:

dummzeuch 21. Nov 2023 12:48

AW: undefinierter Bezeichner (self)
 
Zitat:

Zitat von Sinspin (Beitrag 1529892)
Dann noch
Delphi-Quellcode:
with person do
auflösen, also entfernen. Das ist ganz schlechter Programmierstil. :zwinker:

Genau! Korrekt wäre

Delphi-Quellcode:
with self, Person do


GDR

Jasocul 21. Nov 2023 13:29

AW: undefinierter Bezeichner (self)
 
Der Source macht auf mich den Eindruck, dass kdrexler noch nicht so viel Erfahrung hat und es gibt noch reichlich Stellen um Source, die Probleme bereiten werden.
Wenn ihr also Hilfestellung geben wollt, dann doch bitte so, dass kdrexler etwas davon hat.

Sinspin 21. Nov 2023 14:41

AW: undefinierter Bezeichner (self)
 
Zitat:

kdrexler

Registriert seit: 13. Mai 2012
:gruebel:Das sind 11 Jahre. Das sollte genug Zeit gewesen sein um Erfahrung zu sammeln.:duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz