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

Database location is not working if it is taken from external source



  • I have a simple database in location "c:/data/a.db"
    It is opened and used in program using
    db.open("c:/data/a.db");

    What I want is to store this location in file and take location from there and execute the process

    QString databaseLocation = readTextFile(QString path);
    
    /* the path is also valid and readTextFile("./location.txt") is also returning correct value
    */
    QString readTextFile(QString path)
    {
        QFile file(path);
    
        if(file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QTextStream in(&file);
            return  in.readAll();
        }
    
        return "";
    }
    // here databaseLocation = "c:/data/a.db"; which is same as of top
    db.open(databaseLocation);
    //this is  not working
    

    So the location given inside open is working and text given there is not working .
    What is wrong with this
    Please check this

    Thank You



  • @Thank-You
    This is not possible. If you need exactly the string "c:/data/a.db", it does not matter whether you hard-code it or read it from a file. If that is what you are saying, there is something wrong. Unless I am misunderstanding what you are saying....

    Purely at a guess: when you read it from file, does the line have a newline at the end? Which maybe you are then including at the end of the string passed to db.open(), which probably won't then work.

    Look more closely at exactly what you are getting/passing as the string read from the file. I would not expect in.readAll() to read a line from a file; more like in.readLine():

    The returned line has no trailing end-of-line characters ("\n" or "\r\n"), so calling QString::trimmed() can be unnecessary.

    [NOTE @Christian-Ehrlicher has made a post. I read what you are saying is happening/the problem very differently from his interpretation of what you have written.]

    You should look at storing any "setting" like this in QSettings class, not in a file of your own.


  • Lifetime Qt Champion

    Because the path is relative (to the current working directory). You either look for QCoreApplication::applicationDirPath() or better QStandardPaths::writeableLocation()



  • @Thank-You
    This is not possible. If you need exactly the string "c:/data/a.db", it does not matter whether you hard-code it or read it from a file. If that is what you are saying, there is something wrong. Unless I am misunderstanding what you are saying....

    Purely at a guess: when you read it from file, does the line have a newline at the end? Which maybe you are then including at the end of the string passed to db.open(), which probably won't then work.

    Look more closely at exactly what you are getting/passing as the string read from the file. I would not expect in.readAll() to read a line from a file; more like in.readLine():

    The returned line has no trailing end-of-line characters ("\n" or "\r\n"), so calling QString::trimmed() can be unnecessary.

    [NOTE @Christian-Ehrlicher has made a post. I read what you are saying is happening/the problem very differently from his interpretation of what you have written.]

    You should look at storing any "setting" like this in QSettings class, not in a file of your own.



  • @JonB Yes I did some mistake
    Sorry for that
    I forgot to take location at the very first of porgram and some code gets executed so
    We should declare at very first of the program


Log in to reply