Oder für auf die Schnelle mit Boardmitteln war dein Ansatz ja gar nicht so schlecht.
Also 2 Klassen bauen, die sich auf der Schnittstellenseite zu deinem Programm absolut identisch verhalten müssen (klar
) aber auf der
DB-Seite natürlich je nach Dialekt reagieren sollen. Dabei sind reine
SQL-Statements die keine Records liefern ja noch relativ harmlos. Allerdings wäre es wahrscheinlich besser nicht wirklich den
Query (so wie in deinem Beispiel) als Parameter zu übergeben, sondern pro Funktionalität auch eine function/procedure (ähnlich den stored procedures) und dabei nur die Parameter übergeben.
Beispiel: Ein Datensatz soll gelöscht werden
Delphi-Quellcode:
// einmal für MSSQL
function TMSSQL.LoescheDatensatz(
const RecordID : integer ) : boolean;
begin
...
end;
// und einmal für MYSQL
function TMYSQL.LoescheDatensatz(
const RecordID : integer ) : boolean;
begin
...
end;
In dem Fall, dass du auch noch Daten haben möchtest, dann kannst du dir einfach das TDataset zurückgeben lassen:
Delphi-Quellcode:
// einmal für MSSQL
function TMSSQL.HoleDatensatz(
const RecordID : integer;
var Dataset : TDataset ) : boolean;
begin
...
end;
// und einmal für MYSQL
function TMYSQL.HoleDatensatz(
const RecordID : integer;
var Dataset : TDataset ) : boolean;
begin
...
end;
Eine komplette Abstraktion ist zwar insgesamt gesehen (vor allem bei wachsenden Projekten) besser (Pflege, Handhabung, Flexibilität, ...) aber man will ja klein anfangen und das hier ist dann nicht ganz soweit weg von dem, was du bis jetzt hast, aber schon etwas anders.
cu
Oliver