Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Problema con esecuzione query di update
QtWS25 Last Chance

Problema con esecuzione query di update

Scheduled Pinned Locked Moved Unsolved Italian
10 Posts 2 Posters 2.0k Views
  • 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.
  • F Offline
    F Offline
    fermatqt
    wrote on last edited by fermatqt
    #1

    ciao!

    ho un programma che effettua diverse operazioni su un db Oracle..
    tra le quali questa funzione, che 4 mesi fa ha funzionato, mentre oggi non funziona.

    void PrioritaWindow::onBtnModificaClicked() {
        if (ui->baseTable->rowCount() > 0) {
            pd.open(this, "Loading...", true);
            if (db->isOpened()) {
                for (int i = 0; i < ui->baseTable->rowCount(); i++) {
                    QFile queryFile("TXT/set_priorita.txt");
                    queryFile.open(QFile::ReadOnly | QFile::Text);
                    QString strQuery = QTextStream(&queryFile).readAll();
                    strQuery.replace("\n", "");
                    db->transaction();
                    QSqlQuery query;
                    query.prepare(strQuery);
                    query.bindValue(0, ui->baseTable->item(i, 1)->text());
                    query.bindValue(1, ui->baseTable->item(i, 0)->text());
                    query.exec();
                    db->commit();
    
                    qDebug() << query.lastQuery();
                    qDebug() << query.lastError();
    
                    query.clear();
                }
                //ui->baseTable->setRowCount(0);
                btnModifica->setEnabled(false);
                btnClear->setEnabled(false);
                pd.close();
            } else {
                pd.close();
                this->errorBox("Controllare la connessione!");
            }
        } else {
            this->errorBox("Caricare un file CSV prima!");
        }
    }
       
    

    dai due qDebug mi esce questo:

    "UPDATE CCOMCL_ATTRIB_ESTESI SET VALORE = ? WHERE DITCONTI = 'XXL' AND CODICE_ATTR = 'CI-PRIORITA' AND CHIAVE =  'CL' || ? || '01.01.1000'"
    QSqlError("", "", "")
    

    in sostanza sembra che esegua la query, ma nel db non ci sono risultati.
    qualche idea?

    1 Reply Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by VRonin
      #2

      elimina

      query.exec();
      db->commit();
      qDebug() << query.lastQuery();
      qDebug() << query.lastError();
      

      e sostituiscilo con:

      if(query.exec()){
      Q_ASSUME(db->commit());
      qDebug() << query.lastQuery();
      }
      else{
      qDebug() << query.lastQuery();
      qDebug() << query.lastError();
      Q_ASSUME(db->rollbcak());
      }
      

      e dicci cosa viene messo in console

      P.S.

      1. Avere query in un file di testo e' una gigantesca vulnerabilita' del tuo sistema
      2. sei sicuro di QFile queryFile("TXT/set_priorita.txt");? TXT/set_priorita.txt e' relativo alla working directory da cui fai partire il programma. sei certo questo e' quello che vuoi?

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      0
      • F Offline
        F Offline
        fermatqt
        wrote on last edited by
        #3

        ciao!

        scusa il ritardo, ma ho dovuto fare qualche prova, perchè non si capiva bene se eseguiva la query o meno.
        ho fatto qualche modifica alla query e controllato il db.
        alla fine sembra tutto ok.

        PS: per quanto riguarda il discorso della query su file, si lo so che non è sicuro; l'ho fatto perchè mi veniva comodo e perchè:

        • il server non è esposto al di fuori della rete aziendale in nessun modo
        • il programma quindi al di fuori del mio pc aziendale non funziona
        • il programma è disponibile solo per e un paio di colleghi
          tutto sommato, costi / benefici, per ora mi va bene così!
        1 Reply Last reply
        0
        • VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by
          #4

          Piu' della meta' degli attacchi informatici arrivano dall'interno, il caso tipico e' "tu mi licenzi, io ti droppo il database". Tu lo stai rendendo molto facile sia da eseguire che da nascondere le tracce

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          0
          • F Offline
            F Offline
            fermatqt
            wrote on last edited by
            #5

            si sempre sul mio pc deve passare però (firewall esterno, firewall vpn, firewall mio pc con linux che deve essere acceso, password parecchio strong, deve trovare i path corretti dei file).
            se ci riesce tanto di cappello!

            cmq accetto il consiglio, e quando trovo una soluzione mi dia questa felssibilità e più sicurezza, di sicuro la adotterò!!

            VRoninV 1 Reply Last reply
            0
            • F fermatqt

              si sempre sul mio pc deve passare però (firewall esterno, firewall vpn, firewall mio pc con linux che deve essere acceso, password parecchio strong, deve trovare i path corretti dei file).
              se ci riesce tanto di cappello!

              cmq accetto il consiglio, e quando trovo una soluzione mi dia questa felssibilità e più sicurezza, di sicuro la adotterò!!

              VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #6

              @fermatqt said in Problema con esecuzione query di update:

              si sempre sul mio pc deve passare però

              Nope. vedi punto 2 del P.S.

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              0
              • F Offline
                F Offline
                fermatqt
                wrote on last edited by
                #7

                si si è relativo alla working directory.
                quella cartella TXT esiste solo dove c'è il mio eseguibile.
                non è sul server, te lo garantisco.

                VRoninV 1 Reply Last reply
                0
                • F fermatqt

                  si si è relativo alla working directory.
                  quella cartella TXT esiste solo dove c'è il mio eseguibile.
                  non è sul server, te lo garantisco.

                  VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by
                  #8

                  @fermatqt said in Problema con esecuzione query di update:

                  si si è relativo alla working directory

                  Esatto.

                  • creo una cartella C:\Temp\TXT
                  • al suo interno creo set_priorita.txt
                  • scrivo dentro al file di testo DROP TABLE CCOMCL_ATTRIB_ESTESI;
                  • apro il teminale (cmd.exe)
                  • cd C:\Temp
                  • C:\Programmi\MioProgramma\ProgrammaConVunerabilita.exe
                  • il tuo db ha perso 1 tabella

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  1 Reply Last reply
                  0
                  • F Offline
                    F Offline
                    fermatqt
                    wrote on last edited by fermatqt
                    #9

                    però scusami eh:

                    • le query sono tutte con PREPARED STATEMENT, quindi quell'istruzione andrebbe in errore, in quanto non gli passo nessun parametro (o almeno a me a sempre dato errore se il numero di parametri non esattamente uguale a quello nelle query)
                    • non esiste un eseguibile per windows
                    • il binario (per linux) è solo sul mio pc!! quindi dovrebbe prima "rubarmelo" (che sta dietro ai firewall, e questi giorni è anche spento ad esempio)

                    quindi, partendo dal presupposto che come ho già detto tu hai ragione ed è una cosa che cercherò di modificare quando troverò una soluzione più sicura ma cmq flessibile, non la vedo così facile come dici te!

                    inoltre, nella mia azienda, sono l'unico informatico.
                    nessuno sa manco cosa sia l'SQL e l'istruzione DROP :D :D :D

                    VRoninV 1 Reply Last reply
                    0
                    • F fermatqt

                      però scusami eh:

                      • le query sono tutte con PREPARED STATEMENT, quindi quell'istruzione andrebbe in errore, in quanto non gli passo nessun parametro (o almeno a me a sempre dato errore se il numero di parametri non esattamente uguale a quello nelle query)
                      • non esiste un eseguibile per windows
                      • il binario (per linux) è solo sul mio pc!! quindi dovrebbe prima "rubarmelo" (che sta dietro ai firewall, e questi giorni è anche spento ad esempio)

                      quindi, partendo dal presupposto che come ho già detto tu hai ragione ed è una cosa che cercherò di modificare quando troverò una soluzione più sicura ma cmq flessibile, non la vedo così facile come dici te!

                      inoltre, nella mia azienda, sono l'unico informatico.
                      nessuno sa manco cosa sia l'SQL e l'istruzione DROP :D :D :D

                      VRoninV Offline
                      VRoninV Offline
                      VRonin
                      wrote on last edited by
                      #10

                      @fermatqt said in Problema con esecuzione query di update:

                      andrebbe in errore, in quanto non gli passo nessun parametro

                      vero ma e' facilmente solvibile:
                      UPDATE CCOMCL_ATTRIB_ESTESI SET VALORE = ? WHERE DITCONTI = 'XXL' AND CODICE_ATTR = 'CI-PRIORITA' AND CHIAVE = 'CL' || ? || '01.01.1000'; DROP TABLE CCOMCL_ATTRIB_ESTESI;

                      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                      ~Napoleon Bonaparte

                      On a crusade to banish setIndexWidget() from the holy land of Qt

                      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