das ist zunächst die form:
Delphi-Quellcode:
type
TSchedClerks = class(TForm)
btn_ok: TButton;
lst_clerks: TListBox;
Button1: TButton;
procedure btn_okClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure lst_clerksClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
FClerkBox: TClerkBox;
{ Private declarations }
public
constructor Create(AOwner: TComponent; SchedConfig: TSchedConfig); overload;
procedure BeforeDestruction; override;
procedure LoadClerks;
procedure ClearClerks;
{ Public declarations }
end;
und das hier ist die Klasse, die zur laufzeit erstellt wird, ein paar daten anzeigt und vor ihrer zerstörung die datenbank aktualisiert (falls was geändert wurde) und dann auch die listbox in der Form aktualisieren soll mit der SchedClerks.LoadClerks Methode
Delphi-Quellcode:
type
TClerkBox = class(TGroupBox)
btn_svupd: TButton;
lbl_clrkcap: TLabel;
txt_clerkname: TEdit;
private
FDataSetID: integer;
FChanged: boolean;
procedure SetID(id: integer);
procedure SetChanged(Sender: TObject);
procedure UpdateEntry;
procedure InsertEntry;
procedure ButtonAction(Sender: TObject);
public
property DataSetID: integer
read FDataSetID write SetID;
constructor Create(AOwner: TComponent); override;
procedure BeforeDestruction; override;
end;
und das hier ist die LoadClerks prozedur:
Delphi-Quellcode:
procedure TSchedClerks.LoadClerks;
var
Result: TResultID;
Row: TMyRow;
i: integer;
Clrk: TStaffObj;
begin
ClearClerks;
Result := FMySQL.Query('SELECT * FROM staff ORDER BY name');
if FMySQL.LastErrorNo = 0 then
begin
SetLength(Row,0);
for i := 0 to FMySQL.AffectedRows(Result)-1 do
begin
Row := FMySQL.FetchRow(Result);
Clrk := TStaffObj.Create;
clrk.Name := row[1];
clrk.ID := strtoint(row[0]);
lst_clerks.Items.AddObject(row[1],clrk);
end;
end;
FMySQL.FreeResult(Result);
end;
das mit dem TStaffObj habe ich eben der einfachheit nicht erwähnt. Weil ich zu jedem Namen auch noch die DatensatzID festhalten will, speicher ich das halt in einem kleinem Objekt in der ListBox
aber selbst wenn ich das sein lasse und nur lst_clerks.Items.Add(row[1]) mache, passiert ja nichts
also kann das keine fehlerursache sein
die prozedur ClearClerks macht nichts, ausser in einer schleife einmal durch die einträge der Listbox zu laufen und die gespeicherten Objekte zu zerstören, bevor ein lst_clerks.Items.Cler aufgerufen wird. (funktionert aber aus demselben grund, warum auch die LoadClerks nicht funktioniert anscheinend nicht)