Problem, Anbindung und Einfügen SQLite-Datenbank
Verfasst: 26. Mai 2011 20:29
Guten Abend Leute,
ich habe vor kurzem angefangen, mich für Datenbanken zu interessieren und wollte für einen Freund ein kleines Tool basteln. Obwohl ich mir eigentlich ziemlich sicher bin, dass ich nicht viel bzw. nichts Relevantes anders mache, als in den vielen Quellen dazu, klappt es bei mir nicht so recht und ich verstehe überhaupt nicht, warum.
Der Code:
Der Dialog soll nach dem click() auf den Absenden-Button die Funtkion datenSpeichern() aufrufen, die dann die Daten aus den QLineEdits nimmt und eigentlich einfügen soll:). Beim Kompilieren bekomme ich die folgende Fehlermeldung:
Und das ganze eben neun Mal.
Was ich nicht daran verstehe, in der Doku gibt es ja das schöne Beispiel, in dem nach dem Platzhalter einfach ein String eingefügt wird. Was anderes übergebe ich ja auch nicht!????
Wie gesagt, im Forum selber habe ich auch schon ein paar beiträge finden können, die mir geholfen haben, aber da wird es nicht anders gemacht.
Ich habe es auch schon so gemacht, dass ich die Datenbankanbindung auch erst in der Funktion ausführen lassen. Aber das scheint ja auch nicht das Problem zu sein.
Noch etwas, das vllt. allgemein wichtig ist und wo ich Euch mal um Hilfe bitten würde, ich habe mit dem SQLite Database Browser eine Datenbank mit Namen Kontakte.db angelegt und einer Tabelle Firmenkontakte. Dann jeweils die 9 Felder und denen hatte ich zuerst einfach als Typ TEXT zugewisen und dachte, das sie ja QStrings speichern sollen, ändere ich das manuell auf QStrings. Ist das überhaupt in Ordnung oder sollte ich das ganz schnell wieder ändern?
Vielen Dank für jede Hilfe. Grüße,
Marcus
ich habe vor kurzem angefangen, mich für Datenbanken zu interessieren und wollte für einen Freund ein kleines Tool basteln. Obwohl ich mir eigentlich ziemlich sicher bin, dass ich nicht viel bzw. nichts Relevantes anders mache, als in den vielen Quellen dazu, klappt es bei mir nicht so recht und ich verstehe überhaupt nicht, warum.
Der Code:
Code: Alles auswählen
#ifndef KONTAKT_H
#define KONTAKT_H
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QSqlDatabase>
#include <QSqlQuery>
class Kontakt : public QDialog
{
Q_OBJECT
public:
Kontakt();
QSqlDatabase db;
public slots:
void datenSpeichern();
private:
QLabel *Kundennummer, *Firmenname, *Firmenanschrift, *Ansprechpartner,
*Telefonnummer, *Durchwahl, *Faxnummer, *EMail, *Homepage, *Branche;
QLineEdit *kunde, *firma, *anschrift, *ansprechprt, *telefon, *durchw, *fax,
*mail, *homep, *bran;
QPushButton *Absenden;
QSqlQuery query;
};
#endif // KONTAKT_H
Code: Alles auswählen
#include "kontakt.h"
Kontakt::Kontakt()
{
/* ----------------------------------------------------------- */
setWindowTitle("Neuen Kontakt anlegen");
setFixedSize(600, 480);
/* ----------------------------------------------------------- */
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("/Users/marcusbreuer/Desktop/Kontakte.db");
/* ----------------------------------------------------------- */
Kundennummer = new QLabel("Kundennummer:", this);
Kundennummer->setGeometry(15,15,120,30);
kunde = new QLineEdit(this);
kunde->setGeometry(150,15,435,30);
Firmenname = new QLabel("Firma:", this);
Firmenname->setGeometry(15,60,120,30);
firma = new QLineEdit(this);
firma->setGeometry(150,60,435,30);
Firmenanschrift = new QLabel("Anschrift:", this);
Firmenanschrift->setGeometry(15,105,120,30);
anschrift = new QLineEdit(this);
anschrift->setGeometry(150,105,435,30);
Ansprechpartner = new QLabel("Ansprechpartner:", this);
Ansprechpartner->setGeometry(15,150,120,30);
ansprechprt = new QLineEdit(this);
ansprechprt->setGeometry(150,150,435,30);
Telefonnummer = new QLabel("Telefon:", this);
Telefonnummer->setGeometry(15,195,120,30);
telefon = new QLineEdit(this);
telefon->setGeometry(150,195,435,30);
Faxnummer = new QLabel("Fax:", this);
Faxnummer->setGeometry(15,240,120,30);
fax = new QLineEdit(this);
fax->setGeometry(150,240,435,30);
EMail = new QLabel("E-Mail:", this);
EMail->setGeometry(15,285,120,30);
mail = new QLineEdit(this);
mail->setGeometry(150,285,435,30);
Homepage = new QLabel("Homepage:", this);
Homepage->setGeometry(15,330,120,30);
homep = new QLineEdit(this);
homep->setGeometry(150,330,435,30);
Branche = new QLabel("Branche:", this);
Branche->setGeometry(15,375,120,30);
bran = new QLineEdit(this);
bran->setGeometry(150,375,435,30);
/* ----------------------------------------------------------- */
Absenden = new QPushButton("Ok", this);
Absenden->setGeometry(470,430,115,40);
/* ----------------------------------------------------------- */
connect(Absenden, SIGNAL(clicked()),
this, SLOT(datenSpeichern()));
}
void Kontakt::datenSpeichern() {
query.prepare(
"INSERT INTO Firmenkontakte(Kundennummer,Firma,Anschrift,Ansprechpartner,Telefonnummer,Fax,Mail,Homepage,Branche)"
"VALUES (:Kundennummer,:Firma,:Anschrift,:Ansprechpartner,:Telefonnummer,:Fax,:Mail,:Homepage,:Branche)");
query.bindValue(":Kundennummer" , kunde->text());
query.bindValue(":Firma" , firma->text());
query.bindValue(":Anschrift" , anschrift->text());
query.bindValue(":Ansprechpartner" , ansprechprt->text());
query.bindValue(":Telefonnummer" , telefon->text());
query.bindValue(":Fax" , fax->text());
query.bindValue(":Mail" , mail->text());
query.bindValue(":Homepage" , homep->text());
query.bindValue(":Branche" , bran->text());
query.exec();
}Code: Alles auswählen
/Users/marcusbreuer/Desktop/Datenbank-build-desktop/../Datenbank/kontakt.cpp:73: Fehler:no matching function for call to 'QSqlQuery::bindValue(const char [14], QString)'
/Users/marcusbreuer/Desktop/Datenbank-build-desktop/../../lib/QtSql.framework/Versions/4/Headers/qsqlquery.h:111: candidates are: void QSqlQuery::bindValue(const QString&, const QVariant&, QSql::ParamType)
/Users/marcusbreuer/Desktop/Datenbank-build-desktop/../../lib/QtSql.framework/Versions/4/Headers/qsqlquery.h:112: void QSqlQuery::bindValue(int, const QVariant&, QSql::ParamType)
Was ich nicht daran verstehe, in der Doku gibt es ja das schöne Beispiel, in dem nach dem Platzhalter einfach ein String eingefügt wird. Was anderes übergebe ich ja auch nicht!????
Wie gesagt, im Forum selber habe ich auch schon ein paar beiträge finden können, die mir geholfen haben, aber da wird es nicht anders gemacht.
Ich habe es auch schon so gemacht, dass ich die Datenbankanbindung auch erst in der Funktion ausführen lassen. Aber das scheint ja auch nicht das Problem zu sein.
Noch etwas, das vllt. allgemein wichtig ist und wo ich Euch mal um Hilfe bitten würde, ich habe mit dem SQLite Database Browser eine Datenbank mit Namen Kontakte.db angelegt und einer Tabelle Firmenkontakte. Dann jeweils die 9 Felder und denen hatte ich zuerst einfach als Typ TEXT zugewisen und dachte, das sie ja QStrings speichern sollen, ändere ich das manuell auf QStrings. Ist das überhaupt in Ordnung oder sollte ich das ganz schnell wieder ändern?
Vielen Dank für jede Hilfe. Grüße,
Marcus