Results 1 to 20 of 26

Thread: Refresh QDataTable

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    main.cpp is as under :
    Qt Code:
    1. #include <qapplication.h>
    2. #include "loginfrm.h"
    3. #include "editfrm.h"
    4. #include<qsqldatabase.h>
    5. #include<qstring.h>
    6. #include <qthread.h>
    7. #include <stdlib.h>
    8. #include <qwidget.h>
    9. #include <qtimer.h>
    10.  
    11. int main( int argc, char **argv )
    12. {
    13. QApplication a( argc, argv );
    14. QSqlDatabase *db = QSqlDatabase::addDatabase("QMYSQL3");
    15. db->setDatabaseName("logindb");
    16. db->setUserName("root");
    17. db->setPassword("");
    18. db->setHostName("localhost");
    19. db->open();
    20. if ( !db->open())
    21. {
    22. qWarning(" database connection no thayu ");
    23. }
    24.  
    25. editfrm efrm;
    26.  
    27. a.setMainWidget( &efrm );
    28.  
    29. efrm.show();
    30. qWarning("waiting for login");
    31. qWarning("creating timer");
    32. QTimer *timer = new QTimer( &efrm , "mt" );
    33. efrm.connect( timer, SIGNAL(timeout()), SLOT(refreshTable()) );
    34. timer->start( 5000, FALSE ); /* 3 seconds single-shot timer 3000 */
    35. a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    36.  
    37. qWarning("Leaving main");
    38. return a.exec();
    39.  
    40. }
    To copy to clipboard, switch view to plain text mode 
    NOTE : the editfrm gets some of its values from loginfrm because it is loaded first. but for the ease of understanding i have directly called editfrm from the main. It might be incorrect from the implementation point of view but it is absolutely correct logically. The loginfrm does nothing but initializes some global variables so that editfrm can use it. In the actual code the loginfrm is loaded first and then if the login is correct then the editfrm is loaded. It is only here that i have changed main function to show() the editfrm directly.

    editfrm.ui.h is as follows :
    Qt Code:
    1. #include<qapplication.h>
    2. #include<qsqldatabase.h>
    3. #include "loginfrm.h"
    4. #include "modifyfrm.h"
    5. #include <qwidget.h>
    6. #include<qdatatable.h>
    7. #include <qtimer.h>
    8. #include<qthread.h>
    9. #include <qobject.h>
    10. #include <qtable.h>
    11. #include <qsqlcursor.h>
    12.  
    13. static int btn;
    14. static int i=0;
    15.  
    16. void editfrm::initvalues()
    17. {
    18.  
    19. loginfrm *lfrm = new loginfrm();
    20.  
    21. if ( lfrm->check())
    22. {
    23. PB_add->setEnabled(TRUE);
    24. PB_edit->setEnabled(TRUE);
    25. PB_delete->setEnabled(TRUE);
    26. }
    27. else
    28. {
    29. PB_add->setEnabled(FALSE);
    30. PB_edit->setEnabled(FALSE);
    31. PB_delete->setEnabled(FALSE);
    32. }
    33.  
    34. }
    35.  
    36.  
    37. void editfrm::addclicked()
    38. {
    39. btn=1;
    40. modifyfrm *mfrm = new modifyfrm();
    41. mfrm->initvalues();
    42. hide();
    43. mfrm->show();
    44. }
    45.  
    46.  
    47. void editfrm::editclicked()
    48. {
    49.  
    50. btn=2;
    51. modifyfrm *mfrm = new modifyfrm();
    52. mfrm->initvalues();
    53. hide();
    54. mfrm->show();
    55. }
    56.  
    57.  
    58. void editfrm::deleteclicked()
    59. {
    60. btn=3;
    61. modifyfrm *mfrm = new modifyfrm();
    62. mfrm->initvalues();
    63. hide();
    64. mfrm->show();
    65. }
    66.  
    67. int editfrm::checkbtn()
    68. {
    69. return btn;
    70. }
    71.  
    72. void editfrm::cancelclicked()
    73. {
    74. loginfrm *lfrm = new loginfrm(this);
    75. hide();
    76. lfrm->show();
    77. }
    78.  
    79. void editfrm::refreshTable()
    80. {
    81. QString swar="";
    82. swar.sprintf("tick tick %d",i);
    83. qWarning(swar);
    84. dataTable1->update();
    85. dataTable1->repaint(true);
    86. dataTable1->refresh(QDataTable::RefreshAll);
    87. update();
    88. i++;
    89. }
    To copy to clipboard, switch view to plain text mode 
    as per the timer after every 3 secs "tick tick i " is printed but the datatable is not getting updated or refreshed.
    as u can see i have tried out with update(), repaint(), refresh(), none of which is working here. the datatable is failing to show the updated database. The database is getting updated from another GUI which is out of this project. I simultaneously run both the project 's GUI and after making changes in the database from one GUI in one project it doesnt get showed in the GUI of another project.

    i hope atleast now the picture is very much clear.
    please help me solve this problem

    thanks and regards
    shamik
    Last edited by jacek; 28th November 2006 at 10:19. Reason: missing [code] tags

  2. #2
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    I simultaneously run both the project 's GUI and after making changes in the database from one GUI in one project it doesnt get showed in the GUI of another project.
    Can you see those changes if you connect to the database using a SQL console?

  3. #3
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    Quote Originally Posted by jacek View Post
    Can you see those changes if you connect to the database using a SQL console?
    what do you mean by this SQL console? how to start it??

  4. #4
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    what do you mean by this SQL console? how to start it??
    It's a program that allows you to issue SQL queries to the database server. AFAIR MySQL calls it "mysql".

  5. #5
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    i opened the console and typed mysql
    then mysql prompt appeared. do you mean this as mysql console??

    now i typed the select query on that particular table. now the table is shown on the console.
    keeping that open, i ran the exe of the project through which i want to change the database content. i made the changes from its GUI. but the sql table in the console showed the same result (it is obvious). to see the changes i have to write the query in the console again. then i can see the changes.

    this is the case with the original project too. the qdatatable widget doesnt reflect the changes as it should be. but whenever i hide it and show other dialog and then again i hide the second dialog and show the original dialog with qdatatable widget then i can see the changes. (hiding and showing is implemented with the help of necessary functions inside the code like show(), hide() ).


    if u call opening mysql from console which gives u mysql prompt like this-->
    mysql>

    then it is obvious that it wil show the changes in the database only if u write the query again after changing it from the GUI.

    if u r talking of any other MYSQL console then please tell me how to open it and how to work on it. i'll try on that also.

  6. #6
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    but whenever i hide it and show other dialog and then again i hide the second dialog and show the original dialog with qdatatable widget then i can see the changes. (hiding and showing is implemented with the help of necessary functions inside the code like show(), hide() ).
    Can you see the changes if you keep that QDataTable shown for more than 5 seconds (i.e. long enough for the timer to emit the signal)?

  7. #7
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    no.

    no changes are seen in the qdatatable no matter howlong i keep the timer going on

  8. #8
    Join Date
    Jan 2006
    Location
    Kerala
    Posts
    371
    Thanks
    76
    Thanked 37 Times in 32 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    It might be possible that the changes you make to the database from the client are not commited !!

    So, You can try comitting the changes to database.
    One more thing, Hope you are setting the interval as 3000 for 3 Sec
    We can't solve problems by using the same kind of thinking we used when we created them

  9. #9
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    i have treid commiting the database after every record change but still it isnt working. the timer time can b anything, may be 3, 5, 7 sec etc. that is not a problem.
    after the database is changed the timer may go on to even ticking 40 times still there is no change in the QDataTable.

    even if the QDataTable is kept shown for say 5 mins then also there is no change in it. i.e. the updated values are not shown.

    is there anything that v m missing ? i donno why does this simple one takes too much of time.
    please help me

  10. #10
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Can you see the changes if you update your database using the console (i.e. "mysql" program)?

  11. #11
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    No
    cant see the changes in the QDataTable even if i change the database from mysql prompt :
    mysql>

    i dont understand what is the problems.??
    There are 10 kinds of people in this world. Those who understand binary, and those who dont.

    regards
    shamik

  12. #12
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Do you start any transactions before reading data from the database?

Similar Threads

  1. row QDataTable
    By cristiano in forum Qt Programming
    Replies: 1
    Last Post: 18th November 2006, 17:07
  2. Replies: 9
    Last Post: 7th November 2006, 15:10
  3. QDataTable Inserts and Updates
    By ederbs in forum Qt Programming
    Replies: 2
    Last Post: 26th October 2006, 23:23
  4. displaying any table on a qdatatable
    By Philip_Anselmo in forum Newbie
    Replies: 4
    Last Post: 9th May 2006, 22:12
  5. Refreshing QDataTable
    By zlatko in forum Qt Programming
    Replies: 5
    Last Post: 2nd May 2006, 16:11

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.