Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Procedure aufrufen (https://www.delphipraxis.net/85151-procedure-aufrufen.html)

manfred_h 26. Jan 2007 16:10


Procedure aufrufen
 
Halo zusammen

ist wirklich eine Anfägerfage Sorry ( hab auch schon die Suche bemüht )
ich habe ein Form und ein Datamodul

Im Datamodul habe ich diese Procedure:
Delphi-Quellcode:
procedure TDM_hotel.nc_calc(Sender: TObject);
var maxdate : string;
begin
  Q_tmp.SQL.Text := ('SELECT MAX (D_DATE) FROM HOTEL_D WHERE' +
                     '(ID_AREA = '+''''+(''+frm_hotel.ID.Field.DisplayText+''''+')'));
  Q_tmp.ExecQuery;
  maxdate := Q_tmp.FieldByName('MAX').AsString;
  Q_tmp.Close;
  if Hotel.FieldByName('CS').Value > 1 then
  with Hotel do
  begin
    Edit;
    FieldByName('NC').AsString := DateToStr(StrToDate(maxdate)+((FieldByName('CS').Value * 30)));
    post;
  end;
end;
aus dem Form kann ich so zugreifen:
Delphi-Quellcode:
procedure Tfrm_hotel.contactseries_update(Sender: TObject);
begin
  DM_hotel.nc_calc(Sender);
end;
Frage: Wie kann ich im Datamodul selber auf diese Procedure zugreifen?
Delphi-Quellcode:
procedure TDM_hotel.Hotel_DAfterPost(DataSet: TDataSet);
begin
  nc_calc;
end;
das hier geht nicht ... :?
Es kommt immer die Felermeldung : Not enough actual parameters

bin dankbar für Eure Hilfe
Shalom
Manfred

marabu 26. Jan 2007 16:14

Re: Procedure aufrufen
 
Hallo Manfred,

nc_calc(nil) wäre eine Option.

Grüße vom marabu

himitsu 26. Jan 2007 16:17

Re: Procedure aufrufen
 
Und falls die Prozedur ein Objekt benötigt, dann könntest du es auch direkt angeben:
(z.B. die globale Variable des Formulars)
Delphi-Quellcode:
DM_hotel.nc_calc(frm_hotel);

manfred_h 26. Jan 2007 16:23

Re: Procedure aufrufen
 
Besten dank Euch beiden

nc_calc(nil)
das wars.

noch ein schönes Wochenende.
Shalom
Manfred

DP-Maintenance 26. Jan 2007 17:56

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.

Jürgen Thomas 27. Jan 2007 11:01

Re: Procedure aufrufen
 
Hallo Manfred,

noch ein Vorschlag (auch wenn das Problem für Dich erledigt ist). Im Datenmodul kannst Du trennen zwischen dem eigentlichen Ereignis und der gewünschten Maßnahme:
Delphi-Quellcode:
//  die gewünschte Berechnung ausführen
procedure TDM_hotel.nc_calc;
var maxdate : string;
begin
  Q_tmp.SQL.Text := ('SELECT MAX (D_DATE) FROM HOTEL_D WHERE' +
                     '(ID_AREA = '+''''+(''+frm_hotel.ID.Field.DisplayText+''''+')'));
  Q_tmp.ExecQuery;
  maxdate := Q_tmp.FieldByName('MAX').AsString;
  Q_tmp.Close;
  if Hotel.FieldByName('CS').Value > 1 then
  with Hotel do
  begin
    Edit;
    FieldByName('NC').AsString := DateToStr(StrToDate(maxdate)+((FieldByName('CS').Value * 30)));
    post;
  end;
end;
//  die gewünschte Berechnung aktivieren
procedure TDM_hotel.nc_calc_Start(Sender: TObject);
begin
  nc_calc;
end;
Dieses Verfahren - Trennung von Ereignis und Ausführung - ist immer dann zu empfehlen, wenn die Ausführung von mehr als einer Stelle aus benötigt wird.

Zusatzhinweis: SELECT-Abfragen mit Parametern sollten nicht als ein langer String aufgebaut werden, sondern besser über Delphi-Referenz durchsuchenTQuery.Params; das erleichtert Fehlersuche und Überarbeitung.

Gruß Jürgen

manfred_h 27. Jan 2007 11:06

Re: Procedure aufrufen
 
Hallo Jürgen
danke für den Tipp. :thumb:
habe das uch schon so wie Du es erläutert hast umgesetzt.
Dasmit dem TQuery.Params muss ich noch nachschauen aber danke.

Shalom
Manfred

Zitat:

Zitat von Jürgen Thomas
Hallo Manfred,

noch ein Vorschlag (auch wenn das Problem für Dich erledigt ist). Im Datenmodul kannst Du trennen zwischen dem eigentlichen Ereignis und der gewünschten Maßnahme:

Dieses Verfahren - Trennung von Ereignis und Ausführung - ist immer dann zu empfehlen, wenn die Ausführung von mehr als einer Stelle aus benötigt wird.

Zusatzhinweis: SELECT-Abfragen mit Parametern sollten nicht als ein langer String aufgebaut werden, sondern besser über Delphi-Referenz durchsuchenTQuery.Params; das erleichtert Fehlersuche und Überarbeitung.

Gruß Jürgen



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