AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ausgliedern von Functionen in externe Unit
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgliedern von Functionen in externe Unit

Ein Thema von Jens Hartmann · begonnen am 19. Feb 2010 · letzter Beitrag vom 20. Feb 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:03
Moin,
ich hätte eine Funktion für die Klasse TForm1 geschrieben, die dir den Wert für den Timer holt. Und dann eine Funktion die den Unterschied misst (SetTimer1IntervalEMailStart).
Ich weiß leider nicht wie die anderen SQL-Requests aussehen. Aber wenn sie ähnlich sind (z.B. nur die ID anders), dann geht das ganz gut.

Alternativ machst du noch ein Klasse die selber die Datenbank ist, und ein paar Informationen „wrappt“.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:20
Ich weiß allerdings nicht wie ich das mache. Deswegen fragte ich oben schon mal nach einem Tutorial

Ich will mal so sagen, wenn ich folgende function mit den entsprechenden Übergabe Werten in eine externe Unit/Klasse packen will, wo muss ic dann was, und vorallem damit ich es auch versteh wie und warum machen.
Delphi-Quellcode:
function TForm1.SetTimer1IntervalEMailStart : Boolean;
var
  TimeNow : String;
  TimeSend : String;
const
  HalfDay = 43200000;
begin
  SendEMailTimer1.Enabled := false;
  TimeNow := TimeToStr(Now);//Aktuelle Zeit
  TimeSend := '22:57:00';//Nächste Startzeit
  if TimeSend > TimeNow then //Prüfung ob Sendezeit für aktuellen Tag schon vorbei
    begin
      //Zeitpunkt für nächsten Step festlegen
      SendEMailTimer1.Interval := MilliSecondsBetween(frac(StrToTime(TimeNow)),
        frac(StrToTime(TimeSend)));
    end
  else
    begin
      //Zeitpunkt festlegen wenn Step für aktuellen Tag vorbei
      SendEMailTimer1.Interval := HalfDay - MilliSecondsBetween(frac(StrToTime(TimeNow)),
        frac(StrToTime(TimeSend)))+ HalfDay;
    end;
  SendEMailTimer1.Enabled := true;
end;
Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:25
Wie du was machst?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#14

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:26
siehe oben, ich habe meinen letzten Beitrag geändert...
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:28
Wenn Du die gesamte DB-Funktionalität in eine oder mehrere Klassen packst, kannst Du die Oberfläche sauber von dieser Funktionalität trennen. Dazu müssten dann alle DB-Kompos wie die Query runter vom Formular und von der Klasse erzeugt und verwaltet werden. Das Formular ruft dann nur noch eine Methode der Klasse auf, welche sich um den Rest kümmert und die ermittelten Daten zurückgibt. Das ist zwar am Anfang eine Menge Arbeit, aber wenn man das gut durchdenkt hat man ein sauberes Design.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#16

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:34
Moin,
wo ist da jetzt die DB Funktionalität? Trotzdem hätte ich ein paar Verbesserungsvorschläge:
  1. Wandle die Zeiten nicht in einen String um (wozu, wenn du sie nachher eh wieder zurückumwandelst)
  2. Damit hängt zusammen: Teste nicht String > String Sondern eher Time > Time, das funktioniert eher
  3. Deine zwei Pfade sind sogut wie ähnlich. Der einzige Unterschied ist, dass du im else-Zweig einen ganzen Tag hinzufügst (a - b + a = 2a - b mit a := halber Tag und b := Zeitunterschied). Das heißt zuerst setzt du immer Intervall auf b und guckst dann, ob du dieses Intervall aber erstmal von einem Tag abziehen musst.

Und ansonsten mach es so wie Detlef es vorschlägt:
Du schreibst dir eine Klasse die alle Zugriffe kapselt und dann rufst du nur noch .GetTimer(....) oder so auf.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:47
Zitat von Jens Hartmann:
Delphi-Quellcode:
  TForm1.Qry_TimerRead.SQL.Text := 'SELECT * FROM EMAIL
' WHERE ID = :Id';
TForm1.Qry_TimerRead.ParamByName(
'Id').Value := Timer;
TForm1.Qry_TimerRead.Open;
TimeSend := TimeToStr(TForm1.Qry_TimerRead.FieldbyName(
'TIME').AsTime);
Jetzt wäre halt die Frage, wie ich sowas auslagern würde ohne immer noch das Form1 etc. zu nutzen.

Ich hoffe ich konnte so ungefähr beschreiben was ich meine

Gruß Jens
Das sieht mir sehr nach DB aus, oder?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#18

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:54
Ich habe jetzt mal die Datenbankabfrage in eine andere Funktion gelegt. Da ich noch am Anfang dieser Verarbeitung bin und genau aus diesem Grund auch jetzt schon frage, ist das mit der vielen arbeit nicht so das Problem. Ich habe zum jetzigen Zeitpunkt lediglich die Funktion geprüft und dessen Inhalt getestet. Das was ich vorhabe, funktioniert und muss halt jetzt umgesetzt werden.

Ich habe zur Zeit nur eine Testprogramm geschrieben um die Timer Komponenten und die E-Mail funktion zu Simulieren und das mit Erfolg. Ich will nur der Übersichthalber nicht den Gesamten Code hier einstellen, weil sonst eh keiner mehr weiß was ich will.

Ich habe jetzt z.B. mal die Datenbankabfrage der Uhrzeit ausgegliedert und als Funkton ausgelagert. Damit sieht man vieleicht was ich vorhabe.

Zu der Umwandlung von Time nach String etc. das kommt nur weil ich noch in einem Testprogramm probiere und auch die gesamte Exception Behandlung und auch denn Rest des Programmteils noch gar nicht angepasst habe. Ich habe das ganze einfach mal schnell zusammen getippt, um überhaupt mal meinen Gedankengang zu prüfen.

Hier mal den Schritt den gerade veändert habe um die DB Abfrage Uhrzeit zu realisieren..

Delphi-Quellcode:
//die function SetTimerInterbalEMailStart wird durch das FormCreate ausgelößt
function TForm1.SetTimer1IntervalEMailStart : Boolean;
var
  TimeSend : TTime;
const
  HalfDay = 43200000;
begin
  SendEMailTimer1.Enabled := false;
  TimeSend := ReadTimerTime(1); //'22:57:00';//Nächste Startzeit
  if TimeSend > Time then //Prüfung ob Sendezeit für aktuellen Tag schon vorbei
    begin
      //Zeitpunkt für nächsten Step festlegen
      SendEMailTimer1.Interval := MilliSecondsBetween(frac(Time),
        frac(TimeSend));
...

function TForm1.ReadTimerTime(Timer : integer) : TTime;
begin
  Qry_TimerTime.SQL.Text := 'SELECT ZEIT FROM EMAILGRUPPEN WHERE ID = :Id';
  Qry_TimerTime.ParamByName('Id').AsInteger := Timer;
  Qry_TimerTime.Open;
  Result := Qry_TimerTime.FieldByName('ZEIT').Value;
end;
Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#19

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 10:19
Zitat von DeddyH:
[...]Das sieht mir sehr nach DB aus, oder?
Aber nicht den den Code was er nachher genannte hatte. Und auch da kannst du schlecht sagen, was er da einfach in eine Funktion schreiben kann.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 10:53
Ich musste ein bisschen suchen, aber worauf ich eigentlich hinauswollte: http://www.delphipraxis.net/internal...t.php?t=150471
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:03 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