Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. [SOLVED] QSqlQueryModel macht Probleme bei Copy & Paste im Code mit MySQL
Qt 6.12 LTS is out! See what's new in the release blog

[SOLVED] QSqlQueryModel macht Probleme bei Copy & Paste im Code mit MySQL

Scheduled Pinned Locked Moved German
36 Posts 2 Posters 27.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    clochydd
    wrote on last edited by
    #13

    Nach meiner Erfahrung funktioniert das mit db.close() nicht.
    Versuche doch mal, data.db2.close() durch das zu ersetzen:
    @
    data.db2 = QSqlDatabase();
    QSqlDatabase::removeDatabase(data.db2.connectionName());
    @
    Und noch eine Frage: Musst du die Datenbank an der Stelle schließen?

    1 Reply Last reply
    0
    • N Offline
      N Offline
      nickvan86
      wrote on last edited by
      #14

      diese Datenbank brauch ich nur einmalig um den User mit der IP zu vergleichen die in der Datenbank hinterlegt ist um das Login zu gewähren. Ansonsten nicht mehr. Soll ich sie dann offen lassen falls ich mit der Datenbank mehr mache?

      Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

      1 Reply Last reply
      0
      • C Offline
        C Offline
        clochydd
        wrote on last edited by
        #15

        Wenn die Datenbank nicht mehr benötigt wird, solltest du sie schließen, aber versuche das mit den beiden Befehlen.
        (Die Funktion sollte aber auch trotz der Fehlermeldungen gewährleistet sein - so war's zumindest in meinen Programmen.)

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nickvan86
          wrote on last edited by
          #16

          Verwende für dieses Programm 3 Datenbanken. 1 User DB 1 Message DB und eine Software DB.
          Wenn ich in alle drei immer was brauche soll ich sie dann offen lassen oder Schließen?
          Programm holt sich von der User DB einen Namen um diesen mit einer Nachricht in die Message DB zu schreiben.
          Wieso klappt der befehl:

          @data.db2.close()@

          nicht so gut?

          Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

          1 Reply Last reply
          0
          • C Offline
            C Offline
            clochydd
            wrote on last edited by
            #17

            Die Information zum Schließen habe ich vor längerer Zeit hier im Forum "z.B. hier: "https://qt-project.org/forums/viewthread/16417gefunden, nachdem ich exakt das gleiche Problem hatte.

            Generell zum Schließen:
            Ich würde die Datenbanken geöffnet lassen, das sollte keine Leistungsprobleme verursachen.

            1 Reply Last reply
            0
            • N Offline
              N Offline
              nickvan86
              wrote on last edited by
              #18

              Wollte gerade deinen Link anschauen und bekomme folgende Meldung:

              Notice
              The following errors were encountered
              There is no content to display on this link or it has restricted access.

              Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

              1 Reply Last reply
              0
              • C Offline
                C Offline
                clochydd
                wrote on last edited by
                #19

                Das Kopieren hat nicht geklappt...
                "Korrektur: ":https://qt-project.org/forums/viewthread/16417

                1 Reply Last reply
                0
                • N Offline
                  N Offline
                  nickvan86
                  wrote on last edited by
                  #20

                  Ah okay. Klingt sehr interessant was er da gepostet hat. Also die Datenbank so sauber schließen wie du es vorher gezeigt hast.
                  Am besten baue ich mein Programm auf eine DB um aber mit mehr Tabellen. Dann kann ich die Verbindung offen lassen in dem Fall.

                  In dem ich folgende Funktion ausführe öffne ich ja eine Verbindung zur DB:

                  @bool db1Open();@

                  Funktion selber:

                  @bool Database::db1Open()
                  {
                  QSettings settings("SETTINGS");
                  settings.beginGroup("Einstellungen");
                  QString server = settings.value("Server").toString();
                  int port = settings.value("Port").toInt();
                  settings.endGroup();

                  db1 = QSqlDatabase::addDatabase("QMYSQL");
                  db1.setDatabaseName("DB");
                  db1.setHostName(server);
                  db1.setPort(port);
                  db1.setUserName("NAME");
                  db1.setPassword("PASSWORD");
                  
                  if(!db1.open())
                      return false;
                  else
                      return true;
                  

                  }@

                  Und wenn ich Sie nicht mehr brauche dann schließen mit folgendem Code:

                  @QSqlDatabase::removeDatabase(data.db1.connectionName());@

                  Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                  1 Reply Last reply
                  0
                  • C Offline
                    C Offline
                    clochydd
                    wrote on last edited by
                    #21

                    Das Öffnen ist völlig korrekt - zum Schließen solltest du das QSQlDatabase Objekt vor dem removeDatabase noch leeren.
                    Sieht dann so aus:

                    @
                    data.db1. = QSqlDatabase();
                    QSqlDatabase::removeDatabase(data.db1.connectionName());
                    @

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      nickvan86
                      wrote on last edited by
                      #22

                      Ah vergessen :) gleich probieren. Danke ;)

                      Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                      1 Reply Last reply
                      0
                      • N Offline
                        N Offline
                        nickvan86
                        wrote on last edited by
                        #23

                        So sieht meine Close-Funktion aus:

                        @void Database::db1Close()
                        {
                        db1 = QSqlDatabase();
                        QSqlDatabase::removeDatabase(db1.connectionName());
                        }@

                        Aber das Problem besteht immer noch :(

                        @Access is denied.
                        QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
                        QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
                        QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
                        QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.@

                        Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                        1 Reply Last reply
                        0
                        • C Offline
                          C Offline
                          clochydd
                          wrote on last edited by
                          #24

                          Ich würde jetzt im Debug-Modus diese Stelle Schritt für Schritt untersuchen.
                          Die Meldung "Access is denied" bezieht sich wahrscheinlich auf den User?

                          1 Reply Last reply
                          0
                          • N Offline
                            N Offline
                            nickvan86
                            wrote on last edited by
                            #25

                            Jetzt hab ich mit etwas anderen einen hässlichen Fehler. Ich muss seit einem Update von Windows alle neue Projekt mit Adminrechten starten sonst geht das Programm nicht auf.

                            Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                            1 Reply Last reply
                            0
                            • N Offline
                              N Offline
                              nickvan86
                              wrote on last edited by
                              #26

                              Meldung:

                              @Failed to start program. Path or permissions wrong?@
                              Ist aber alles richtig

                              Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                              1 Reply Last reply
                              0
                              • N Offline
                                N Offline
                                nickvan86
                                wrote on last edited by
                                #27

                                Ich lege ein ganz neues Projekt an und der Creator macht das alles richtig aber ich habe immer das kleine Wappen von Win7 wenn etwas Adminrechte braucht. Was das für ne scheiße

                                Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                                1 Reply Last reply
                                0
                                • C Offline
                                  C Offline
                                  clochydd
                                  wrote on last edited by
                                  #28

                                  Hi Alex,
                                  das ist sicher ein Problem mit den Einstellungen von Win7.
                                  Google doch mal nach "Win7 Update Admin"

                                  1 Reply Last reply
                                  0
                                  • N Offline
                                    N Offline
                                    nickvan86
                                    wrote on last edited by
                                    #29

                                    Hi,

                                    Danke hat geholfen. Nun geht es wieder. Sau blöder Fehler xD
                                    Aber nun zurück zum Fehler das er den Inhalt vom TableView verliert ;)

                                    Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                                    1 Reply Last reply
                                    0
                                    • C Offline
                                      C Offline
                                      clochydd
                                      wrote on last edited by
                                      #30

                                      Hi,
                                      du solltest - auch wenn's mühsam ist - im debug prüfen, was nach den Abfragen in welchem Query steht, z.B.:
                                      @
                                      qDebug() << qry.value(0).toString();
                                      @

                                      Wenn das abgesichert ist, das gleiche mit den models:
                                      @
                                      qDebug() << model->data(model->index(0, 0)).toString();
                                      @

                                      1 Reply Last reply
                                      0
                                      • N Offline
                                        N Offline
                                        nickvan86
                                        wrote on last edited by
                                        #31

                                        Hallo,

                                        hab jetzt mal ein kleines Testprogramm gemacht um vielleicht den Fehler leichter zu verstehen:

                                        Datenbank Klasse:

                                        @class Database
                                        {

                                        public:
                                        QSqlDatabase dbUser;
                                        QSqlDatabase dbMemory;

                                        public:
                                        Database();

                                        bool dbUserOpen();
                                        void dbUserClose();
                                        
                                        bool dbMemoryOpen();
                                        void dbMemoryClose();
                                        

                                        };@

                                        @bool Database::dbUserOpen()
                                        {
                                        QSettings settings("A.B.Solution","Memory");
                                        settings.beginGroup("Einstellungen");
                                        QString server = settings.value("Server").toString();
                                        int port = settings.value("Port").toInt();
                                        settings.endGroup();

                                        dbUser = QSqlDatabase::addDatabase("QMYSQL");
                                        dbUser.setDatabaseName("DATENBANK1");
                                        dbUser.setHostName(server);
                                        dbUser.setPort(port);
                                        dbUser.setUserName("USER");
                                        dbUser.setPassword("PASSWORD");
                                        
                                        if(!dbUser.open())
                                            return false;
                                        else
                                            return true;
                                        

                                        }

                                        void Database::dbUserClose()
                                        {
                                        dbUser = QSqlDatabase();
                                        QSqlDatabase::removeDatabase(dbUser.connectionName());
                                        }

                                        bool Database::dbMemoryOpen()
                                        {
                                        QSettings settings("A.B.Solution","Memory");
                                        settings.beginGroup("Einstellungen");
                                        QString server = settings.value("Server").toString();
                                        int port = settings.value("Port").toInt();
                                        settings.endGroup();

                                        dbMemory = QSqlDatabase::addDatabase("QMYSQL");
                                        dbMemory.setDatabaseName("DATENBANK2");
                                        dbMemory.setHostName(server);
                                        dbMemory.setPort(port);
                                        dbMemory.setUserName("USER");
                                        dbMemory.setPassword("PASSWORD");
                                        
                                        if(!dbMemory.open())
                                            return false;
                                        else
                                            return true;
                                        

                                        }

                                        void Database::dbMemoryClose()
                                        {
                                        dbMemory = QSqlDatabase();
                                        QSqlDatabase::removeDatabase(dbMemory.connectionName());
                                        }@

                                        Wenn ich mich anmelde:

                                        @Database data;
                                        user = ui->userEdit->text();
                                        password = ui->passwordEdit->text();
                                        int count = 0;

                                        if(!data.dbUserOpen())
                                            QMessageBox::information(this,"Info","Fehler beim öffnen der Datenbank.\nBitte Verbindung oder IP-Adresse überprüfen.");
                                        else
                                        {
                                            QSqlQuery *qry = new QSqlQuery(data.dbUser);
                                            qry->prepare("SELECT * FROM userList WHERE user = '"+user+"'");
                                            if(qry->exec&#40;&#41;)
                                            {
                                                while(qry->next())
                                                {
                                                    userDB = qry->value(1).toString();
                                                    passwordDB = qry->value(2).toString();
                                                    data.dbUserClose();
                                                    count++;
                                                }
                                            }
                                            else
                                            {
                                                QMessageBox::critical(this,"MySQL Error",qry->lastError().text());
                                                data.dbUserClose();
                                                this->close();
                                            }
                                        
                                            if(userDB == user && passwordDB == password && count == 1)
                                            {
                                                Menue men;
                                                this->close();
                                                men.setModal(true);
                                                men.exec&#40;&#41;;
                                        
                                            }
                                            else
                                            {
                                                QMessageBox::information(this,"Info","Login fehlgeschlagen. Bitte versuchen Sie es nochmal.");
                                                ui->userEdit->setText("");
                                                ui->passwordEdit->setText("");
                                            }
                                        
                                        
                                        }@
                                        

                                        Habe ich keinerlei Probleme. Speichere ich was in die andere Datenbank ab:

                                        @Database data;
                                        user = ui->userEdit->text();
                                        password = ui->passwordEdit->text();
                                        internetSite = ui->internetsiteLine->text();
                                        tags = ui->tagsLine->text();

                                        if(!data.dbMemoryOpen())
                                            QMessageBox::information(this,"Info","Fehler beim öffnen der Datenbank.\nBitte Verbindung oder IP-Adresse überprüfen.");
                                        else
                                        {
                                            QSqlQuery *qry = new QSqlQuery(data.dbMemory);
                                            qry->prepare("INSERT INTO internet (id,site,user,password,tags) VALUES (NULL,'"+internetSite+"','"+user+"','"+password+"','"+tags+"')");
                                            if(qry->exec&#40;&#41;)
                                            {
                                                data.dbMemoryClose();
                                                ui->userEdit->setText("");
                                                ui->passwordEdit->setText("");
                                                ui->internetsiteLine->setText("");
                                                ui->tagsLine->setText("");
                                        
                                            }
                                            else
                                            {
                                                data.dbMemoryClose();
                                                QMessageBox::critical(this,"MySQL Error",qry->lastError().text());
                                            }
                                        }@
                                        

                                        Kommt wieder die Meldung:

                                        @QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.@

                                        Wie kann das sein? Hab ich irgendwo nen Code stehen der Funktioniert aber diesen Fehler produziert?

                                        Gruß

                                        Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                                        1 Reply Last reply
                                        0
                                        • C Offline
                                          C Offline
                                          clochydd
                                          wrote on last edited by
                                          #32

                                          Hi Alex,
                                          ich kann keinen Fehler finden...
                                          Versuche doch noch, das Query vor dem Schließen der Datenbank zu beenden:

                                          @
                                          if(qry->exec())
                                          {
                                          qry->finish();
                                          data.dbMemoryClose();
                                          ...
                                          }
                                          @

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt
                                          • Unsolved