Problem, Anbindung und Einfügen SQLite-Datenbank

Alles rund um die Programmierung mit Qt
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Problem, Anbindung und Einfügen SQLite-Datenbank

Beitrag von Marcus Breuer »

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:

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();
}
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:

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)
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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Welche Compilerflags? Ist ggf. QT_NO_CAST_FROM_ASCII definiert? Probiere mal die Zeichenfolgen mit QLatin1String() bzw. QString() zu instanziieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Hallo Christian81,

vielen Dank schonmal für deine Antwort. Leider sprichst Du noch mit einem Anfänger, deswegen müsste ich mir erstmal ergooglen, wo ich und wie ich ud vor allem, was die Compilerflags sind, aber das ist schonmal ein Stichwort.

Wenn ich dich richtig verstanden habe, dann meinst Du doch, dass ich die Strings, die ich aus den LineEdits bekomme, mit toLatin1() in dieses Format bringen soll. Liege ich da falsch?

Sonst ist der Code für dich bestimmt nicht schön anzusehen, aber in Sachen Anbdindung sollte das doch funktionieren, nicht? Habe jetzt ca 30 Bspe. im netz gefunden und alle sind ähnlich oder sogar fast gleich. Kannst Du mir sonst da einen kleinen Fingerzeig auf Fehler geben?

Grüße,
Marcus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

query.bindValue(QString(":Kundennummer")     ,        kunde->text()); 
oder
query.bindValue(QLatin1String(":Kundennummer")     ,        kunde->text()); 
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Danke, aber das hat es leider auch nicht gelöst. Habe beides ausprobiert. Spielt es eine Rolle, dass ich auf einem Mac bin?

In der Doku bzw. in der Fehlermeldung steht ja, dass als zweites Argument ein const QVariant& erwartet wird.
Ich habe mir jetzt zwar noch nicht angesehen, wie ich die QStrings aus den LineEdits in das Format überführe, probiere es aber gleich vielleicht mal.
Ich verstehe nur nicht, warum in der Referenz einfach Strings übergeben werden können und das bei mir nicht will.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Bau ein minimal kompilierbares Beispiel inklusive pro-Datei und wir werden es sehen. Die Compilerwarnung ist jetzt definitv eine andere...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

also ich bin gerade in der referenz zum qstring auf das makro gestoßen,

QT_NO_CAST_FROM_ASCII

Dieses habe ich nirgends definiert oder eingebunden.
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Entschuldige, hatte deine Antwort übersehen. Das ist nett, Dankeschön. Habe eine .zip inkl. der .pro angehangen.
Hoffe, Du kommst damit weiter. Ich werde es dennoch mal auf Windows probieren. Vllt. habe ich ja doch Glück:) oder Kopfschmerzen.

Ich habe alles, was die Datenbankanbindung und bearbeiten bisher im Code war auskommentiert. So war es bei mir kompilierbar. Hauptsächlich spielt sich das alles in der kontakte.cpp ab. Bzw. bisher ausschließlich.
Dateianhänge
Datenbank.zip
(3.69 KiB) 196-mal heruntergeladen
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Entschuldige, aber da fuchst mich und ich habe vergessen, die Datei mit der Datenbank hochzuladen.

Hier also noch der Nachtrag.
Dateianhänge
Kontakte.db.zip
(362 Bytes) 184-mal heruntergeladen
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Und schon wieder einmal etwas von mir. Ich habe gerade einfach mal in die kontakte.h Die Klasse QVariant eingebunden und jetzt zweimal kompiliert. Es funktioniert. Ich kann das gesamte Projekt jetzt erstellen.

Kannst Du mir vielleicht sagen, warum das so ist? Ich mache ja im Grunde mit den Strings nichts mehr. Also ändert sich ja an den übergebenen Werten in den ganzen query.bindValues(...) nichts.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Marcus Breuer hat geschrieben:Kannst Du mir vielleicht sagen, warum das so ist? Ich mache ja im Grunde mit den Strings nichts mehr. Also ändert sich ja an den übergebenen Werten in den ganzen query.bindValues(...) nichts.
Das Problem ist, dass QVariant nur als Parameter gebraucht wird und deshalb auch nur als forward-declaration im QSqlQuery-Header vorliegt. Willst du die entsprechenden Funktionen nutzen, musst du auch den QVariant-Header einbinden.
QVariant hat einen Konstruktor mit einem "QString" als erster Parameter. Da dieser Konstruktor nicht explicit ist, kann der Compiler bei der Angabe eines QString den passenden QVariant-Konstruktor finden und diesen automatisch einfügen. Ohne Header ist dieser Konstruktor aber nicht bekannt. Aus dem Grund kommt auch die Fehlermeldung mit der unpassenden Signatur: Der zweite Parameter wird nur als QString erkannt, du übergibst als erster Parameter eine primitive Zeichenkette, der Compiler versucht gar nicht erst das in einen QString umzuwandeln, da der zweite Parameter zu keiner Signatur der bindValue()-Funktionen passt.
Hoffe das ist jetzt halbwegs klar :)
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Guten Morgen franzf,

Danke für die Erklärung, habe es verstanden. Ich hatte mir die Konstruktoren von QVariant gestern auch noch angesehen und versucht da etwas mit den QStrings zu tricksen, aber das war, naja...

Ich habe nun aber leider das folgende Problem, zunächst der (Fehler)Code:

