Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#14

AW: Query OnUpdate-Procedure zur Laufzeit

  Alt 22. Dez 2016, 12:47
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?
  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:
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;
  Mit Zitat antworten Zitat