Seite 1 von 1

Datenbank erstellen Grundzüge

Verfasst: 5. Juni 2007 14:08
von leenas
Hallo liebe Leute,

kann mir vielleicht jemand ein gutes Tutorial empfehlen was Datenbanken und QT angeht aber nicht auf die DOC von QT verweist?

Versuche die ganze Zeit schon verzweifelt eine Datenbank aufzubauen nur die ganzen Beispiele in der Doc funktionieren nicht. Auch wenn ich vom C++ Code einige SQl-Statements loslasse um zumindest eine Datenbank zu erstellen und darin Tabellen funktioniert das nicht.
Die Datenbank erstellt er, aber sie ist immer leer (Größe 0Kb).
Weiß leider nicht mehr weiter!!!! :?:

Bitte um Hilfe!!!

Vielen Dank!!!
Lieben Gruß
leenas

Verfasst: 5. Juni 2007 14:42
von pfusterschmied
Du musst deine Frage ein wenig genauer stellen. Was willst du denn haben eine Verbindung zur DB (MySQL) oder nur eine SQLLite Bsp?

Am besten du schaust dir die Beispiele im Assistant an bzw. die QTDemos. Weiters kannst du dir auch Beispiele von :
http://www.qt4-buch.de/
holen.


Hier ein Bsp. für SQL:
(Noch nicht getestet!)

connection.h :

Code: Alles auswählen

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

/*
    This file defines a helper function to open a connection to an
    in-memory SQLITE database and to create a test table.

    If you want to use another database, simply modify the code
    below. All the examples in this directory use this function to
    connect to a database.
*/
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
	db.setHostName("dein_host");
	db.setDatabaseName("deine_db");
	db.setUserName("spo");
	db.setPassword("dein_PW");
    if (!db.open()) {
        QMessageBox::critical(0, qApp->tr("Datenbankverbindung fehlgeschlagen!"),
            qApp->trUtf8("Es ist nicht möglich eine Datenbankverbindung aufzubauen.\n"
                     "Bitte vergewissern Sie sich, dass ihre Internetverbindung funktioniert.\n"
                     "Falls Sie sich zu einer lokale Datenbank verbinden möchten, vergewissern Sie Sich, dass das Datenbankservices läuft.\n"
                     "Wenn das Problem weiterhin besteht wenden Sie sich bitte an dein_Name\n\n"
                     "Bitte Drücken Sie auf Cancel um die Anwendung zu schließen."), QMessageBox::Cancel);
        return false;
    } 
	return 1;

}

main.cpp:

Code: Alles auswählen

#include <QtGui>
#include <QtSql>

#include "connection.h"
#include "tablemodel.h"


int main(int argc, char *argv[])
{
      QApplication app(argc, argv);

// DB Verbindung herstellen
	if (!createConnection()) {
		return 1;
	}
 		tableModel programm;
 		programm.setAttribute(Qt::WA_QuitOnClose);
  		programm.resize(1024, 768);
 		programm.show();

  return app.exec();
}
tablemodel.cpp:

Code: Alles auswählen

#include <QtGui>
#include <QtSql>
#include <QDebug>

#include "tablemodel.h"

tableModel::tableModel()
{

 	personModel = new QSqlTableModel(this);
	personModel->setTable("deine_tabelle");

	personTableView = new QTableView;
	personTableView->setModel(personModel);
	personTableView->setSortingEnabled(TRUE);
	personTableView->setAlternatingRowColors(TRUE);
	personTableView->hideColumn(0);	
	personTableView->resizeColumnsToContents();

	QVBoxLayout *mainLayout = new QVBoxLayout;
	mainLayout->addWidget(personTableView);
	setLayout(mainLayout);
}
tableModel.h:

Code: Alles auswählen

#include <QDialog>
#include <QCloseEvent>

class QSqlTableModel;

// class QTableView;

class tableModel : 	public QWidget
{
      Q_OBJECT

public:
      tableModel();
      ~tableModel();

public slots:

protected:

private slots:

private:
 	QSqlTableModel *personModel;
 	QTableView *personTableView;


};

