Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variablen in Funktion verwenden?! (https://www.delphipraxis.net/115322-variablen-funktion-verwenden.html)

Svenkan 10. Jun 2008 12:33


Variablen in Funktion verwenden?!
 
Hallo, ich benötige einige Variablen ausm OnCreate in einer meiner Funktionen.

Delphi-Quellcode:
private
  { private declarations }
ArtEntfall,ArtAufgabe,ArtAufsicht,ArtSondereinsatz,ArtSonstiges,ArtSStudium,ArtStatt,ArtUBesuch,ArtVerlegt,ArtVertretung:String;
Delphi-Quellcode:
function VertArt(const queryname: TQuery; wer,fuer: String): String;
begin
 if (pos('fällt aus: siehe', queryname.FieldByName('BEMER_SCH').AsString)<>0) then
  Result:=ArtVerlegt;
 else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '*?ufsicht*')) then
  Result:=ArtAufsicht;
 else if NOT (pos('fällt aus', AnsiLowerCase(queryname.FieldByName('BEMER_SCH').AsString))<>0) AND (wer='') then
  Result:=ArtSStudium;
 else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '*?ufgabe*') OR Like(queryname.FieldByName('BEMER_SCH').AsString, '*?tillarbeit*') OR Like(queryname.FieldByName('BEMER_SCH').AsString, '*?eschäftigung*')) then
  Result:=ArtAufgabe;
 else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '?ällt aus')) OR (Like(queryname.FieldByName('BEMER_SCH').AsString, 'Diese Stunde * fällt aus!')) then
  Result:=ArtEntfall;
 else if (pos('Statt', queryname.FieldByName('BEMER_SCH').AsString)<>0) AND (pos('Std.', queryname.FieldByName('BEMER_SCH').AsString)<>0) then
  Result:=ArtStatt;
 else if (fuer='') AND (queryname.FieldByName('WERT').AsString='P') AND (queryname.FieldByName('ANZAHL').AsString='1') then
  Result:=ArtSondereinsatz;
 else if NOT (pos('Statt', queryname.FieldByName('BEMER_SCH').AsString)<>0) AND NOT (pos('Std.', queryname.FieldByName('BEMER_SCH').AsString)<>0) AND NOT (fuer='') AND NOT (wer='') then
  Result:=ArtVertretung;
 else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '*Unterrichtsbesuch*')) then
  Result:=ArtUBesuch;
 else
  Result:=ArtSonstiges;
end;
Allerdings ergibt sich hier nur der Fehler 'Unbekannter Bezeichner'.
Hat jemand einen Rat für mich?

DeddyH 10. Jun 2008 12:34

Re: Variablen in Funktion verwenden?!
 
Mach aus der Funktion eine Methode.

mkinzler 10. Jun 2008 12:35

Re: Variablen in Funktion verwenden?!
 
Dann musst du die Variablen global anlegen

dominikkv 10. Jun 2008 12:36

Re: Variablen in Funktion verwenden?!
 
Delphi-Quellcode:
type
  TMyClass = class()
  private
    ArtEntfall,ArtAufgabe,ArtAufsicht,ArtSondereinsatz,ArtSonstiges,ArtSStudium,ArtStatt,ArtUBesuch,ArtVerlegt,ArtVertretung:String;
    function VertArt(const queryname: TQuery; wer,fuer: String): String;
  end;

// ...

function TMyClass.VertArt(const queryname: TQuery; wer,fuer: String): String;
begin
if (pos('fällt aus: siehe', queryname.FieldByName('BEMER_SCH').AsString)<>0) then
  Result:=ArtVerlegt;
else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '*?ufsicht*')) then
  Result:=ArtAufsicht;
else if NOT (pos('fällt aus', AnsiLowerCase(queryname.FieldByName('BEMER_SCH').AsString))<>0) AND (wer='') then
  Result:=ArtSStudium;
else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '*?ufgabe*') OR Like(queryname.FieldByName('BEMER_SCH').AsString, '*?tillarbeit*') OR Like(queryname.FieldByName('BEMER_SCH').AsString, '*?eschäftigung*')) then
  Result:=ArtAufgabe;
else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '?ällt aus')) OR (Like(queryname.FieldByName('BEMER_SCH').AsString, 'Diese Stunde * fällt aus!')) then
  Result:=ArtEntfall;
else if (pos('Statt', queryname.FieldByName('BEMER_SCH').AsString)<>0) AND (pos('Std.', queryname.FieldByName('BEMER_SCH').AsString)<>0) then
  Result:=ArtStatt;
else if (fuer='') AND (queryname.FieldByName('WERT').AsString='P') AND (queryname.FieldByName('ANZAHL').AsString='1') then
  Result:=ArtSondereinsatz;
else if NOT (pos('Statt', queryname.FieldByName('BEMER_SCH').AsString)<>0) AND NOT (pos('Std.', queryname.FieldByName('BEMER_SCH').AsString)<>0) AND NOT (fuer='') AND NOT (wer='') then
  Result:=ArtVertretung;
else if (Like(queryname.FieldByName('BEMER_SCH').AsString, '*Unterrichtsbesuch*')) then
  Result:=ArtUBesuch;
else
  Result:=ArtSonstiges;
end;

Svenkan 10. Jun 2008 12:44

Re: Variablen in Funktion verwenden?!
 
/Edit: Die globalen Variablen funktionieren doch schneller und einfacher. ;)

mkinzler 10. Jun 2008 12:47

Re: Variablen in Funktion verwenden?!
 
Du brauchst natürlich eine Instanz der Klasse

RavenIV 10. Jun 2008 12:49

Re: Variablen in Funktion verwenden?!
 
Zitat:

Zitat von Svenkan
/Edit: Die globalen Variablen funktionieren doch schneller und einfacher. ;)

Aber auch viel gefährlicher und undurchsichtiger.
Du weisst in grossen Projekten dann nicht mehr, wer wann warum die globalen Variablen verändert.

Ausserdem sind sie "verboten".
Schau mal in den Borland StyleGuide.

Sharky 10. Jun 2008 13:28

Re: Variablen in Funktion verwenden?!
 
Hai Svenkan,

noch etwas: Um deinen Code lesbarer (bzw. lesbar) zu machen solltest Du dir in deiner Methode eine Variable deklarieren und in dieser ganz am Anfang den Wert von
Delphi-Quellcode:
queryname.FieldByName('BEMER_SCH').AsString
speichern. Dann musst Du in deinen Abfragen nicht immer wieder das Feld auslesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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