Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Writing SQlite Databse in Qt
Forum Updated to NodeBB v4.3 + New Features

Writing SQlite Databse in Qt

Scheduled Pinned Locked Moved Unsolved General and Desktop
2 Posts 2 Posters 739 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.
  • H Offline
    H Offline
    Hanita
    wrote on last edited by
    #1

    Hi.I am writing SQLite database in Qt for client server program! I want every message that server received from client save in database. I am new in Qt so I wrote a simple code, it doesn't have any error but it couldn't save anything in database. Could you please help me?Thanks

    bool MainWindow::createConnection()
     {
    QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
    
    database.setDatabaseName("Message.dat");
    
       if(!database.open())
       {
           qDebug()<<"can not open database";
    
           database.lastError().text();
    
           return false;
        }
       return true;
      }
    
    
    void MainWindow::insertMessage()
     {
       QSqlQuery query;
    
      query.prepare("INSERT INTO messages(IPAddress, date, message)"
                            " values(?,?,?)")
     }
    
     MainWindow::messagewindow()
    {
         enum {
              messages_id = 0 ,
              messages_date =1 ,
              messages_IPAddreess = 2,
              messages_message = 3,
              };
    
    
    
         model = new QSqlTableModel(this);
         {
            model->setTable("messages");
            model->setHeaderData(messages_date, Qt::Horizontal, tr("Date"));
            model->setHeaderData(messages_IPAddreess, Qt::Horizontal, tr("From"));
            model->setHeaderData(messages_message, Qt::Horizontal, tr("Message"));
            model->select();
    
         }
    
    
    
         view = new QTableView;
         {
            view->setSelectionMode(QAbstractItemView::SingleSelection);
            view->setSelectionBehavior(QAbstractItemView::SelectRows);
            view->setColumnHidden(messages_id, true);
            view->setModel(model);
            view->resizeColumnsToContents();
            view->setEditTriggers(QAbstractItemView::NoEditTriggers);
    
            QHeaderView *header = view->horizontalHeader();
            header->setStretchLastSection(true);
         }
    
     }
    

    bool create = !QFile::exists("Message.dat");
    
    if (!myserver.createConnection())
       return 1;
    
    if (create)
    
       myserver.insertMessage();
    
    
    myserver.show();
    

    void insertMessage(QString IPAddrress, QDate date, QString message)
    {
        QSqlQuery query;
        query.addBindValue(IPAddrress);
        query.addBindValue(date);
        query.addBindValue(message);
        query.exec();
    }
    
    
    
    void createdata()
    {
        QSqlQuery query;
        query.exec("DROP TABLE messages");
        query.exec("CREATE TABLE messages ("
                   "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                   "HostAddress integer,"
                   "date char(10),"
                   "message varchar(30))");
    }
    
    1 Reply Last reply
    0
    • M Offline
      M Offline
      mike_student
      wrote on last edited by mike_student
      #2

      Hello,
      you have 2 different functions for inserting messages

      void MainWindow::insertMessage()
       {
         QSqlQuery query;
      
        query.prepare("INSERT INTO messages(IPAddress, date, message)"
                              " values(?,?,?)")
       }
      

      and

      void insertMessage(QString IPAddrress, QDate date, QString message)
      {
          QSqlQuery query;
          query.addBindValue(IPAddrress);
          query.addBindValue(date);
          query.addBindValue(message);
          query.exec();
      }
      

      I am not sure that it is the correct way, because only 1st function will be called.
      You can use "query.lastError();" to get debug-information.
      But you will not get any information. You are preparing query but not using it.

      void MainWindow::insertMessage()
       {
         QSqlQuery query;
      
        query.prepare("INSERT INTO messages(IPAddress, date, message)"
                              " values(?,?,?)")
        qDebug() << query.lastError(); // to see details
       }
      

      You could change your code to this example, then it should work but I do not recommend you to use it in this way.

      QSqlQuery MainWindow::insertMessage()
       {
         QSqlQuery query;
      
         query.prepare("INSERT INTO messages(IPAddress, date, message)"
                              " values(?,?,?)");
         return query;
       }
      void insertMessage(QString IPAddrress, QDate date, QString message, QSqlQuery query)
      {    
          query.addBindValue(IPAddrress);
          query.addBindValue(date);
          query.addBindValue(message);
          query.exec();
      }
      
      1 Reply Last reply
      1

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved