• 7140阅读
  • 2回复

qt3中sqlite的查询结果的显示问题?? [复制链接]

上一主题 下一主题
离线dragonfever
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-18
用QT3的designer设计一个dialog窗体名为schform,要实现在QLineEdit中输入一串字符,然后点击按钮ok,能在QTextEdit中显示sqlite数据库中的查询结果的功能,该如何编码呢?
我设想使用一个槽函数on_okButtonClicked()来实现,现在不知道该怎么设计这个函数,我已经编写了一部分,如下:
#include "sqlite3.h"

void schform::on_okButtonClicked()
{
sqlite3* db=NULL;
int rc;
rc=sqlite3_open("library1.db",&db);
if(rc)
{
    QString errMsgQString;
    errMsgQString.sprintf("Cannot open database: %s\n",sqlite3_errmsg(db));
    result->setText(errMsgQString);
    sqlite3_close(db);  
}
else{

数据插入操作代码,不知道怎么设计??)

    };

主要困惑的点是,在sqlite3的查询语句“select *from table xxx where xx=val;”中的能不能实现变量var的使用,我在论坛里面看到插入操作有这样使用变量的,如下所示:

char *val='200605011306';
sprintf(sql,"INSERT INTO \"SensorData\" VALUES(NULL , 34 , 45 , '%s', 15.4 );",val) ;

那么对于查询操作该怎么使用变量呢?sprintf(sql,"select *from table xxx where xx=val;",val)??

希望各位路过的大侠能指点一二,感激不尽!



