Ich hab extreme Performance- und Speicherprobleme, sprich ich weiß nicht wie genau ich mit den Objekten umgehen soll. Hier mal ein Auszug aus meinem Code:
MONITOR SUCH FUNKTION
Delphi-Quellcode:
function TMonitorSearch.DBSearch(Modus: String='vague'; ID: Integer=0;
Model: String=''; InventoryNumber: String=''): TObjectList;
var
FMList: TObjectList;
I: Integer;
FMyMonitor: TMonitor;
begin
FMList := TObjectList.Create;
// Search in the database for monitors by using the criteria
FMQuery.Close;
FMQuery.SQL.Text := 'SELECT ';
//etc
FMQuery.Open;
while not FMQuery.EOF do
begin
FMyMonitor := TMonitor.Create;
// Use search result to create a new monitor object
FMyMonitor.SetID(FMQuery.FieldByName('MonitorID').AsInteger);
FMyMonitor.SetModel(FMQuery.FieldByName('Modell').AsString);
//etc
// Add monitor to a list of monitor ojects
FMList.Add(FMyMonitor);
FMQuery.Next;
end;
Result := FMList; // DIE FUNKTION LIEFERT ALSO EINE LISTE VON MONITOR OBJECTS ZURUECK
end;
WORKSTATION SUCH FUNKTION
Delphi-Quellcode:
function TWorkstationSearch.DBSearch(Modus: String='vague'; ID: Integer=0;
Computername: String=''; Model: String=''; InventoryNumber: String='';
Room: String=''; Username: String=''): TObjectList;
var
FWSList: TObjectList;
FMList: TObjectList;
FMyWorkstation: TWorkstation;
I: Integer;
begin
FWSList := TObjectList.Create;
// Search in the database for workstations by using the criteria
FWQuery.Close;
FWQuery.SQL.Text := 'SELECT';
//etc
FWQuery.Open;
while not FWQuery.EOF do
begin
// Use search result to create a new workstation object
FMyWorkstation := TWorkstation.Create;
FMyWorkstation.SetID(FWQuery.FieldByName('ArbeitsplatzID').AsInteger);
FMyWorkstation.SetMonitor1ID(FWQuery.FieldByName('MonitorID').AsInteger);
//etc
// Add workstation to a list of workstation ojects
FWSList.Add(FMyWorkstation);
FWQuery.Next;
end;
FWQuery.Free;
Result := FWSList; // DIE FUNKTION LIEFERT ALSO EINE LISTE VON WORKSTATION OBJECTS ZURUECK
end;
Workstation Suche; Beinhaltet die Funktionsaufrufe
Delphi-Quellcode:
//procedure BTNCLICK
//etc
FWSearch := Model.TWorkstationSearch.Create;
FMSearch := Model.TMonitorSearch.Create;
//etc
else if (RBtnWorkstation.Checked) then
{$REGION RBTNWorkstation}
begin
Grid.ColWidths[0] := 25;
Grid.ColWidths[1] := 60;
//etc
Grid.Cells[0,0] := 'ID';
Grid.Cells[1,0] := '';
//etc
FWList := FWSearch.DBSearch('vague',FMyID,FMyComputername,FMyModel,
FMyInventoryNumber,FMyRoom,FMyUsername); // FWList wird mit WORKSTAION objects befüllt durch den Funktionsaufruf
// Alle Workstation Objekte nun durchlaufen:
I := 0;
while (I<FWList.Count) do
begin
FMyWorkstation := FWList[I] as TWorkstation;
// Fill the Grid with the information of the FMyWorkstation object
Grid.Cells[0,Grid.RowCount-1] := IntToStr(FMyWorkstation.GetID);
Grid.Cells[1,Grid.RowCount-1] := FMyWorkstation.Getname;
//etc
// Get Monitor Information
FMyMonitorID := FMyWorkstation.GetMonitor1ID;
FMList := FMSearch.DBSearch('vague',FMyMonitorID);
FMyMonitor := FMList[0] as Model.TMonitor;
Grid.Cells[3,Grid.RowCount-1] := FMyMonitor.GetModel;
FMyMonitor.Free;
Grid.RowCount := Grid.RowCount +1;
Inc(I);
end;
end
Wäre jemand so freundlich und würde das kurz verstehen und mir sagen wo die Probleme liegen, dass die Workstation Datenbank abfrage so viel Zeit und Speicher in Anspruch nimmt ? Würde es naemlich sehr gerne objektorientiert lösen.