Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Felder einer Klasse werden nicht erkannt (https://www.delphipraxis.net/171232-felder-einer-klasse-werden-nicht-erkannt.html)

Ykcim 27. Okt 2012 12:15


Felder einer Klasse werden nicht erkannt
 
Hallo Zusammen,

ich mache gerade meine ersten Schritte in der OOP. Das heißt, dass ich erst seit ein paar Tagen mit Klassen arbeite. Eigentlich hat es nach guter Anleitung auch geklappt, aber jetzt stehe ich gerade auf dem Schlauch:

Ich habe eine Klasse definiert und möchte im constructor create Klassenvariablen einen Wert zuweisen. Aber aus irgendeinem Grund knallt es.

Ich habe hier meinen Code:
Delphi-Quellcode:
TFA_Info = class
      strict protected
         FWAAUNR: string;
         FWAAUPO: string;
         FWATENR: string;
         FTEBEZ1: string;
         FLagerBest: string;
         FSicherBest: string;
      public
         constructor create(Grid: TAdvStringGrid; SpalteWAAUNR, SpalteWAAUPO,
                            SpalteWATENR, SpalteTEBEZ1: integer);
         function GetLagerBest: string;
         function GetSicherBest: string;
         function GetWAAUNR: string;
         function GetWAAUPO: string;
         function GetWATENR: string;
         function GetTEBEZ1: string;
         property LagerBestand: string read GetLagerBest;
         property SicherheitsBestand: string read GetSicherBest;
         property WAAUNR: string read GetWAAUNR;
         property WAAUPO: string read GetWAAUPO;
         property WATENR: string read GetWATENR;
         property TEBEZ1: string read GetTEBEZ1;
   end;

Und hier der Implementationsteil

Delphi-Quellcode:
constructor TFA_Info.create(Grid: TAdvStringGrid; SpalteWAAUNR, SpalteWAAUPO,
                            SpalteWATENR, SpalteTEBEZ1: integer);
begin
   FWAAUNR:=Grid.Cells[SpalteWAAUNR,Grid.Row];
   FWAAUPO:=Grid.Cells[SpalteWAAUPO,Grid.Row];
   FWATENR:=Grid.Cells[SpalteWATENR,Grid.Row];
   FTEBEZ1:=Grid.Cells[SpalteTEBEZ1,Grid.Row];

   Main.MySelectQuery.SQL.Clear;
   Main.MySelectQuery.SQL.Add('select sum(LSLGBE) from oms14 ');
   Main.MySelectQuery.SQL.Add('where WATENR= :WATENR ');
   Main.MySelectQuery.SQL.Add('group by WATENR');
   Main.MySelectQuery.ParamByName('WATENR').AsString:=FWAAUNR;
   Main.MySelectQuery.Open;
   FLagerBest:=Main.MySelectQuery.Fields.Fields[0].Text;
end;

function TFA_Info.GetLagerBest;
begin
   Result:=FLagerBest;
end;

function TFA_Info.GetSicherBest;
begin
   Result:=FSicherBest;
end;

function TFA_Info.GetWAAUNR;
begin
   Result:=FWAAUNR;
end;

function TFA_Info.GetWAAUPO;
begin
   Result:=FWAAUPO;
end;

function TFA_Info.GetWATENR;
begin
   Result:=FWATENR;
end;

function TFA_Info.GetTEBEZ1;
begin
   Result:=FTEBEZ1;
end;

Hat jemand eine Idee, was ich da falsch mache?

Vielen Dank
Ykcim

himitsu 27. Okt 2012 12:24

AW: Klassenvariablen werden nicht erkannt
 
Ich frag' mal andersrum...

Wie erstellst du die Instanz deiner Klasse?



PS:
Klassenvariablen = class var = "Variablen", welche global für alle Instanzen gelten (alle nutzen das Selbe)
Felder = var (var ist implizit, jeweils am anfang einer Gruppe) = "Variablen" für jede einzelne Instanz (jeder hat seine Eigenen)

Übergibt das MySelectQuery besser auch noch als Parameter und greif nicht über diese globale Variabe drauf zu.

Und FLagerBest ist doch bestimmt eher eine Zahl? (Integer, Double, ...)

Ykcim 27. Okt 2012 12:30

AW: Felder einer Klasse werden nicht erkannt
 
Hallo himitsu,

ich arbeite mit der Klasse, indem ich ein Objekt für sie erstelle.

Hier der Aufruf:
Delphi-Quellcode:
procedure TFrameUebericht.GridUebersichtSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var Objekt: TFA_Info;
begin
   Objekt.create(GridUebersicht,0,1,2,3);
   Try
      BezFANr.Caption:=Objekt.WAAUNR;
      BezFAPo.Caption:=Objekt.WAAUPO;
      BezArtikelNr.Caption:=Objekt.WATENR;
      BezArtikelBez.Caption:=Objekt.TEBEZ1;
   Finally
      Objekt.Free;
   End;
end;
Ich habe den Titel geändert, da es ja um Felder und nicht um Klassenvariablen geht. Danke für den Hinweis.

Ykcim

Andreas L. 27. Okt 2012 12:33

AW: Felder einer Klasse werden nicht erkannt
 
Welche Meldung zeigt der Compiler an?

Übrigens: Ich würde Main.MySelectQuery als Parameter im Konstruktor übergeben.

EDIT:
Delphi-Quellcode:
   Objekt.create(GridUebersicht,0,1,2,3); // Falsch
   Objekt := TFA_Info.Create(GridUebersicht,0,1,2,3); // Richtig

Ykcim 27. Okt 2012 12:38

AW: Felder einer Klasse werden nicht erkannt
 
ICH VOLLPFOSTEN!!!!!:oops:

Und an so einer Schuseligkeit sitze ich jetzt seit zwei Stunden und suche die ganze Zeit an der falschen Stelle....

Vielen Dank

Ykcim

sx2008 27. Okt 2012 16:03

AW: Felder einer Klasse werden nicht erkannt
 
Zitat:

Zitat von Ykcim (Beitrag 1188627)
ICH VOLLPFOSTEN!!!!!:oops:

Das wollen wir mal völlig unkommentiert hier so stehen lassen. :-D :tongue:

himitsu 27. Okt 2012 18:08

AW: Felder einer Klasse werden nicht erkannt
 
Wobei er ja nicht der/die Einzige ist, der sowas gemacht hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 Uhr.

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