Ok ich gebe zu es ist ziemlich unübersichtlich geworden, nochmal zur Erklärung:
In meiner Datenbank hab ich eine Tabelle "Workstation". Diese hat neben einer ID auch Username etc.
In meinem
Model_Database.pas habe ich nun die
SQL Abfrage in einer Funktion die so aussieht:
Delphi-Quellcode:
// Wird in Model.TWorkstationSearch.DBSearch aufgerufen
function TWorkstationSearch.DBSearch;
var List: TList;
begin
List := TList.Create;
SQLQuery.SQL.Text := 'SELECT * FROM Workstation';
SQLQuery.Open;
while not SQLQuery.EOF do
begin
List.Add(SQLQuery.FieldByName('WorkstationID'));
SQLQuery.Next;
end;
Result := List;
end;
Die Funktion soll eine Liste mit den IDs der gefundenen Datensätze zurückliefern (Integer)
Nun benutzt eine Funktion in
Model.pas die obige Funktion (Beide Funktionen besitzen leider den gleichen Namen)
Delphi-Quellcode:
function TWorkstationSearch.DBSearch;
var
WsSearch: Model_Database.TWorkstationSearch;
MyWorkstation: TWorkstation;
List: TList;
WsList: TObjectList;
I: Integer;
begin
I := 0;
List := TList.Create;
List := WsSearch.DBSearch(); // Ruft Model_Database.TWorkstationSearch.DBSearch auf
// Die Liste sollte nun mit den Datenbank IDs befüllt sein
while (I<List.Count) do
begin
MyWorkstation := TWorkstation.Create(Integer(List[I])); // Ruft den constructor auf
WsList.Add(MyWorkstation); // <--- Hier wird einer TObjectList ein TWorkstation Objekt übergeben, ka ob das so geht...
Inc(I);
end;
Result := WsList;
end;
// wird in Model.TWorkstationSearch.DBSearch aufgerufen
constructor TWorkstation.Create(DatabaseID: Integer);
begin
ID := DatabaseID;
Username := 'testname'+IntToStr(DatabaseID);
Room := '123';
FormerUsername := 'alt';
Documentation := 'nc';
end;
In meiner
ViewController.pas möchte ich nun einen Testlauf durchführen:
Delphi-Quellcode:
procedure TMainForm.JvTransparentButton1Click(Sender: TObject);
var
MyWorkstation: Model.TWorkstation;
WsSearch: Model.TWorkstationSearch;
WsList: TObjectList; // <-- Hier will ich alle Workstations in eine Liste packen
I: Integer;
begin
I := 0;
WsList := WsSearch.DBSearch();
while (I<WsList.Count) do
begin
MyWorkstation := WsList[I]; // <--- [Pascal Fehler] ViewController.pas(40): E2010 Inkompatible Typen: 'TWorkstation' und 'TObject'
Showmessage(MyWorkstation.GetUsername);
Inc(I);
end;
end;