das hört sich interessant an, aber wie macht man das in der Praxis?
Das sieht in der Deklaration ähnlich aus. Man hat nur keine Vererbung und kann auch ganz andere Objekte verwenden, solange diese nur das Interface IDatabase implementieren:
Delphi-Quellcode:
type
IDatabase =
interface
['
{74C42FE6-FDBD-477E-A74E-CC5841CC8A30}']
procedure ConnectDB(host,user,pw:
String);
procedure SelectDB(DBName:
String);
virtual;
procedure SQLQuery(
Query:
String;
var Cols:TCols;
var Rows:TRows);
end;
TMySQL =
class(TInterfacedObject, IDatabase)
public
procedure ConnectDB(host,user,pw:
String);
procedure SelectDB(DBName:
String);
procedure SQLQuery(
Query:
String;
var Cols:TCols;
var Rows:TRows);
end;
TMySQLPhpTunnel =
class(TInterfacedObject, IDatabase)
public
procedure ConnectDB(host,user,pw:
String);
procedure SelectDB(DBName:
String);
procedure SQLQuery(
Query:
String;
var Cols:TCols;
var Rows:TRows);
end;
implementation
procedure ZeigeInGui(
SQL: IDatabase);
//<----- wichtig ist hier!
var
i,j: Integer;
begin
SQL.SQLQuery('
SELECT * FROM TestTabelle');
for i:=0
to High(Rows[0])
for j:=0
to High(Rows)
do StringGrid1.Cells[i,j] rows[i,j];
//nur exemplarisch
end;