[ 此帖被dragonfever在2011-04-20 17:12重新编辑 ]
离线dragonfever
只看该作者 1楼 发表于: 2011-04-20
自己底下摸索了一番,程序调通后,运行,但不论是否在QLineEdit中输入值,只要一点okButton按钮,界面就卡死,在qvfb中运行时,查看终端显示内存缓冲溢出的问题,如下:
vqfb&
./tea -qws
Connected to VFB server: 240 x 320 x 32
*** buffer overflow detected ***: ./tea terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x1f2390]
/lib/tls/i686/cmov/libc.so.6(+0xe12ca)[0x1f12ca]
/lib/tls/i686/cmov/libc.so.6(+0xe0a08)[0x1f0a08]
/lib/tls/i686/cmov/libc.so.6(_IO_default_xsputn+0x9e)[0x179afe]
/lib/tls/i686/cmov/libc.so.6(_IO_vfprintf+0x10e)[0x14cd1e]
/lib/tls/i686/cmov/libc.so.6(__vsprintf_chk+0xad)[0x1f0abd]
/lib/tls/i686/cmov/libc.so.6(__sprintf_chk+0x2d)[0x1f09fd]
./tea[0x804cd2f]
./tea[0x804d0cf]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN7QObject15activate_signalEP15QConnectionListP8QUObject+0x16a)[0x11f5f6a]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN7QObject15activate_signalEi+0x88)[0x11f80b8]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN7QButton7clickedEv+0x2c)[0x108c7cc]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN7QButton17mouseReleaseEventEP11QMouseEvent+0x128)[0x128de18]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN7QWidget5eventEP6QEvent+0x110)[0x122ffc0]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN12QApplication14internalNotifyEP7QObjectP6QEvent+0xc7)[0x1198c27]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN12QApplication6notifyEP7QObjectP6QEvent+0x235)[0x119a0e5]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN12QApplication20sendSpontaneousEventEP7QObjectP6QEvent+0x3e)[0x10c806e]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN9QETWidget19translateMouseEventEPK13QWSMouseEventi+0x7e4)[0x10c1314]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN12QApplication15qwsProcessEventEP8QWSEvent+0x8de)[0x10c529e]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN10QEventLoop13processEventsEj+0x1e1)[0x10d1ec1]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN10QEventLoop9enterLoopEv+0x50)[0x11afbb0]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN10QEventLoop4execEv+0x26)[0x11afa36]
/root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3(_ZN12QApplication4execEv+0x1f)[0x119927f]
./tea(main+0x96)[0x804c076]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x126bd6]
./tea[0x804bf41]
======= Memory map: ========
00110000-00263000 r-xp 00000000 07:00 178868     /lib/tls/i686/cmov/libc-2.11.1.so
00263000-00264000 ---p 00153000 07:00 178868     /lib/tls/i686/cmov/libc-2.11.1.so
00264000-00266000 r--p 00153000 07:00 178868     /lib/tls/i686/cmov/libc-2.11.1.so
00266000-00267000 rw-p 00155000 07:00 178868     /lib/tls/i686/cmov/libc-2.11.1.so
00267000-0026a000 rw-p 00000000 00:00 0
00390000-00479000 r-xp 00000000 07:02 3765       /usr/lib/libstdc++.so.6.0.13
00479000-0047a000 ---p 000e9000 07:02 3765       /usr/lib/libstdc++.so.6.0.13
0047a000-0047e000 r--p 000e9000 07:02 3765       /usr/lib/libstdc++.so.6.0.13
0047e000-0047f000 rw-p 000ed000 07:02 3765       /usr/lib/libstdc++.so.6.0.13
0047f000-00486000 rw-p 00000000 00:00 0
005dc000-005dd000 r-xp 00000000 00:00 0          [vdso]
007a6000-007a8000 r-xp 00000000 07:00 178871     /lib/tls/i686/cmov/libdl-2.11.1.so
007a8000-007a9000 r--p 00001000 07:00 178871     /lib/tls/i686/cmov/libdl-2.11.1.so
007a9000-007aa000 rw-p 00002000 07:00 178871     /lib/tls/i686/cmov/libdl-2.11.1.so
00a5e000-00a82000 r-xp 00000000 07:00 178872     /lib/tls/i686/cmov/libm-2.11.1.so
00a82000-00a83000 r--p 00023000 07:00 178872     /lib/tls/i686/cmov/libm-2.11.1.so
00a83000-00a84000 rw-p 00024000 07:00 178872     /lib/tls/i686/cmov/libm-2.11.1.so
00c96000-00cb3000 r-xp 00000000 07:00 2638       /lib/libgcc_s.so.1
00cb3000-00cb4000 r--p 0001c000 07:00 2638       /lib/libgcc_s.so.1
00cb4000-00cb5000 rw-p 0001d000 07:00 2638       /lib/libgcc_s.so.1
00d23000-00d38000 r-xp 00000000 07:00 178882     /lib/tls/i686/cmov/libpthread-2.11.1.so
00d38000-00d39000 r--p 00014000 07:00 178882     /lib/tls/i686/cmov/libpthread-2.11.1.so
00d39000-00d3a000 rw-p 00015000 07:00 178882     /lib/tls/i686/cmov/libpthread-2.11.1.so
00d3a000-00d3c000 rw-p 00000000 00:00 0
00d3c000-00dc8000 r-xp 00000000 07:01 663        /home/lf/sqlite_pc/lib/libsqlite3.so.0.8.6
00dc8000-00dc9000 ---p 0008c000 07:01 663        /home/lf/sqlite_pc/lib/libsqlite3.so.0.8.6
00dc9000-00dca000 r--p 0008c000 07:01 663        /home/lf/sqlite_pc/lib/libsqlite3.so.0.8.6
00dca000-00dcb000 rw-p 0008d000 07:01 663        /home/lf/sqlite_pc/lib/libsqlite3.so.0.8.6
00dcb000-00dcc000 rw-p 00000000 00:00 0
00e8c000-00ea7000 r-xp 00000000 07:00 31619      /lib/ld-2.11.1.so
00ea7000-00ea8000 r--p 0001a000 07:00 31619      /lib/ld-2.11.1.so
00ea8000-00ea9000 rw-p 0001b000 07:00 31619      /lib/ld-2.11.1.so
00ea9000-0167a000 r-xp 00000000 07:00 167690     /root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3.3.8
0167a000-016ba000 r--p 007d0000 07:00 167690     /root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3.3.8
016ba000-016c4000 rw-p 00810000 07:00 167690     /root/qt/qt_pc/qt-embedded-free-3.3.8/lib/libqte-mt.so.3.3.8
016c4000-016c7000 rw-p 00000000 00:00 0
08048000-0804e000 r-xp 00000000 07:01 1916       /home/lf/tea/tea
0804e000-0804f000 r--p 00005000 07:01 1916       /home/lf/tea/tea
0804f000-08050000 rw-p 00006000 07:01 1916       /home/lf/tea/tea
0960e000-09676000 rw-p 00000000 00:00 0          [heap]
b760f000-b7610000 r--p 00000000 07:00 160114     /root/qt/qt_pc/qt-embedded-free-3.3.8/lib/fonts/helvetica_80_50.qpf
b7610000-b7611000 r--p 00000000 07:00 160069     /root/qt/qt_pc/qt-embedded-free-3.3.8/lib/fonts/helvetica_100_50.qpf
b7611000-b7622000 rw-s 00000000 00:04 2490398    /SYSV7200baad (deleted)
b7622000-b763b000 rw-s 00000000 00:04 2457621    /SYSV6d00baad (deleted)
b763b000-b7687000 rw-s 00000000 00:04 2424852    /SYSV6200baa1 (deleted)
b7687000-b76c6000 r--p 00000000 07:02 49888      /usr/lib/locale/zh_CN.utf8/LC_CTYPE
b76c6000-b76c7000 r--p 00000000 07:02 7889       /usr/lib/locale/zh_CN.utf8/LC_NUMERIC
b76c7000-b7819000 r--p 00000000 07:02 49890      /usr/lib/locale/zh_CN.utf8/LC_COLLATE
b7819000-b781b000 rw-p 00000000 00:00 0
b781b000-b781c000 r--p 00000000 07:02 49889      /usr/lib/locale/zh_CN.utf8/LC_TIME
b781c000-b781d000 r--p 00000000 07:02 49891      /usr/lib/locale/zh_CN.utf8/LC_MONETARY
b781d000-b781e000 r--p 00000000 07:02 49893      /usr/lib/locale/zh_CN.utf8/LC_MESSAGES/SYS_LC_MESSAGES
b781e000-b781f000 r--p 00000000 07:02 7734       /usr/lib/locale/zh_CN.utf8/LC_PAPER
b781f000-b7820000 r--p 00000000 07:02 49894      /usr/lib/locale/zh_CN.utf8/LC_NAME
b7820000-b7821000 r--p 00000000 07:02 49895      /usr/lib/locale/zh_CN.utf8/LC_ADDRESS
b7821000-b7822000 r--p 00000000 07:02 49896      /usr/lib/locale/zh_CN.utf8/LC_TELEPHONE
b7822000-b7823000 r--p 00000000 07:02 8200       /usr/lib/locale/zh_CN.utf8/LC_MEASUREMENT
b7823000-b782a000 r--s 00000000 07:02 94900      /usr/lib/gconv/gconv-modules.cache
b782a000-b782b000 r--p 00000000 07:02 49897      /usr/lib/locale/zh_CN.utf8/LC_IDENTIFICATION
b782b000-b782e000 rw-p 00000000 00:00 0
bfbd1000-bfbe6000 rw-p 00000000 00:00 0          [stack]
已放弃


猜想是槽函数设计中QString类与char*转换中出的问题,我把槽函数设计文件teaform.ui.h贴出来,大家帮忙看看是哪里问题:



[ 此帖被dragonfever在2011-04-20 16:32重新编辑 ]
离线kaede
只看该作者 2楼 发表于: 2011-04-26
你这个我前两天刚解决
1、调用变量查询,可以定义QString str,先将查询语句赋给str,str=“select *from table xxx where xx=”;
然后在将var赋给str  ,str+=var,过程中注意“‘”  和 “’”这两个符号的加入
算了,我直接写上吧
str += “‘”;
str +=var;
str += “’”;
然后将str当做一条sql语句即可
2、至于返回结果,可以调用sqlite3_get_table 这个函数,将那个数组的值返回即可
前些天多亏你的那个project,让我找到了我的编译错误...
有什么问题咱们再联系哈
快速回复
限100 字节
 
上一个 下一个