Einzelnen Beitrag anzeigen

rudi_

Registriert seit: 10. Okt 2004
Ort: Neuss
34 Beiträge
 
Delphi 7 Professional
 
#4

Re: TListBox zugriffs Problem

  Alt 16. Okt 2004, 14:37
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)
Wie Sie sehn,
sehn Sie nichts.
  Mit Zitat antworten Zitat