Code: Alles auswählen

Debuggen beginnt
QSqlQuery::prepare: database not open
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
Debuggen beendet
und der Code zu der .cpp, in dem die Datenbankverbindnung aufgenommen werden soll:

Code: Alles auswählen

#include "kontakt.h"

Kontakt::Kontakt()
{
    /* ----------------------------------------------------------- */

    /** Fenstereigenschaften: */
    setWindowTitle("Neuen Kontakt anlegen");
    setFixedSize(600, 480);

    /* ----------------------------------------------------------- */

    /** Fensterelemente: */
    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() {
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("Kontakte");
    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();
    this->close();
}
Ich will mich eigentlich garnicht so sehr mit SQL beschäftigen, da mir ein paar wenige Befehle zum Anlegen und Suchen von Datensätzen in einer Datenbank vollkommen reichen. Deswegen habe ich mir gedacht, mit dem SQLite Database Browser komme ich schnell und einfach zum Ziel.

Die Datenbank >>Kontakte<< habe ich daraufhin mit diesem Tool erstellt und auf dem Desktop gespeichert. Ich hatte die Typen der einzelnen Felder in der Datenbank manuell auf QStrings geändert, was glaube ich ziemlich falsch ist, allerdings auch mit dem TYP TEXT, den ich im Browser direkt zur Auswahl hatte, änderte sich mein Problem nicht.
Die Datei auf dem Desktop hieß bei mir einfach Kontakte. Im Kontextmenü zu den Eigenschaften der Datenbankdatei habe ich auch kein Suffix wie *.db oder *.sqlite gefunden.

Dem QSqlQuery habe ich auch einmal probiert, die Datenbank als Parameter zu übergeben, da ich dachte, dass so das Problem gelöst wird und prepare(...) dann die Datei öffnen kann. Vergeblich. Auch den gesamten Pfad zur Datenbankdatei hatte ich ursprünglich immer bei addDatabaseName(...) mit angegeben.

Ich komme ehrlich gesagt einfach nicht dahinter, warum das jetzt nicht will.

Da löst sich das eine Problem, ein anderes taucht auf. Ich hoffe, dass das nicht zu einer Endlosschleife wird.

Besten Dank, Grüße,
Marcus

Noch als Anmerkung, bevor das nicht gesagt wird und da vllt. der hund begraben liegt. Im entsprechenden Header liegt eine Instanz der QSqlDatabase als öffentliche Variable, da ich später aus einer anderen klasse probieren möchte, darauf zuzugreifen.
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Hallo Leute,

ich habe jetzt mal noch folgendes ziemlich erfolglos probiert:
(Der Fehler bleibt der Gleiche)

Code: Alles auswählen

void Kontakt::datenSpeichern() {
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("Users/marcusbreuer/Desktop/Kontakte");
    db.open();
    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();
    db.close();
    this->close();

Ok soweit, ich habe noch ein paar kleinere Änderungen vorgenommen, so dass es jetzt danach aussieht, als könnte prepare jetzt die Datenbank benutzen. Wenn ich mir die Datenbank allerdings in einem Texteditor ansehe, dann wird nichts reingeschrieben und eine Meldung habe ich noch:

Code: Alles auswählen

void Kontakt::datenSpeichern() {
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("/Users/marcusbreuer/Desktop/Kontakte");
    QSqlQuery query(db);
    db.open();
    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();
    db.close();
    this->close();
}
Meldung:

Code: Alles auswählen

Debuggen beginnt
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
Debuggen beendet
Ich habe im Database Browser nun die Feldtypen wieder auf TEXT umgestellt. Nur wie gesagt, es wird eben nichts reingeschrieben.

Viele Grüße,
Marcus
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

QSqlDatabase speichert selber alle Verbindungen. Daher ist es unnötig, selber Instanzen von QSqlDatabase zu speichern. Schließen ist auch unnötig, das macht schon der Destruktor von QSqlDatabase.

Vorgehen:
* Alle Member-Instanzen von QSqlDatabase entfernen
* In der main() VOR dem Anlegen irgend welcher Objekte deine Datenbank mit QSqlDatabase::addDatabase() hinzufügen, einrichten (setDatabaseName etc) und öffnen.
* Zugriffe in Funktionen nur noch über die statische Funktion QSqlDatabase::database() - das liefert dir das db-Objekt.

Damit sollte die Meldung mit dem "connection 'qt_sql_default_connection' is still in use" verschwinden. Was btw- nur ein warning ist und kein wirklicher Fehler.
Problematischer ist da schon das hier (aus QSqlDatabase::addDatabase()):
If there already exists a database connection called connectionName, that connection is removed.
Wenn du öfter "addDatabase()" aufrufst, sind evtl. an anderen Stellen die db-Objekte/queries ungültig, was ein ECHTER Fehler ist. Aber auch das wird durch obige Herangehensweise gelöst.
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Beitrag von Marcus Breuer »

Danke Danke. Eigentlich ziemlich dumm von mir, da in den Beispielen, die ich gesehen habe, die Datenbank stets in der main geöffnet wurde. Hätte ich mal etwas eher ausprobieren sollen.

Ich probiere dann jetzt mal, mich an den Beispielen etwas entlang zu hangeln.
Aber ich bin zuversichtlich, dass ich mich wieder melde:)

Besten Dank schonmal franzf.
Antworten