Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Query OnUpdate-Procedure zur Laufzeit (https://www.delphipraxis.net/191226-query-onupdate-procedure-zur-laufzeit.html)

Ykcim 22. Dez 2016 10:55

AW: Query OnUpdate-Procedure zur Laufzeit
 
Ähm, TBx könnte recht haben, dass ich mich mit der Procedure vertan habe...:oops::?:

Das kann ich aber erst heute Abend testen, weil ich dann erst wieder die richtige Entwicklungsumgebung verfügbar habe...

Möglicherweise werde ich mich dann ganz kleinlaut melden...

Trotzdem wäre ich an einer Antwort interessiert, wie ich die Procedure in Create-Statement richtig zuweise...

Vielen Dank
Patrick

mkinzler 22. Dez 2016 10:58

AW: Query OnUpdate-Procedure zur Laufzeit
 
Delphi-Quellcode:
Ich habe noch nie eine Signatur mitgegeben, wenn ich im Create-Statement einer Event-Procedure eine andere Procedure zugewiesen habe.
Musst und darfst Du auch nicht. Die dort angegebene Methode muss aber die richtige Signatur haben, was bei der zugewiesenen nicht der Fall ist.

himitsu 22. Dez 2016 11:06

AW: Query OnUpdate-Procedure zur Laufzeit
 
Strg+Linksklick auf beide Seiten vom :=
dann landet man bei den Deklarationen und sieht ob es richtig aussieht.

nahpets 22. Dez 2016 11:47

AW: Query OnUpdate-Procedure zur Laufzeit
 
Was ich nicht verstehe: Du hast einerseits dashier:
Delphi-Quellcode:
private
  procedure TicketAfterScroll(DataSet: TDataSet);
  procedure TicketAfterInsert (DataSet: TDataSet);
  //Die nachstehende Procedure möchte ich im Create der BeforeUpdateExecute-Ereignis der FMyQuery_Ticket zuweisen
  procedure TicketBeforeUpdate(Sender: TDataSet; var StatementTypes: TStatementTypes; var Params: TDAParams);
Und andererseits jenes:
Delphi-Quellcode:
  //Object-Procedure
  FMyQuery_Ticket.AfterScroll:=TicketAfterScroll;
  FMyQuery_Ticket.AfterInsert:=TicketAfterInsert;
  FMyQuery_Ticket.BeforeUpdateExecute:=Query_Ticket_Update; //Hier kommt der Fehler
Warum machst Du bei der dritten Zuweisung was anderes, als bei den ersten beiden Zuweisungen?
Delphi-Quellcode:
  FMyQuery_Ticket.BeforeUpdate:=TicketBeforeUpdate; //Hier kam der Fehler
sollte Dein Problem beheben.
Falls jedoch TicketBeforeUpdate hier die falsche Routine sein sollte, dann musst Du Query_Ticket_Update ändern.
Damit Query_Ticket_Update an der von Dir gewünschten Stelle zuweisbar wird, müsste es vermutlich so aussehen:
Delphi-Quellcode:
procedure Query_Ticket_Update(Sender: TDataSet; var StatementTypes: TStatementTypes; var Params: TDAParams);

Allerdings erscheint mir das von der Programmlogik her dann nicht sinnvoll.

Vermutlich möchtest Du eher sowas:
Delphi-Quellcode:
  private
    procedure TicketAfterScroll(DataSet: TDataSet);
    procedure TicketAfterInsert (DataSet: TDataSet);
    //Die nachstehende Procedure möchte ich im Create der BeforeUpdateExecute-Ereignis der FMyQuery_Ticket zuweisen
    procedure TicketBeforeUpdate(Sender: TDataSet; var StatementTypes: TStatementTypes; var Params: TDAParams);

    procedure Query_Ticket_SQL;
    procedure Query_Ticket_Insert;
    procedure Query_Ticket_Update;

...

procedure TDBMySQL.Query_Ticket_Update;
begin
  FMyQuery_Ticket.SQLUpdate.Add('update ticket set '+
                                'ticket_thema= :ticket_thema, '+
                                'kategorie_id= :kategorie_id, '+
                                'ticket_eroeffnung= :eroeffnung, '+
                                'ticket_schliessung= :schliessung, '+
                                'status_id= :status_id, '+
                                'computer_id= :computer_id, '+
                                'deleted= :deleted '+
                                'where ticket_id= :ticket_id');
end;

//Hier sind die Einzelheiten der Query, die dem BeforeUpdateExecute-Ereignis zugewiesen werden soll
procedure TDBMySQL.TicketBeforeUpdate(Sender: TDataSet; var StatementTypes: TStatementTypes; var Params: TDAParams);
begin
  // Achtung, das geht so nur einmal.
  // Entweder FMyQuery_Ticket.SQLUpdate.Clear hierhin oder in die folgende Prozedur
  // oder nochmal die Programmlogik überdenken. Die ist noch nicht ganz schlüssig.
  Query_Ticket_Update;
  // Sender ist ein TDataSet, warum hier noch Sender as TDataSet?
  // (Sender as TDataSet).FieldByName('ticket_thema').AsString:=FMyDataSource_Ticket.DataSet.FieldByName('ticket_thema').AsString;
  Sender.FieldByName('ticket_thema').AsString:=FMyDataSource_Ticket.DataSet.FieldByName('ticket_thema').AsString;
  Sender.FieldByName('kategorie_id').AsInteger:=FMyDataSource_Ticket.DataSet.FieldByName('kategorie_id').AsInteger;
  Sender.FieldByName('ticket_eroeffnung').AsDateTime:=FMyDataSource_Ticket.DataSet.FieldByName('ticket_eroeffnung').AsDateTime;
  Sender.FieldByName('ticket_schliessung').AsDateTime:=FMyDataSource_Ticket.DataSet.FieldByName('ticket_schliessung').AsDateTime;
  Sender.FieldByName('status_id').AsInteger:=FMyDataSource_Ticket.DataSet.FieldByName('status_id').AsInteger;
  Sender.FieldByName('computer_id').AsString:=FMyDataSource_Ticket.DataSet.FieldByName('computer_id').AsString;
  Sender.FieldByName('ticket_thema').AsString:=FMyDataSource_Ticket.DataSet.FieldByName('ticket_thema').AsString;
  Sender.FieldByName('deleted').AsBoolean:=false;
end;

Ykcim 23. Dez 2016 14:40

AW: Query OnUpdate-Procedure zur Laufzeit
 
Hallo Zusammen,

erst einmal ein Zwischenstand: TBX hatte Recht und ich ... hatte die falsche Procedur angegeben :oops::oops::oops:. Mit der richtigen kam der Fehler nicht.

Leider funktioniert das Update dennoch nicht, was ich mir jetzt zwischen den Tagen mal ansehen werde.

Vielen Dank für die Unterstützung - im gesamten Jahr!

Allen schöne Weihnachten und ein gesegnetes Jahr 2017.

Gruß
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.
Seite 2 von 2     12   

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