Qt - QSqlQuery

0

Stworzyłem sobie taki formularz (jest to przykład)

screenshot-20201121195300.png

W jaki sposób mogę sprawić, aby przyciski Poprzedni i Następny wyświetlały rekordy w kontrolkach znajdujących się na formularzu ?
Kod w załączniku

0

Nie wiem dokładnie w czym problem. Możesz się już połączyć z bazą? W kodzie widzę, że masz zapytanie do pobrania danych. Printują Ci się jakieś dane jak je wywołasz z Twojego programu?

0

@_dominik:
Kod trochę poprawiłem i znajduje się pod tym linkiem
Baza danych do zaimportowania w xampp znajduje się w załączniku
Nazwa bazy danych jaka jest użyta w tym projekcie to "DBViewPDF"

Gdyby ktoś jeszcze doradził dwie rzeczy

  1. Wiem, że przechowywanie danych z bazy w kontenerze jest bez sensu - ale jak zrobić aby dane były pobierane dynamicznie z bazy do odpowiednich kontrolek ?
  2. no i gdyby ktoś podpowiedział jak poprawić te przyciski poprzedni i następny w taki sposób aby poprawnie pokazywały rekordy
0

ad. 1 nie wiem czy to taki zły pomysł. Zwłaszcza jeśli to by miało być tylko read only to może lepiej, dać tylko jedno zapytanie do bazy i w jakieś strukturze buforować wyniki niż odpytywać bazę o każdy rekord. Możesz też poczytać o mvc. Qt bardzo dobrze wspiera to rozwiązanie i w sumie nie musiał byś się martwić o wiele rzeczy. Link

0

Propozycja:

    QVector <QString> myStrID;
    QVector <QString> myStrPath;

To zamień sobie na jakąś strukturę, wtedy będziesz miał do pilnowania jeden vector.
Propozycja rozwiązania:
Zrób sobie zmienną np. currentIndex, aby trzymać aktualną pozycję na której jesteś, wtedy pod funkcję, które reagują na sygnały kliknięcia będziesz mógł w łatwy sposób ustawić text w obu kontrolkach, a łapiąc w zakres
0 <= currentIndex < QVector::size() nie wypadniesz z vectora

0

no i tutaj jest problem, bo jeszcze nie zrozumiałem jak używać currentIndex bo to jest z klasy QModelIndex

Tutaj można zrobić to "na około" - starsi stażem zrobią to lepiej z QModelIndex, ale ja tutaj postaram się przedstawić obejście.

W mainwindow.h tworzysz int m_currentIndex {0};


bool MainWindow::BPrev()
{
 if(m_currentIndex != 0)
  {
     m_currentIndex--;
  }
ui->myuiID->setText(myStrID[m_currentIndex]);
}

bool MainWindow::BNext()
{
  if(m_currentIndex < myStrID.size()-1)
 {
   m_currentIndex++;
 }
    ui->myuiID->setText(myStrID[m_currentIndex]);
}

Mam nadzieję, że pomoże Ci dojść ten przykład do rozwiązania problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1