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;