Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Dúvida com QTimer e QDateTime



  • Olá estou tentando fazer um timer que a cada 24 horas verifique se os agendamentos do meu banco não foram atualizados. Caso aconteça isso, eu preciso atualizar meu banco de dados para o dia seguinte.

    O que acontece é que estou trabalhando sem tempo de zona(without zone)

    Ai utilizo o QDateTime:: currentTimeUtc()

    mas na hora de imprimir aparece a hora...

    alguém sabe o porque?

    posso postar o código se alguém souber melhor do assunto.

    obrigado!



  • Pode postar.



  • @ connect(&_timer, SIGNAL(timeout()), this, SLOT(mostraHora()));
    _timer.setSingleShot(false);
    _timer.setInterval(1000*5);
    _timer.start();

    }

    void ExecutaHora::mostraHora(){

    QProcess myProcess;
    myProcess.execute("date");
    
    ConsultaBD consultaBD;
    consultaBD.atualizaBd();
    

    }@

    @void ConsultaBD::atualizaBd(){

    AgendamentoModel agendamentoEspecial;
    agendamentoEspecial.updateAgendamento();
    

    }@

    @void AgendamentoModel::updateAgendamento(){

    QDateTime hoje =  QDateTime::currentDateTimeUtc();
    
    QDateTime amanha = QDateTime::currentDateTimeUtc().addDays(1);
    
    QString sql = "UPDATE agendamento SET data = ? WHERE data < ? AND regra >= 5";
    
    QSqlQuery query = prepareQuery(sql);
    
    query.addBindValue(amanha);
    query.addBindValue(hoje.currentDateTimeUtc());
    
    //qDebug() << "amanha = " << amanha;
    //qDebug() << "hoje = " << hoje;
    
    if(query.exec&#40;&#41;&#41;{
        qDebug() << "#EXECUTOU QUERY AGENDAMENTO-UPDATEAGENDAMENTO#";
    }else
        qDebug() << "#NAO EXECUTOU QUERY AGENDAMENTO-UPDATEAGENDAMENTO#";
    

    }@

    A saida esta vindo sempre com hora... eu não quero as horas, foi por isso que tentei usar o Utc ali no currentTime... but.. não ta dando.. ta vindo com hora.

    O mais engraçado é que meu banco de dados ele tem na definição without time zone.. ou seja, nao devia aceitar o preenchimento do campo, certo? ai em vez de ficar 00:00:00 fica com alguma hora marcada.. :(



  • Qual a definição da coluna no seu banco de dados? É MySQL, SQLite ou PostgreSql?

    Você pode tentar fazer bind da variável "amanha" assim:

    @
    query.addBindValue(amanha.date());
    @

    O date() retorna um QDate.



  • Tentei isso já. Utilizo o postgresql. Amanha encontro com meu companheiro de equipe ai ele tem mais experiência... obrigado pelo retorno TIoRoy!


Log in to reply