Hallo,
Ich versuch mich grade an einem Model View Controller. Hierzu habe ich unter anderem 2 Units die mit einander kommunizieren.
Model.pas
Model_Database.pas
Model_Database.pas sieht vereinfacht so aus:
Delphi-Quellcode:
unit Model_Database;
interface
uses
ZConnection,ZDataset,DBgrids, ZAbstractRODataset,
ZAbstractDataset,ZSysUtils,ZPlainMySqlDriver,
DB,Classes;
type
TDatabase =
class(TObject)
private
SQLQuery: TZQuery;
DataSource: TDataSource;
SQLConnection: TZConnection;
public
constructor Create();
function DBSearch: TList;
virtual;
abstract;
//...
end;
TWorkStationSearch =
class(TDatabase)
private
public
function DBSearch: TList;
override;
end;
implementation
uses Model;
//...
function TWorkstationSearch.DBSearch: TList;
override;
var List: TList;
begin
SQLQuery.SQL.Text := '
SELECT * FROM Workstations';
SQLQuery.Open;
while not SQLQuery.EOF
do
List.Add(SQLQuery.FieldByName('
WorkstationID'));
Result := List;
end;
end.
Model.pas sieht verkürtzt so aus
Delphi-Quellcode:
unit Model;
interface
uses
ZConnection,ZDataset,DBgrids, ZAbstractRODataset,
ZAbstractDataset,ZSysUtils,ZPlainMySqlDriver,
DB,Contnrs,Classes,SysUtils,
Model_Database;
type
TMain =
class(TObject)
private
public
function DBSearch(): TObjectList;
Virtual;
Abstract;
//...
end;
//...
TWorkstation =
class(TMain)
private
ID: Integer;
Username:
String;
Room:
String;
FormerUserName:
String;
Documentation:
String;
public
constructor Create(DatabaseID: Integer);
destructor Destroy();
function GetUsername:
String;
//...
end;
TWorkstationSearch =
class(TMain)
private
public
function DBSearch(): TObjectList;
Override;
end;
implementation
constructor TWorkstation.Create(DatabaseID: Integer);
begin
ID := DatabaseID;
Username := '
testname'+IntToStr(DatabaseID);
Room := '
123';
FormerUsername := '
alt';
Documentation := '
nc';
end;
function TWorkstation.GetUsername;
begin
Result := Username;
end;
function TWorkstationSearch.DBSearch;
var WsSearch: Model_Database.TWorkstationSearch;
var Workstation: TWorkstation;
var List: TList;
var WsList: TObjectList;
var I: Integer;
begin
I := 0;
List := WsSearch.DBSearch();
while (I<List.Count)
do
begin
Workstation.Create(List[I]);
// <------------------ FEHLERZEILE
WsList.Add(Workstation);
Workstation.Destroy;
Inc(I);
end;
Result := WsList;
end;
end.
Beim Kompilieren von Model.pas sagt er mir dann den folgenden Fehler:
Zitat:
[Pascal Fehler] Model.pas(279): E2010 Inkompatible Typen: 'Integer' und 'Pointer'
Wieso ist die Liste nicht eine Liste von Integern ? So habe ich es doch in obigen Funktion deklariert. Oder etwa nicht ?