• 9431阅读
  • 4回复

一个用于完成模糊检索数据表的类 [复制链接]

上一主题 下一主题
离线sundp
 

只看楼主 倒序阅读 楼主  发表于: 2009-01-16
— 本帖被 XChinux 执行加亮操作(2009-02-24) —
这是个用于完成模糊检索的类。在数据库编程中经常会用到这种功能,提交一个简短的关键字检索指定表后,如果符合要求的记录多于一个,则弹出一个窗口,把符合要求的记录列出来供用户选择。

对外接口的函数是 sckwd::getValue,它的第一个参数是一个QSqlQuery *,一个有效执行的select语句,第二个参数指定传送过来的Query将有几列被用于显示,第三个以后的参数用于指定弹出窗口的位置。此函数被重载,用于不同的指定窗口位置的方式。我只完成了我常用的两种方式,其它方式留给有不同要求的兄弟们自己去完成吧;)

返回值是一个QStringList。如果送来的Query是空的,或用户在弹出窗口后按下ESC键,则返回一个空值,如果送来的Query只有一行,那么不弹出窗口,而直接返回那一行的值。如果Query多于一行,则弹出供选窗口,将用户按下ENTER键的那一行返回。


给一个使用此类的例子:

sckwd * sc=new sckwd();

sq="select pm,gg,dw,dj,lb from price where dh like '%"+edYpmc->text()+"%'";
sq1->exec(sq);
QStringList v;
v=sc->getValue(sq1,2,edYpmc->geometry().left(),edYpmc->geometry().top());
    if(!v.isEmpty())
    {
        edYpmc->setText(v.value(0));
        edGg->setText(v.value(1));
        edDw->setText(v.value(2));
        edDj->setText(v.value(3));
        edCfsl->setFocus();
    }
[ 此贴被sundp在2009-01-16 20:19重新编辑 ]
附件: sckwd.cpp (4 K) 下载次数:145
附件: sckwd.h (1 K) 下载次数:130
人境结庐<http://sundp70.blog.163.com>心远地偏
离线khb2000

只看该作者 1楼 发表于: 2009-02-05
谢谢分享!谢谢分享!谢谢分享!谢谢分享!谢谢分享!    
离线khb2000

只看该作者 2楼 发表于: 2009-02-05
谢谢分享!谢谢分享!谢谢分享!谢谢分享!      
离线紫露霜凝
只看该作者 3楼 发表于: 2010-03-09
楼主还在关注此帖吗?我怎么运行以上实例出现了错误,说什么内存不可读,这是什么原因啊。先谢过啦!
离线jwqacqy
只看该作者 4楼 发表于: 2010-12-03
哈哈  谢谢楼主   根据楼主的方法   我这边也实现了模糊搜索    我也贴下一点愚见:
void Insert::search_data()
{
    
    QSqlQuery query;
    query.prepare("select number,style from product where name like '%"+line1->text()+"%'");; //line1->text() 这里输入数据  
    //query.addBindValue(line1->text());//此时不能再绑定值
    query.exec();
    query.next();
    qDebug()<<query.value(0).toString()<<query.value(1).toString();
    qDebug() <<"kakaka";
}
快速回复
限100 字节
 
上一个 下一个