Verfasst: 5. Juni 2007 16:27
von upsala
Deine Kommandos zum erstellen setzt du mit QSqlQuery ab. QSqlQuery hat lastError() um event. auftretende Fehler anzuzeigen. Was werden für Fehler angezeigt?

Verfasst: 6. Juni 2007 14:05
von leenas
Danke erst mal für die Antworten!

Also mein Problem sieht folgender Maßen aus.

Code: Alles auswählen

#include <qapplication.h>
#include <qmessagebox.h>
#include <qsqlerror.h>
#include <qsqldatabase.h>
#include "form1.h"
#include <qsqlquery.h>
#include <qlistview.h>

#define DB_SALES_DRIVER	    "QSQLITEX"
#define DB_SALES_DBNAME	    "adrVerwaltung"
#define DB_SALES_USER	    "test"
#define DB_SALES_PASSWD	    "test"
#define DB_SALES_HOST	    ""

static  QSqlDatabase *defaultDB;

int main( int argc, char* argv[] )
{
 QApplication app( argc, argv); 
defaultDB = QSqlDatabase::addDatabase( DB_SALES_DRIVER );

if(defaultDB)
       {
	   defaultDB->setDatabaseName( DB_SALES_DBNAME );
	   defaultDB->setUserName( DB_SALES_USER );
	   defaultDB->setPassword( DB_SALES_PASSWD );
	   defaultDB->setHostName( DB_SALES_HOST );
	  
	   if ( ! defaultDB->open() ) {
	       qWarning( "HALLO FEHLER ", "Normale DB kann nicht geöffnet werden"); //defaultDB->lastError().text() 
	        defaultDB->lastError().showMessage("Fehler bei Verbindung\n");
	       return FALSE;
	   }
	   else
	   {
                                QListView courseLV;
		app.setMainWidget( &courseLV );
		courseLV.addColumn( "Nachname" );
		courseLV.addColumn( "Vorname" );
		courseLV.addColumn( "Telefon" );
		courseLV.addColumn( "Strasse" );
		courseLV.addColumn( "PLZ" );
		courseLV.addColumn( "Wohnort" );
		courseLV.addColumn( "Geburtstag" );
		courseLV.show();

                               QSqlQuery q(QString::null, defaultDB);
		q.exec("DROP DATABASE adrVerwaltung;");
		q.exec("CREATE DATABASE adrVerwaltung;");
		q.exec("USE adrVerwaltung;");
		q.exec("DROP TABLE privatAdressen;");
		q.exec("Create table privatAdressen(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT);");
		q.lastError();


return app.exec();
	    }//else
       }//if
       else
       {
	qDebug("Aktivierung des Datenbank-Treibers nicht möglich");
       }
       return 1;
   }
So in etwa sieht meine Main aus. Aber bei dem letzten q.lastError() gibt er keine Fehlermeldung aus!
QT legt zwar eine Datenbank an, aber sie ist leer (0kB).
Das habe ich auch aus dem QT Buch von Suse. Aber das funktioniert nicht so ganz!!

Vielleicht ist es jetzt etwas anschaulicher!!

Vielen Dank

Verfasst: 6. Juni 2007 16:45
von leenas
Hallo,

habe noch folgendes versucht. Habe mir mal den ODBC3 Treiber installiert und versucht sie in QT einzubinden. Soweit so gut.
Aber wenn ich jetzt meine Applikation starte kommt folgende Fehlermeldung:

Code: Alles auswählen

Driver not loaded
wieso? hab ich irgendetwas an der erstellung der .pro Datei für den Treiber übersehen?
Habe das wie in der Documentation gemacht! :?: :?:

Vielen Dank!

Gruß
Leenas

Verfasst: 6. Juni 2007 22:23
von upsala
Hast du die Forumssuchfunktion für diese Fehlermeldung schon mal bemüht?

Verfasst: 6. Juni 2007 22:24
von leenas
Ja, habe ich schon und leider nichts brauchbares gefunden.