Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. [SOLVED] QSqlQueryModel macht Probleme bei Copy & Paste im Code mit MySQL
Qt 6.11 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 18.4k 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.
  • 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
                  • N Offline
                    N Offline
                    nickvan86
                    wrote on last edited by
                    #33

                    Auch versucht aber daran liegt es auch nicht.
                    Hab auch folgendes beim Close versucht:

                    @dbMemory.removeDatabase("QMYSQL");@

                    aber das will ich nicht. Hmmmm.... Beim Login habe ich das Problem nicht. Da bekomme ich keinerlei Meldung. Erst wenn ich eine zweite Verbindung zu einer anderen DB mache bekomme ich die Meldung.

                    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
                      #34

                      Okay habe mein Code etwas angepasst und komme langsam an das Ergebnis heran:

                      @dbUser = QSqlDatabase::addDatabase("QMYSQL","UserConnection");@
                      @dbMemory = QSqlDatabase::addDatabase("QMYSQL","MemoryConnection");@

                      Es liegt daran. Sobald ich einmal die Verbindung gemacht habe verwendet er einen Connection und der ist Standard mässig "Default" als Name.
                      Speichere ich jetzt zweimal in dbMemory bekomme ich die Meldung wieder. Beim erstmal speichern nach Programmstart kommt nichts da das erstmal die Verbindung erstellt wurde.

                      Ich hoffe es ist etwas verständlich

                      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
                        #35

                        Hab auch bei der Close Funktion folgendes ergänzt:

                        @dbMemory.connectionName().remove("MemoryConnection");@

                        Er behält aber immer noch die Connection offen trotz remove

                        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
                          #36

                          So...Ich glaube ich hab jetzt die passende Lösung gefunden in der Klasse Database:

                          @if(QSqlDatabase::contains("MemoryConnection");@

                          ich frage erstmal ob die Verbindung mit der DB schon besteht. Wenn ja dann verwenden dies oder öffne die DB mit diesem.

                          Ich glaube das ist so ganz gut :-)

                          Qt 5.2.1 Creator 3.0.1 Windows 7 64bit

                          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 Extensions
                          • Unsolved