2017-10-14 6 views
0

J'utilise QSqlTableModel *modelcompleter, puis en utilisant QCompleter pour charger les données dans le qLineEdit *searchObtenez champ id comme un entier d'un enregistrement dans QSqlTableModel

connect(ui->btnSearch, SIGNAL(clicked()), SLOT(search())); 
    modelcompleter->setTable("cust"); 
    modelcompleter->setEditStrategy(QSqlTableModel::OnManualSubmit); 
    modelcompleter->select(); 
    QCompleter *searchCompleter = new QCompleter(modelcompleter); 
    searchCompleter->setCompletionColumn(1); 
    searchCompleter->setCaseSensitivity(Qt::CaseInsensitive); 
    ui->search->setCompleter(searchCompleter); 

J'utilise QLineEdit pour frapper entrer sur le point que je veux choisir:

connect(ui->search, SIGNAL(returnPressed()), SLOT(search())); 

la fonction

void search(){ 
cust_name = ui->search->text(); 
    modelsearch->setTable("cust"); 
    modelsearch->setEditStrategy(QSqlTableModel::OnManualSubmit); 
    modelsearch->setFilter(QString("cust_name like '%%1%'").arg(cust_name)); 
    modelsearch->select(); 
    qDebug() << modelsearch->record(0).value("id").toInt(); } 

Je ne comprends pas pourquoi mais la recherche de modèles qui actuellement met à seulement 1 enregistrement qu'il obtient quand j'appuie sur enter (QCompleter s'assure que je soumets le 'cust_name' complet). sorties QDebug() 0. Y at-il une autre façon d'obtenir le id du 'cust_name' qui correspond à la requête de recherche 'cust_name'

Répondre

0
qDebug() << modelsearch->record(0).value("id").toInt(); 

au lieu de cela. J'ai utilisé

QSqlQueryModel *query = new QSqlQueryModel; 
query->setQuery(QString("SELECT id from cust WHERE cust_name like '%%1%'").arg(cust_name)); 
qDebug() << query->record(0).value("id").toInt(); 

et son maintenant aller chercher l'identifiant de l'enregistrement!