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
Anlegen / Ändern einer Datenbank
-
Tilman Räger
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
Re: Anlegen / Ändern einer Datenbank
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.
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
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.
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
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 gemachtsoftwaremaker hat geschrieben: Warum sollte man eine Tabelle ohne SQL anlegen müssen? Verstehe den Sinn nicht, dies ohne SQL machen zu wollen.
Gruss
Tilman (Räger)
Re: Anlegen / Ändern einer Datenbank
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.
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
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. Schadeodt 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.
Tilman (Räger)