AutoIt上路09-Access操作(简单增、删、改)及与ListView同步 http://www.gaohaiyan.com/961.html
使用AutoIt对Access增、删、改是比较简单的,当然查询也不难,只是在本例中涉及的业务有点复杂而已。
因为要区分不同的表,还要根据不同的表来显示列,各种判断...
本例点击工具栏搜索按钮实现查询设计的业务流程如下:
◆ 1)判断是哪个Tab标签处于选中状态,
◆ 2)根据标签匹配ListView以及数据表,
◆ 3)弹出条件填写界面,填写对应表字段的搜索关键字;这个界面也是对应标签显示的,
◆ 4)每个字段的关键字可以填写多个,
◆ 5)响应“确定”搜索,
◆ 6)拼接sql语句,填写了的字段关键字加入,否则忽略,
◆ 7)执行查询后,拼接查询结果,
◆ 8)更新ListView。这最后一步,最好是新建一个Tab标签、ListView专门显示查询结果集,为了偷懒,本例先省了。
●★● 后期通过ini待优化的,查询条件的回显。当前查询结果的二次查询。
1.弹出界面(子窗体)的设计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
; 先得到当前选中的标签 $strLvName = _GUICtrlTab_GetItemText ( $tabInMainWindow, _GUICtrlTab_GetCurSel ( $tabInMainWindow )) ; 创建子窗体 $popupWindow = GUICreate("威格灵" , 500, 175, Default, Default, $WS_CAPTION, BitOR($WS_EX_TOPMOST, $GUI_WS_EX_PARENTDRAG)) WinSetTitle($popupWindow, "", "在《" & $strLvName & "》中查询数据" ) ; 获取当前激活的LV Switch $strLvName ; 根据LV,创建不同的界面 Case "工作日志" $strArgsOfLVArr[0] = $lvInTabJournal ; 保存当前要查询的LV,查询后更新 $strArgsOfTableArr[0] = $tb_journal ; 保存要查询的对应数据表 $ipt = GUICtrlCreateInput ( "", 52, 40, 180, 20) ; 控件对应表字段的列 ;------------------- 控件略 Case "公司产品" ;------------------- 略 Case "学校信息" ;------------------- 略 EndSwitch $btnOKInPopWin = GUICtrlCreateButton("确定", 10, 145, 60, 22) GUICtrlSetOnEvent($btnOKInPopWin, "FuncFindDataByArgs") ; 确定要查询 $btnNOInPopWin = GUICtrlCreateButton("取消", 428, 145, 60, 22) GUICtrlSetOnEvent($btnNOInPopWin, "FuncFindDataByArgs") ; 放弃查询 GUISetState(@SW_SHOW, $popupWindow) GUISetState(@SW_DISABLE, $guiMainWindow) |
2.查询条件拼接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
Local $isSqlStrEnable = False ; 查询语句是否可用。如果全部参数都未填写是空的,不会设为true $strArgsOfQuery = "SELECT * FROM " & $strArgsOfTableArr[0] & " WHERE " ; 查询条件初始化 ; 遍历控件数组,拼接语句 For $iiii = 1 To 6 Step 1 ; 0索引保存的是lV或Access名称。剩余1-6保存控件 Local $strWidget = GUICtrlRead($strArgsOfLVArr[$iiii]) ; 读取每一个参数控件 If $strWidget <> "" And StringIsSpace($strWidget) <> 1 Then ; 如果不为空,且填写的不全是空格 ; 读控件内的文本,去除首、尾空格、连续多个空格合为1个 Local $keywords = StringStripWS($strWidget, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES ) ; 根据关键词文本之间的空格进行拆组 Local $keywordArr = StringSplit ($keywords, " ") ; 只要有词语,至少能有一个元素[1] If $keywordArr[0] > 0 Then ; $keywordArr[0]保存有效元素数量 ; 如果有多个词,拼接 For $j = 1 To $keywordArr[0] ; 列 like %值% $strArgsOfQuery &= $strArgsOfTableArr[$iiii] & " LIKE '%" & $keywordArr[$j] & "%' AND " Next EndIf $isSqlStrEnable = True ; 至少有一个有效参数,才可用 EndIf Next $strArgsOfQuery &= "1 = 1" ; 拼接sql语句常用结尾。否则删除最后一个 AND比较麻烦 ; 如果查询语句可用 If $isSqlStrEnable Then ; 执行数据库查询 Local $adoCon = ObjCreate("ADODB.Connection") $adoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $db_path & "; Jet OLEDB:Database Password='" & $db_pswd & "'") Local $adoRec = ObjCreate("ADODB.Recordset") $adoRec.ActiveConnection = $adoCon $adoRec.Open($strArgsOfQuery) ; 从表中查到的结果集 Local $fieldsCount = $adoRec.fields.count ; 执行上一步后,得到表的字段数量 If $strArgsOfTableArr[0] = $tb_journal Then $fieldsCount = $fieldsCount - 2 EndIf ; 清空列表 _GUICtrlListView_DeleteAllItems ($strArgsOfLVArr[0]) _GUICtrlListView_BeginUpdate($strArgsOfLVArr[0]) While Not $adoRec.Eof And Not $adoRec.Bof ; 遍历结果集每一行 If @error = 1 Then ExitLoop Else ; 这里最好是创建一个新的标签、LV来展示查询结果 Local $strResultDataForLv = "" For $i = 0 To $fieldsCount - 1 Step 1 ; 查询结果列拼接 $strResultDataForLv &= $adoRec.fields($i).value & "|" Next ; 原生插入。奇偶着色 GUICtrlCreateListViewItem($strResultDataForLv, $strArgsOfLVArr[0]) GUICtrlSetBkColor (-1, 0xffa500 );设置listviewitem的背景色 $adoRec.Movenext ; 结果集的下一行 EndIf WEnd _GUICtrlListView_EndUpdate($strArgsOfLVArr[0]) _GUICtrlListView_Scroll($strArgsOfLVArr[0], 0, _GUICtrlListView_GetItemCount($strArgsOfLVArr[0])*10) $adoRec.Close $adoCon.Close EndIf GUIDelete ( $popupWindow ) ; 关闭子窗体 GUISetState(@SW_ENABLE, $guiMainWindow) ; 激活父窗体 GUISetState(@SW_RESTORE, $guiMainWindow); 显示父窗体 |
看罢似乎也没什么,还专门作为独立一篇讲解...
源码:
https://github.com/731942771/AutoitWorkingRecorder
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/986.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设