2016-06-24 4 views
0

Я пытаюсь получить доступ к mysql базе данных в qt C++.QSqlTableModel filter no results

У меня разные таблицы и вы хотите их вывести на QTableView.

Я использую QSqlTableModel, который прекрасно работает, но как только я хочу, чтобы отфильтровать результаты, которые я столкнуться с проблемами ..

Вот основная часть моего исходного кода:

mModelContacts->setTable("contacts"); 
mModelContacts->select(); 
mUi->tableContacts->setModel(mModelContacts); 

void MainWindow::on_submitContactsButton_clicked() 
{ 

switch(mUi->comboBoxContacts->currentIndex()) 
{ 
    case 0: 
     mModelContacts->setFilter("contacts_id = "+mUi->searchContactsLine->text()); 
     break; 
    case 1: 
     mModelContacts->setFilter("contacts_firstName LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
    case 2: 
     mModelContacts->setFilter("contacts_lastName LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
    case 3: 
     mModelContacts->setFilter("contacts_city LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
    case 4: 
     mModelContacts->setFilter("contacts_phoneNumber LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
} 

mModelContacts->select(); 
mUi->tableContacts->setModel(mModelContacts); 

}

Идентификационный фильтр (футляр 0) отлично работает. Но все остальное (имя, фамилия и т. Д.) Этого не делает. Я просто получил пустой стол. Таким образом, я могу видеть имена столбцов (поэтому я считаю, что мой синтаксис sql верен), но нет записи, независимо от того, что я набираю.

Есть ли ошибка в моем исходном коде? Или как я могу заставить это работать?

+0

Try инспектировать вашу строку запроса с QDebug(), например QDebug() << QString ("contacts_firstName LIKE" + '%' + mUi-> searchContactsLine-> текст() + '%'); и опубликуйте свой результат – CppChris

+1

@ChrisG Спасибо за подсказку :) –

ответ

1

Существует проблема с вами, добавив строку char* C-стиля ("contacts_firstName LIKE ") к в char ('%'), это приведет к следующему:

  1. char ('%') будет приведен к целое число (его представление в ASCII), чтобы выполнить добавление, взгляните на this.
  2. Целое число, полученное в результате актерского состава (37), будет добавлено в строку C-style char*, это приведет вас в память, которую вы не инициализировали (возможно, другие строки C-стиля, которые у вас есть в вашем режиме только для чтения раздел данных).
  3. после этого QString добавляет данные от указателя зла, полученного выше (пока не найдет символ '\0'), в строку, которая находится в вашей строке, в результате получилось QString, на которое вы явно не нацелились. , ,

в резюме вы должны заменить setFilter звонки с чем-то вроде этого:

mModelContacts->setFilter(QString("contacts_firstName LIKE '%")+mUi->searchContactsLine->text()+QString("%'")); 
+0

Вы решили! Большое спасибо :) Ты сделал мой день! Кажется, мне еще нужно многому научиться. –