Schreib dir eine Klasse, die deine Felder in
SQL übersetzt.
Hier das Grundkonzept:
Delphi-Quellcode:
TCreateTableBuilder =
class(TObject)
private
FSQL : TStringList;
public
procedure AddStringField(
const fname:
string; len:integer; AllowNull:boolean);
virtual;
procedure AddBooleanField(
const fname:
string; AllowNull:boolean);
virtual;
...
property TableName:
string;
property SQL:TStrings
read FSQL;
end;
Vor dieser Klasse gibt es dann jeweils eine Ableitung für die verschiedenen Datenbanken.
Du könntest auch die vorhandenen Klassen TFieldDef und TFieldDefs benützen und daraus die CREATE TABLE Anweisung generieren.
ADOX funktioniert nur für MS
SQL Server und MS
Access zufriedenstellend.
Und dann gibt es noch ein Grundsatzproblem:
Es gibt z.B. Kunden, die möchten unbedingt Oracle einsetzen; andere möchten IBM DB2 (eine ganz furchtbare Datenbank!).
Gibt man diesen Wünschen nach, dann ist das fast schon die Garantie für's Scheitern.
Hast du genug Manpower, um die Anwendung auf allen diesen Datenbanken zu testen?
Reicht der kleinste gemeinsame Nenner aller Datenbanken aus um darauf ein vernüftiges Programm aufzusetzen?
Hast du genug Hardware um für jeden Datenbankhersteller einen Server bereitzuhalten?
Ist dir klar, dass manche Feldnamen auf Datenbank A erlaubt sind, dagegen auf Datenbank B ein Schlüsselwort darstellen?
Bei mehr als drei Datenbanken, die unterstützt werden sollen wird's dann extrem unproduktiv.
Man muss auch zwischen der eigenen Datenbank für die Anwendung und Fremddatenbanken unterscheiden.
Aus einer fremden Datenbank über
ODBC oder
ADO ein paar Daten aus einer Tabelle zu importieren ist
relativ einfach.
Solange es einen funktionierenden
ODBC/
ADO-Treiber gibt.
Für die eigene Datenbank sollte man sich aber auf ganz wenige Hersteller beschränken.