QT TableView
Code: Alles auswählen
QSqlQuery query;
query.prepare("INSERT INTO person (forename, surname) "
"VALUES (:forename, :surname)");
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();
Naja die sind halt zum Daten lagern da.
Ach ich hab in meinem Buch den SQL Teil gefunden, den schau ich mir an.
Aber ich darf noch was fragen, wenn ich nicht weiter komm ok.
nvidia
das ist komisch.
Im Buch steht folgendes
CREATE TABLE artist (
id INTEGER PRIMARY KEY,
name VARCHAR(40) NOT NULL,
country VARCHAR(40));
CREATE TABLE cd (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
artistid INTEGER NOT NULL,
year INTEGER NOT NULL,
FOREIGN KEY (artistid) REFERENCES artist);
CREATE TABLE track (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
duration INTEGER NOT NULL,
cdid INTEGER NOT NULL,
FOREIGN KEY (cdid) REFERENCES cd);
Aber nichts wie man das einfügt. Der unterringelt mir das schön rot.
ich glaub ich hab das falsche Buch besorgt.
Im Buch steht folgendes
CREATE TABLE artist (
id INTEGER PRIMARY KEY,
name VARCHAR(40) NOT NULL,
country VARCHAR(40));
CREATE TABLE cd (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
artistid INTEGER NOT NULL,
year INTEGER NOT NULL,
FOREIGN KEY (artistid) REFERENCES artist);
CREATE TABLE track (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
duration INTEGER NOT NULL,
cdid INTEGER NOT NULL,
FOREIGN KEY (cdid) REFERENCES cd);
Aber nichts wie man das einfügt. Der unterringelt mir das schön rot.
ich glaub ich hab das falsche Buch besorgt.
Das ist ein ganz normaler SQL-Query.Nvidia hat geschrieben:Aber nichts wie man das einfügt. Der unterringelt mir das schön rot.
Code: Alles auswählen
QSqlQuery query ("CREATE TABLE <blabla usw.>");
query.exec();QT TableView
Hallo,
das Buch ist schon richtig, aber beim Beispiel geht es nicht um QT sondern
um sql, das ist eine eigene Sprache aus der Steinzeit der EDV, mit ihr kannst du aus Millionen von Datensätzen und Tausenden von Tabellen innerhalb von wenigen Sekunden Daten erhalten. Vorher müssen diese Tabellen angelegt und befüllt werden.
Im deinen Beispiel werden vier leere Tabellen mit einer der sql-Sprachen
angelegt. Hierfür brauchst du weitere Infos wie man sql arbeitet.
Ganz bekannt ist Mysql oder auch postgresql. Es gibt auch kommerzielle
Datenbanken für mehrere Tausend Euros.
bk
das Buch ist schon richtig, aber beim Beispiel geht es nicht um QT sondern
um sql, das ist eine eigene Sprache aus der Steinzeit der EDV, mit ihr kannst du aus Millionen von Datensätzen und Tausenden von Tabellen innerhalb von wenigen Sekunden Daten erhalten. Vorher müssen diese Tabellen angelegt und befüllt werden.
Im deinen Beispiel werden vier leere Tabellen mit einer der sql-Sprachen
angelegt. Hierfür brauchst du weitere Infos wie man sql arbeitet.
Ganz bekannt ist Mysql oder auch postgresql. Es gibt auch kommerzielle
Datenbanken für mehrere Tausend Euros.
bk
gibst dann schon eine weiterentwicklung von sql?
gibt es einen großen unterschied zwischen den datenbank? ist sqlite gut?
also mein Code sieht nun so aus:
gibt es einen großen unterschied zwischen den datenbank? ist sqlite gut?
also mein Code sieht nun so aus:
Code: Alles auswählen
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("Hello");
db.open();
QSqlQuery query("CREATE TABLE person (forename char(20),surname char(20) ");
query.prepare("INSERT INTO person (forename, surname) "
"VALUES (:forename, :surname)");
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();
Code: Alles auswählen
model->setQuery("SELECT firstname, surname FROM person");
QT TableView
sqlite kenn ich nicht - aber ich vermute, dass man den Namen ..lite bewusst gewählt hat. Die meisten Infos gibt es über mysql, ich verwende postgresql.
mfg bk
mfg bk
Es gibt große Unterschiede. Angefangen bei der Lizenz, gibt es verschiedene Erweiterungen, die bestimmte Sachen zusätzlich zum SQL anbieten.Nvidia hat geschrieben:gibst dann schon eine weiterentwicklung von sql?
gibt es einen großen unterschied zwischen den datenbank? ist sqlite gut?
sqlite ist recht minimal, das aber für die meisten Desktop-Programme zum Speichern reichen sollte. Speziell dadurch, dass es mit einem normalen File arbeitet, und keine laufenden Server samt DB-Benutzereinrichtung braucht.
Für ein Forum würde ich jetzt nicht unbedingt sqlite nehmen. Zum Testen, für die ersten Gehversuche mit Datenbanken und Queries usw. würde ich sqlite nehmen, da es die geringsten Einstiegshürden hat. Für später kannst du ja dann Testen, ob SQLITE noch reicht. Dank der Abstraktion in Qt ist das Umstellen ja recht wenig Aufwand.
Und in deinem letzten Code fehlt mir das "query.exec()", das dann auch tatsächlich die Tabellen anlegt!
Wenn die Tabellen schon existieren gibt das einen Fehler.
Du kannst das recht einfach machen, wenn du die CREATE TABLE-Anweisung erweiterst:
Code: Alles auswählen
CREATE TABLE IF NOT EXISTSich versteh grat nicht mehr was da fehlt
die Datenbank wird erstellt und geöffnet.
Der Table wird erstellt und zwei 2 Daten werden eingefügt.
Der Query wird ausgeführt.
Und mit model->setQuery("SELECT firstname FROM person");
werden die daten dem Model und dann dem TableView übergeben.
tableView->setModel(model);
Aber wieso ist er immer noch leer
die Datenbank wird erstellt und geöffnet.
Der Table wird erstellt und zwei 2 Daten werden eingefügt.
Der Query wird ausgeführt.
Und mit model->setQuery("SELECT firstname FROM person");
werden die daten dem Model und dann dem TableView übergeben.
tableView->setModel(model);
Aber wieso ist er immer noch leer
du meinst also, dieses "createConnection()" steht da einfach nur so zum Spass....?Nvidia hat geschrieben:Betrug xD
die brauchen so was nicht.
http://doc.trolltech.com/4.6/sql-cachedtable.html
was meint dennUnd mit model->setQuery("SELECT firstname FROM person");
werden die daten dem Model und dann dem TableView übergeben.
tableView->setModel(model);
Aber wieso ist er immer noch leer Sad
Code: Alles auswählen
if (model.lastError().isValid())
qDebug() << model.lastError();[EDIT]
Ach ja: "forename" != "firstname" ......
die connection hab ich.
das hab mit dem forename hab ich ausgebessert.
Ok ich krieg den Fehler es gibt keinen person table
hier nochmal der code:
das hab mit dem forename hab ich ausgebessert.
Ok ich krieg den Fehler es gibt keinen person table
hier nochmal der code:
Code: Alles auswählen
#ifndef SQL_H
#define SQL_H
#include <QSqlQuery>
#include <QSqlDatabase>
static void database()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("Hello");
db.open();
QSqlQuery query("CREATE TABLE person (firstname char(20),surname char(20)");
query.prepare("INSERT INTO person (firstname, surname) "
"VALUES (:firstname, :surname)");
query.bindValue(":firstname", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();
}
#endif // SQL_H
Code: Alles auswählen
#include <QApplication>
#include <QtGui>
#include "mainwindow.h"
#include "SQL.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
database();
MainWindow Q;
Q.resize(880,550);
Q.show();
return app.exec();
}
Code: Alles auswählen
model = new QSqlQueryModel(new_view);
model->setHeaderData(0, Qt::Horizontal, tr("First name"));
model->setQuery("SELECT firstname FROM person");
qDebug() << model->lastError();
Hab ich doch oben schon geschrieben, nochmal ausführlicher: Separates Query zum Erstellen der Tabelle, idealerweise mit "CREATE TABLE IF NOT EXISTS", dieses Query ausführen. Danach dein neues Query mit dem Insert.
// edit:
Hier einfach mal passender Code...
Wenn das mit dem IF NOT EXISTS nicht funktionieren sollte (hab es mit SQLite noch nicht verwendet) lass es weg. Dann solltest du aber prüfen, ob die Tabelle schon existiert.
// edit:
Hier einfach mal passender Code...
Code: Alles auswählen
static void database()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("Hello");
db.open();
QSqlQuery tableQuery("CREATE TABLE IF NOT EXISTS person (firstname char(20),surname char(20)");
tableQuery.exec();
QSqlQuery query;
query.prepare("INSERT INTO person (firstname, surname) "
"VALUES (:firstname, :surname)");
query.bindValue(":firstname", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();
}
Zuletzt geändert von franzf am 29. April 2010 18:08, insgesamt 1-mal geändert.