Anlegen / Ändern einer Datenbank

Alles rund um die Programmierung mit Qt
Antworten
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Anlegen / Ändern einer Datenbank

Beitrag von Tilman Räger »

Hallo,

nachdem ich mein Programm mit MySQL zum Laufen gebracht habe, versuche ich nun, noch SQLite einzubauen. Dabei habe ich mich jetzt ein wenig mehr in die von Qt bereitgestellte Funktionalität eingelesen (bisher habe ich eigentlich nur mittels QSqlQuery auf die extern erstellte Datenbank zugegegriffen). Was mir noch ein wenig unklar ist (und beim Lesen der Doku leider bisher auch noch nicht klarer geworden ist) - inwieweit kann ich die Struktur der Datenbank mit Qt-Bordmitteln (also ohne SQL!) manipulieren. Felder und Indices anlegen funktioniert über die Klassen QSqlRecord, QSqlField und QSqlIndex anscheinend (noch nicht getestet) - aber kann ich z.B. auch eine Tabelle ganz neu erzeugen? Da habe ich bisher nichts gefunden. Vielleicht kann mir ja jemand auf die Sprünge helfen.

Gruss
Tilman Räger
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Anlegen / Ändern einer Datenbank

Beitrag von odt »

Meines Wissens bietet Qt nur DML (also Select, Insert, Update, Delete), hat aber keinen Layer für DDL. Hierfür setze ich db-spezifisches SQL für zb den create table ein.
Die Infos, die Qt über die Datenstrukturen zurückliefert, sind rudimentär. Dass Du z.B. eine neue Column ohne SQL-Statement erstellen kannst, würde mich erstaunen.
ODT Informatik GmbH, Reto Tschofenig
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

Re: Anlegen / Ändern einer Datenbank

Beitrag von softwaremaker »

Warum sollte man eine Tabelle ohne SQL anlegen müssen? Verstehe den Sinn nicht, dies ohne SQL machen zu wollen.
Auch ist mir bei Qt keine SQL-Ersatzimplementierung von DML (Select, Insert, Update, Delete) bekannt. Ergibt ja auch keinen Sinn.
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Re: Anlegen / Ändern einer Datenbank

Beitrag von Tilman Räger »

softwaremaker hat geschrieben: Warum sollte man eine Tabelle ohne SQL anlegen müssen? Verstehe den Sinn nicht, dies ohne SQL machen zu wollen.
Nun, ich denke, es ist in erster Linie einmal unabhängiger von der jeweiligen Datenbank (bzw. die Qt-Entwickler haben sich die Mühe schon mal gemacht :-). Wenn ich z.B. die Struktur einer Tabelle abfragen will, um herauszufinden ob sie mit der von mir benötigten übereinstimmt oder vielleicht von der Vorgängerversion des Programms stammt, ist es einfacher dies mit Qt-Bordmitteln für alle Datenbank-Typen machen zu können anstelle es für jede Datenbank neu programmieren zu müssen. Ebenso die Neuerstellung oder Strukturupdates - wenn ich mit Qt-Mitteln sagen kann die oder die Änderung ist es einfacher als wenn ich für jede SQL-Variante einen neuen Befehl schreiben muss. Nachteil ist natürlich, das mir ggf. Feinheiten der jeweiligen Datenbank verloren gehen - aber wenn ich ein Programm erstellen will, das mit mehren DB-Engines identisch (oder einigermaßen identisch) funktioniert, muss ich bei den Feinheiten eh Kompromisse eingehen.

Gruss
Tilman (Räger)
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Anlegen / Ändern einer Datenbank

Beitrag von odt »

Genau aus diesen Gründen hatte ich mir einen datenbank-unabhängigen Schema-Syncer gebaut. Beim Programmstart wird das Schema der Datenbank ausgelesen und mit dem generierten Soll-Schema abgeglichen und die create tables beziehungs weise alter tables automatisch ausgeführt. Daher ist mein Db-Schema immer aktuell. Allerdings dauert das Schema aus der Db lesen (zumindest bei Oracle) einige Sekunden, was aber serverseitig passiert und in meiner Architektur akzeptabel ist. Das Auslesen des Schemas (1) sowie die konkreten Create-, Alter- und Drop-Statements (SQL-Strings) musste ich je Datenbank-Typ machen. Die rund 1k-Zeilen Code haben sich x mal gelohnt!

Nachtrag (1): Für die Tabellen und Columns verwende ich QSqlDatabase::record, was ich heute aber nicht mehr so machen würde. Einige Datentypen kann ich nicht 1 zu 1 von dem Qt-Db-Typ zu meinem richtigen Datentyp mappen. Ich empfehle Dir ebenfalls einen Db-spezfischen Query zu bauen. Spätestens bei den Constraints reicht die Qt-Funktionalität eh nicht mehr.
ODT Informatik GmbH, Reto Tschofenig
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Re: Anlegen / Ändern einer Datenbank

Beitrag von Tilman Räger »

odt hat geschrieben: ...Ich empfehle Dir ebenfalls einen Db-spezfischen Query zu bauen. Spätestens bei den Constraints reicht die Qt-Funktionalität eh nicht mehr.
Ich hatte es für MySQL ähnlich angelegt (also extra Klassen für jede Datenbank, die die Datenbankspezifika kapseln, hatte allerdings die Hoffnung, mir die Arbeit etwas erleichtern zu können. Schade ;-)


Tilman (Räger)
Antworten