邪恶海盗 发表于 2012-10-15 19:23:31

SQLite读取数据后去重并替换Combobox中旧数据怎么写???

如题我创建了一个SQLite数据库,表名AAA,列B,C,D,
结构大概如下
B|C|D
1-a|...
1-b|...
1-c|...
2-a|...
2-b|...
3-b|...
3-c|...
设计两个Combobox,读取表AAA中B列数据并拆分,读取我搞定了,拆分取第一位输出到Combo1有重复...
当Combo1选中1时,Combo2返回B列中1开头的字符串最后一位,这一步我也实现了,不过当Combo2再选择2时,以2开头的字符串最后一位字符会添加进Combo2而不清空原有数据..

求高手指导...

nmgwddj 发表于 2012-10-16 00:32:32

的确我是看迷糊了,能把数据库表结构和程序界面上传上来,标记一下想怎么实现吗?这个应该简单的。

netegg 发表于 2012-10-16 00:36:25

那个第一个combo变的时候,必须在添加数据前清空原来的combo项啊,上次给你的那个代码没看明白吗?

邪恶海盗 发表于 2012-10-16 15:20:10

本帖最后由 邪恶海盗 于 2012-10-16 15:22 编辑

回复 2# nmgwddj


    根据帮助改的:

#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#NoTrayIcon;右下角不显示图标

$WinMain = GUICreate("XXX", 300, 100) ;创建主窗口
$btn3 = GUICtrlCreateButton("确定", 250, 7, 40, 20)
$comb1 = GUICtrlCreateCombo("标志1", 55, 8, 85, 18)
$comb2 = GUICtrlCreateCombo("标志2", 155, 8, 85, 18)
Local $hQuery, $hQuery2, $aRow, $aRow2, $sMsg1, $sMsg2
_SQLite_Startup()
ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)
_SQLite_Open() ; 打开:内存:数据库
_SQLite_Exec(-1, "CREATE TABLE aTest (a,b,c);") ; CREATE a Table
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('c','2','World');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('b','3','XX');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Ha1lo');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('c','1','Ha2lo1');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','He3lo2');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Heclo3');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Heblo4');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Halo5');") ; 插入数据
_SQLite_Exec(-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Hdlo6');") ; 插入数据
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        ;DirRemove($Temp, 1)
                        _SQLite_Close()
                        _SQLite_Shutdown()
                        Exit
                Case $btn3
                        _SQLite_Query(-1, "SELECT c FROM aTest;", $hQuery)
                        While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
                                $sMsg1 &= StringLeft($aRow, 2) & "|"
                        WEnd
                        GUICtrlSetData($comb1, $sMsg1, "标志1")
                Case $comb1
                        _SQLite_Query(-1, "SELECT c FROM aTest Where c like '%" & GUICtrlRead($comb1) & "%';", $hQuery2)
                        ;_SQLite_Qury(-1, "SELECT * FROM 'aTest' WHERE 'a' like'%He%'", $hQuery) ; 查询
                        While _SQLite_FetchData($hQuery2, $aRow2) = $SQLITE_OK
                                $sMsg2 &= StringMid($aRow2, 3) & "|"
                        WEnd
                        ;_SQLite_Exec(-1, "DROP TABLE aTest;") ; 删除表
                        GUICtrlSetData($comb2, $sMsg2, "标志2")

        EndSwitch
WEnd

有人说用数据库地话体现不出效率,下一步尝试存储的时候分两例,这样就不需要用AU3拆字符了...

邪恶海盗 发表于 2012-10-16 15:20:39

回复 3# netegg


    蛋哥, 那个真没看明白,我就套上去用的...{:face (319):}

netegg 发表于 2012-10-16 15:23:35

回复 5# 邪恶海盗
那就没办法了,有空我看看加点注释吧

邪恶海盗 发表于 2012-10-16 15:30:16

回复 6# netegg

Case $combo23
local $mpbzi = '', $i = 0
;GUICtrlSetData($combo24, "", "标记")
While $i <= _GUICtrlListView_GetItemCount($List3) - 1
      If StringInStr(Stringleft(_GUICtrlListView_GetItemText($List3, $i), StringInStr(_GUICtrlListView_GetItemText($List3, $i), '-') - 1),GUICtrlRead($combo23)) Then
      $mpbz = StringSplit(_GUICtrlListView_GetItemText($List3, $i), "-")
      $mpbzi &= $mpbz & '|'
      EndIf
      $i += 1
   WEnd
;                     ControlCommand($softname, "", $combo24, "DelString", 0)
   GUICtrlSetData($combo24, "|" & $mpbzi)
    指点一下吧,哪一行是清空的???

netegg 发表于 2012-10-16 15:47:59

本帖最后由 netegg 于 2012-10-16 15:49 编辑

;GUICtrlSetData($combo24, "", "标记")
谁让你把这行注释掉的

邪恶海盗 发表于 2012-10-16 16:34:13

回复 8# netegg


    蛋哥,这行是添加一个空白数据吧,有清空功能么???

netegg 发表于 2012-10-16 16:37:35

回复 9# 邪恶海盗
试了再说

邪恶海盗 发表于 2012-10-16 16:45:43

回复 10# netegg


    添加GUICtrlSetData($comb2, "", "标志2")到第47行测试无效...

netegg 发表于 2012-10-16 16:54:37

回复 11# 邪恶海盗
不知道了
你没事分两个帖子折腾一个问题,怎么想啊,都连不上,看了这边,那边就不对了,那边对了,这边可能又出问题

邪恶海盗 发表于 2012-10-16 18:52:33

回复 12# netegg


    不一样,那个是从列表里读数据,现在我想直接从数据库内读数据...

netegg 发表于 2012-10-16 18:54:58

本帖最后由 netegg 于 2012-10-16 18:56 编辑

回复 13# 邪恶海盗
最简单的办法,如果搞不定,你倒腾到listview再转下不就完了,有多大区别
或者换个角度想,怎么把sqlite折腾到listview里不就行了

邪恶海盗 发表于 2012-10-16 20:10:23

回复 14# netegg


    SQLite里的东西整到ListView我搞定了,昨天被职业码农教训了一顿说是效率低下,直接从数据库中提取效率要高一些,SO....
页: [1] 2
查看完整版本: SQLite读取数据后去重并替换Combobox中旧数据怎么写???