![]() |
Re: Invalid Pointer TObjectList
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:
WORKSTATION SUCH FUNKTION
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;
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz