Enigma25
06-06-2006, 09:41
Fehlerbeschreibung siehe ganz unten!!
Optik:
rechts eine Liste mit Tabellennamen aus der Datenbank
links die QDataTable
in DatenbankFenster-Klasse:
(datenbankfenster.h)
//-------------------------Anfang---------------------
#ifndef DATENBANKFENSTER_H
#define DATENBANKFENSTER_H
#include "sqlquery.h"
#include <qdialog.h>
#include <qtabwidget.h>
#include <qdatatable.h>
#include <qlayout.h>
#include <qsplitter.h>
#include <qlistbox.h>
#include <qstring.h>
/**
@author
*/
class DatenbankFenster : public QDialog
{
Q_OBJECT
private:
QHBoxLayout* hlayout;
QDataTable* dtTable;
QListBox* lbTabellen;
public:
DatenbankFenster();
~DatenbankFenster();
public slots:
void datenAbrufen();
};
#endif
//-------------------------Ende-----------------------
(datenbankfenster.cpp)
//-------------------------Anfang---------------------
#include "datenbankfenster.h"
DatenbankFenster::DatenbankFenster()
: QDialog()
{
this->setGeometry(20,20,800,600);
hlayout = new QHBoxLayout(this);
dtTable = new QDataTable(this);
lbTabellen = new QListBox(this);
lbTabellen->setMinimumWidth(100);
QStringList l;
l << "tblAnrede" << "tblAnschrift" <<"tblArt" << "tblBundesland" << "tblErfassung"
<< "tblObjekt" << "tblOrt" << "tblOrtOrtsteil" << "tblOrtsteil" << "tblPlz"
<< "tblPlzOrt" << "tblPreis" << "tblStatus" << "tblVermieter";
lbTabellen->insertStringList(l);
hlayout->addWidget(dtTable,80);
hlayout->addWidget(lbTabellen,20);
connect(lbTabellen,SIGNAL(currentChanged(QListBoxI tem* )),this,SLOT(datenAbrufen()));
}
DatenbankFenster::~DatenbankFenster()
{
}
void DatenbankFenster::datenAbrufen( )
{
qWarning("in Daten abrufen Funktion!!");
SQLQuery::datenbankDatenAbrufen(dtTable,lbTabellen->currentText());
}
//-------------------------Ende-----------------------
in SQlQuery-Klasse
(sqlquery.cpp)
//-------------------------Anfang---------------------
void SQLQuery::datenbankDatenAbrufen(QDataTable* table, QString tablename)
{
QSqlDatabase *myDB = QSqlDatabase::addDatabase("QPSQL7");
if (myDB){
myDB->setDatabaseName("meldung");
myDB->setHostName("127.0.0.1");
myDB->setUserName("postgres");
myDB->setPassword("blabla");
if(myDB->open()){
QSqlCursor cursor(tablename);
qWarning("Cursor gesetzt!!");
table->setSqlCursor(&cursor,true,myDB);
table->refresh(QDataTable::RefreshAll);
}else{
myDB->lastError().showMessage("Fehler bei Verbindung");
}
}else{
qDebug("Aktivierung des Datenbank-Treibers nicht möglich");
}
//return table;
}
//-------------------------Ende-----------------------
Fehlerbeschreibung:
wenn ich einmal rechts auf die Liste mit den tabellennamen klicke erscheint in der
QDataTable der Inhalt der Tabelle (soweit so gut, aber..)
1. Fall:
wenn ich noch mal auf die Liste Klicke bricht er mit
*** glibc detected*** invalid pointer 0xbff.....(Adressen)
das Programm ab
2. Fall:
wenn nach dem ersten Klick auf die Liste auf die QDataTable klicke, bricht er mit
Segmentation fault ab..
scheint so als gäbe es die QDataTable nicht mehr?
Hat vielleicht jemand eine Idee, was ich verkehrt mache?
Dringend!!
Vielen Dank
Thomas
Optik:
rechts eine Liste mit Tabellennamen aus der Datenbank
links die QDataTable
in DatenbankFenster-Klasse:
(datenbankfenster.h)
//-------------------------Anfang---------------------
#ifndef DATENBANKFENSTER_H
#define DATENBANKFENSTER_H
#include "sqlquery.h"
#include <qdialog.h>
#include <qtabwidget.h>
#include <qdatatable.h>
#include <qlayout.h>
#include <qsplitter.h>
#include <qlistbox.h>
#include <qstring.h>
/**
@author
*/
class DatenbankFenster : public QDialog
{
Q_OBJECT
private:
QHBoxLayout* hlayout;
QDataTable* dtTable;
QListBox* lbTabellen;
public:
DatenbankFenster();
~DatenbankFenster();
public slots:
void datenAbrufen();
};
#endif
//-------------------------Ende-----------------------
(datenbankfenster.cpp)
//-------------------------Anfang---------------------
#include "datenbankfenster.h"
DatenbankFenster::DatenbankFenster()
: QDialog()
{
this->setGeometry(20,20,800,600);
hlayout = new QHBoxLayout(this);
dtTable = new QDataTable(this);
lbTabellen = new QListBox(this);
lbTabellen->setMinimumWidth(100);
QStringList l;
l << "tblAnrede" << "tblAnschrift" <<"tblArt" << "tblBundesland" << "tblErfassung"
<< "tblObjekt" << "tblOrt" << "tblOrtOrtsteil" << "tblOrtsteil" << "tblPlz"
<< "tblPlzOrt" << "tblPreis" << "tblStatus" << "tblVermieter";
lbTabellen->insertStringList(l);
hlayout->addWidget(dtTable,80);
hlayout->addWidget(lbTabellen,20);
connect(lbTabellen,SIGNAL(currentChanged(QListBoxI tem* )),this,SLOT(datenAbrufen()));
}
DatenbankFenster::~DatenbankFenster()
{
}
void DatenbankFenster::datenAbrufen( )
{
qWarning("in Daten abrufen Funktion!!");
SQLQuery::datenbankDatenAbrufen(dtTable,lbTabellen->currentText());
}
//-------------------------Ende-----------------------
in SQlQuery-Klasse
(sqlquery.cpp)
//-------------------------Anfang---------------------
void SQLQuery::datenbankDatenAbrufen(QDataTable* table, QString tablename)
{
QSqlDatabase *myDB = QSqlDatabase::addDatabase("QPSQL7");
if (myDB){
myDB->setDatabaseName("meldung");
myDB->setHostName("127.0.0.1");
myDB->setUserName("postgres");
myDB->setPassword("blabla");
if(myDB->open()){
QSqlCursor cursor(tablename);
qWarning("Cursor gesetzt!!");
table->setSqlCursor(&cursor,true,myDB);
table->refresh(QDataTable::RefreshAll);
}else{
myDB->lastError().showMessage("Fehler bei Verbindung");
}
}else{
qDebug("Aktivierung des Datenbank-Treibers nicht möglich");
}
//return table;
}
//-------------------------Ende-----------------------
Fehlerbeschreibung:
wenn ich einmal rechts auf die Liste mit den tabellennamen klicke erscheint in der
QDataTable der Inhalt der Tabelle (soweit so gut, aber..)
1. Fall:
wenn ich noch mal auf die Liste Klicke bricht er mit
*** glibc detected*** invalid pointer 0xbff.....(Adressen)
das Programm ab
2. Fall:
wenn nach dem ersten Klick auf die Liste auf die QDataTable klicke, bricht er mit
Segmentation fault ab..
scheint so als gäbe es die QDataTable nicht mehr?
Hat vielleicht jemand eine Idee, was ich verkehrt mache?
Dringend!!
Vielen Dank
Thomas