Qt/C++/SQLite String in Integer umwandeln und anzeigen - was mache ich falsch?



  • void MainWindow::CmdIdClicked()
    {
        ui->LstId->clear();
        sqlBefehl.exec("SELECT id FROM energie");
        FehlerAnzeige();
        Id(1);
    
    }
    
    void MainWindow::Id(int einFeld)
    
    {
        QString id; //------------letzte Id auslesen
                  while(sqlBefehl.next())
               {
                   id = "";
                   for(int i=0; i<einFeld; i++)
                       id += sqlBefehl.value(i).toString();
               }
         ui->LstId->addItem(id);//-----letzte Id wird als String angezeigt
    
         int letzteId = id.toInt();
         int neueId;
         neueId = letzteId++;
         ui->EdtEingabeId->addItem(neueId);
    
         /*QString str = "10";     //--- Beispiel für Umwandlung in Str -> Int
         int n = str.toInt();*/
    
         /*QString id; //----------alle Ids auslesen
              while(sqlBefehl.next())
           {
               id = "";
               for(int i=0; i<einFeld; i++)
                   id += sqlBefehl.value(i).toString() + " # ";
               ui->LstId->addItem(id);
           }*/ //----------------alle Ids werden als String angezeigt
    }
    
    

    Bis Zeile 20 funktioniert alles.
    Nur hilft mir ein String nicht weiter, denn ich möchte die letzte Id +1 als neue Id für den nächsten Datensatz vortragen.

    Für Zeile 25 erhalte ich im Editor folgende Fehlermeldung:
    no member named 'addItem' in 'QLineEdit'

    Ich verstehe das nicht, die anderen addItems funktionieren ja auch.

    Wenn ich Zeile 25 wie folgt ändere:

     ui->LstId->addItem(neueId);
    

    erhalte ich die Fehlermeldung:
    no matching member function for call to 'addItem'

    • mein Gedanke war, dass ich in ein Edit-Element vielleicht auf die Art nix eintragen kann....
    • aber das scheint ja nicht das Problem zu sein...

    Kommentiere ich nun die nicht funktionierende Anzeige aus:

     int letzteId = id.toInt();
         int neueId;
         neueId = letzteId++;
         //ui->EdtEingabeId->addItem(neueId);
    

    erhalten ich für Zeile 2 die Warnung:
    variable 'neueId' set but not used

    und für Zeile 3 die Warnung:
    value stored to 'neueId' during its initialization is never read [clang-analyzer-dead.code.DeadStore]

    Danke schonmal.
    Viele Grüße Claudia



  • Im Ausgabebereich bekomme ich dies angezeigt:

    C:\Users\clste\Desktop\_CPP\MeinProjekt\DatenbankSQLite\mainwindow.cpp:175: Fehler: invalid conversion from 'int' to 'QListWidgetItem*' [-fpermissive]
    ..\DatenbankSQLite\mainwindow.cpp: In member function 'void MainWindow::Id(int)':
    ..\DatenbankSQLite\mainwindow.cpp:175:28: error: invalid conversion from 'int' to 'QListWidgetItem*' [-fpermissive]
      175 |      ui->LstIdNeu->addItem(neueId);
          |                            ^~~~~~
          |                            |
          |                            int
    

    Soll das heißen, dass ich keine Integers anzeigen kann???? 🤔



  • Jetzt läufts 😁

    void MainWindow::Id(int einFeld)
    {
        QString id; //------------letzte Id auslesen
                  while(sqlBefehl.next())
               {
                   id = "";
                   for(int i=0; i<einFeld; i++)
                       id += sqlBefehl.value(i).toString();
               }
         ui->LstId->addItem(id);//-----letzte Id wird als String angezeigt
    
         int letzteId = id.toInt(); 
         int neueId;
         neueId = letzteId+1;
         QString StrNeueId = QString::number(neueId);
    
         ui->LstNeueId->addItem(StrNeueId);
    }
    


  • Du mußt die Zahl erst in einen String umwandeln, z.B.

    ui->EdtEingabeId->addItem(QString::number(neueId));
    

    Jedoch macht es so keinen Sinn, erst die Id beim Einlesen in einen String zu verwandeln, und daraus dann wieder die Zahl zurück zu konvertieren.

    Warum überhaupt die komische for-Schleife?

    int id = sqlBefehl.value(0);
    
    ui->LstId->addItem(QString::number(id));
    

    Und wenn du nur die höchste Id ermitteln willst, dann einfach

    SELECT max(id) FROM energie
    

    und du kannst auf die Leseschleife verzichten:

    int id = 0;
    if (sqlBefehl.next())
        id = sqlBefehl.value(0);
    

    Warum möchtest du überhaupt die nächste Id anzeigen? Üblicherweise sollte die Datenbank die Ids vergeben (Stichwort: auto increment column).

    Edit: Ok, da haben sich unsere letzten Beiträge überschnitten - beachte trotzdem meine Hinweise! : -)



  • @Th69 sagte in Qt/C++/SQLite String in Integer umwandeln und anzeigen - was mache ich falsch?:

    Edit: Ok, da haben sich unsere letzten Beiträge überschnitten - beachte trotzdem meine Hinweise! : -)

    Ja, danke 😊



  • Hast du in deinem letzten Beitrag (aus Versehen) 2x denselben Code kopiert oder wolltest du irgendetwas anderes damit ausdrücken?



  • @Th69
    Sorry, habe die Dopplung entfernt. 😳


Anmelden zum Antworten