[gelöst] Datenbankzugriff SQLite - undefined reference to -
Verfasst: 27. November 2006 00:13
Hallo zusammen,
ich versuche mittels der Klassen QSQL... eine Testdatenbanken anzulegen. Beim kompilieren mit make kommt der anscheinend klassische Fehler "undefined reference to"! Hat meines Erachtens nichts mit dem in diesem Forum viel diskutierten vtable zu tun!!
main.cpp
Die ganzen SQL-Codezeilen standen ursprünglich einer separaten Headerdatei "connection.h". Hier kamen aber genau die gleichen Fehlermeldungen.
tableeditor.cpp
tableeditor.h
Und nun noch die Fehlermeldungen:
Danke!
ich versuche mittels der Klassen QSQL... eine Testdatenbanken anzulegen. Beim kompilieren mit make kommt der anscheinend klassische Fehler "undefined reference to"! Hat meines Erachtens nichts mit dem in diesem Forum viel diskutierten vtable zu tun!!
main.cpp
Code: Alles auswählen
#include <QApplication>
//#include "connection.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include "tableeditor.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// if (!createConnection())
// return 1;
//static bool createConnection()
//{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
// return false;
}
QSqlQuery query;
query.exec("create table person (id int primary key, "
"firstname varchar(20), lastname varchar(20))");
query.exec("insert into person values(101, 'Danny', 'Young')");
query.exec("insert into person values(102, 'Christine', 'Holand')");
query.exec("insert into person values(103, 'Lars', 'Gordon')");
query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
//return true;
TableEditor editor("person");
editor.show();
return editor.exec();
}tableeditor.cpp
Code: Alles auswählen
#include <QtGui>
#include <QtSql>
#include "tableeditor.h"
TableEditor::TableEditor(const QString &tableName, QWidget *parent)
: QDialog(parent)
{
model = new QSqlTableModel(this);
model->setTable(tableName);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("First name"));
model->setHeaderData(2, Qt::Horizontal, tr("Last name"));
QTableView *view = new QTableView;
view->setModel(model);
submitButton = new QPushButton(tr("Submit"));
submitButton->setDefault(true);
revertButton = new QPushButton(tr("&Revert"));
quitButton = new QPushButton(tr("Quit"));
buttonBox = new QDialogButtonBox(Qt::Vertical);
buttonBox->addButton(submitButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(revertButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
connect(submitButton, SIGNAL(clicked()), this, SLOT(submit()));
connect(revertButton, SIGNAL(clicked()), model, SLOT(revertAll()));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(view);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
setWindowTitle(tr("Cached Table"));
}
void TableEditor::submit()
{
model->database().transaction();
if (model->submitAll()) {
model->database().commit();
} else {
model->database().rollback();
QMessageBox::warning(this, tr("Cached Table"),
tr("The database reported an error: %1")
.arg(model->lastError().text()));
}
}
Code: Alles auswählen
#ifndef TABLEEDITOR_H
#define TABLEEDITOR_H
#include <QDialog>
class QDialogButtonBox;
class QPushButton;
class QSqlTableModel;
class TableEditor : public QDialog
{
Q_OBJECT
public:
TableEditor(const QString &tableName, QWidget *parent = 0);
private slots:
void submit();
private:
QPushButton *submitButton;
QPushButton *revertButton;
QPushButton *quitButton;
QDialogButtonBox *buttonBox;
QSqlTableModel *model;
};
#endifCode: Alles auswählen
?????@linuxhost:~/Computer/progs/qt-programme/05-dbtest> qmake -project
?????@linuxhost:~/Computer/progs/qt-programme/05-dbtest> qmake
?????@linuxhost:~/Computer/progs/qt-programme/05-dbtest> make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.2.0/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include -I. -I. -I. -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.2.0/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include -I. -I. -I. -o tableeditor.o tableeditor.cpp
/usr/local/Trolltech/Qt-4.2.0/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.2.0/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include -I. -I. -I. tableeditor.h -o moc_tableeditor.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.2.0/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtCore -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include/QtGui -I/usr/local/Trolltech/Qt-4.2.0/include -I. -I. -I. -o moc_tableeditor.o moc_tableeditor.cpp
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.2.0/lib -o 05-dbtest main.o tableeditor.o moc_tableeditor.o -L/usr/local/Trolltech/Qt-4.2.0/lib -lQtGui -L/home/Koschi/Archiv/qt-x11-opensource-src-4.2.0/lib -L/usr/X11R6/lib -lSM -lICE -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -ldl -lpthread
main.o: In function `main':
main.cpp:(.text+0x3e): undefined reference to `QSqlDatabase::defaultConnection'
main.cpp:(.text+0x79): undefined reference to `QSqlDatabase::addDatabase(QString const&, QString const&)'
main.cpp:(.text+0xce): undefined reference to `QSqlDatabase::setDatabaseName(QString const&)'
main.cpp:(.text+0xf1): undefined reference to `QSqlDatabase::open()'
main.cpp:(.text+0x19c): undefined reference to `QSqlDatabase::QSqlDatabase()'
main.cpp:(.text+0x1c3): undefined reference to `QSqlQuery::QSqlQuery(QString const&, QSqlDatabase)'
main.cpp:(.text+0x1e3): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0x209): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x247): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x285): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x2c3): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x301): undefined reference to `QSqlQuery::exec(QString const&)'
main.o:main.cpp:(.text+0x33f): more undefined references to `QSqlQuery::exec(QString const&)' follow
main.o: In function `main':
main.cpp:(.text+0x3e2): undefined reference to `QSqlQuery::~QSqlQuery()'
main.cpp:(.text+0x3ed): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0x446): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0x451): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0x487): undefined reference to `QSqlQuery::~QSqlQuery()'
tableeditor.o: In function `TableEditor::TableEditor(QString const&, QWidget*)':
tableeditor.cpp:(.text+0x3d): undefined reference to `QSqlDatabase::QSqlDatabase()'
tableeditor.cpp:(.text+0x5b): undefined reference to `QSqlTableModel::QSqlTableModel(QObject*, QSqlDatabase)'
tableeditor.cpp:(.text+0x66): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.cpp:(.text+0x6c3): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.o: In function `TableEditor::submit()':
tableeditor.cpp:(.text+0x6fa): undefined reference to `QSqlTableModel::database() const'
tableeditor.cpp:(.text+0x705): undefined reference to `QSqlDatabase::transaction()'
tableeditor.cpp:(.text+0x70d): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.cpp:(.text+0x718): undefined reference to `QSqlTableModel::submitAll()'
tableeditor.cpp:(.text+0x72e): undefined reference to `QSqlTableModel::database() const'
tableeditor.cpp:(.text+0x739): undefined reference to `QSqlDatabase::commit()'
tableeditor.cpp:(.text+0x741): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.cpp:(.text+0x75e): undefined reference to `QSqlTableModel::database() const'
tableeditor.cpp:(.text+0x769): undefined reference to `QSqlDatabase::rollback()'
tableeditor.cpp:(.text+0x774): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.cpp:(.text+0x793): undefined reference to `QSqlQueryModel::lastError() const'
tableeditor.cpp:(.text+0x7a5): undefined reference to `QSqlError::text() const'
tableeditor.cpp:(.text+0x87a): undefined reference to `QSqlError::~QSqlError()'
tableeditor.cpp:(.text+0x898): undefined reference to `QSqlError::~QSqlError()'
tableeditor.cpp:(.text+0x8d3): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.cpp:(.text+0x900): undefined reference to `QSqlError::~QSqlError()'
tableeditor.o: In function `TableEditor::TableEditor(QString const&, QWidget*)':
tableeditor.cpp:(.text+0x9ad): undefined reference to `QSqlDatabase::QSqlDatabase()'
tableeditor.cpp:(.text+0x9cb): undefined reference to `QSqlTableModel::QSqlTableModel(QObject*, QSqlDatabase)'
tableeditor.cpp:(.text+0x9d6): undefined reference to `QSqlDatabase::~QSqlDatabase()'
tableeditor.cpp:(.text+0x1033): undefined reference to `QSqlDatabase::~QSqlDatabase()'
collect2: ld returned 1 exit status
make: *** [05-dbtest] Fehler 1
?????@linuxhost:~/Computer/progs/qt-programme/05-dbtest>