找回密码  加入

QQ登录

只需一步,快速开始

AUTOIT CN

搜索
查看: 3566|回复: 25

[原创] 一个用来快速查找mdb数据库中数据的查询工具

[复制链接]
发表于 2015-11-3 16:52:01 | 显示全部楼层 |阅读模式
本帖最后由 tubaba 于 2018-3-9 15:53 编辑

源码已公布

一个用来快速查找mdb数据库中数据的查询工具.灵感来自于手机通讯录中利用汉字首拼快速定位联系人的原理.可以把它当作是电脑上的智能通讯录.
下面只是一个例子,因通讯录涉及隐私,因此就拿了另一个邮编数据库来举例,但是使用原理是一样的.
使用方法在程序中已有说明.上图,

举例,当输入ffkc或者峰峰矿区都可以快速定位到数据库这一条记录.如果是通讯录中的联系人,比如王二麻,可以直接输入wem或者王二,都可以定位

在参数设置中,需要利用汉字首拼查询功能的字段请在step4中勾选







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x

评分

1

查看全部评分

发表于 2015-11-4 07:13:13 | 显示全部楼层
本帖最后由 zhaoyun 于 2015-11-4 07:22 编辑

楼主发下源码学习下。。。。。。。。。。。。。。。。。。。。。
发表于 2015-11-4 10:19:21 | 显示全部楼层
谢谢,这个东西好。
发表于 2015-11-4 10:22:43 | 显示全部楼层
没有源代码  呜呜
发表于 2015-11-6 10:56:23 | 显示全部楼层
没有源代码,可惜了。
发表于 2015-11-6 19:40:26 | 显示全部楼层
謝謝樓主分享。
发表于 2015-11-6 20:56:59 | 显示全部楼层
发布这个,如果没有源码,就没有任何的意义。
这类的数据库开发,很多的语言都可以轻松的做到,在这些语言里都是小儿科的东西。
这到里就是希望学习AUTOIT源码的。
不给源码,楼主的这个东西没有任何价值。我至少可以用其他三种语言,10分钟内做出来的。
发表于 2015-11-8 20:47:26 | 显示全部楼层
我来给出部分吧,简拼搜索 核心代码
发表于 2015-11-8 20:57:47 | 显示全部楼层
建立简拼库函数


  1. Func _PY($PY_IN = "")
  2.         Dim $PY_OUT
  3.         If $PY_IN = "" Then
  4.                 $PY_OUT = $PY_IN
  5.         Else
  6.                 For $i = 1 To StringLen($PY_IN)
  7.                         Switch Dec(StringTrimLeft(StringToBinary(StringMid($PY_IN, $i, 1)), 2))
  8.                                 Case 32 To 127
  9.                                         $PY_OUT &= StringMid($PY_IN, $i, 1)
  10.                                 Case 33095 To 62289
  11.                                         $PY_OUT &= Chr(97 + _PY_C(StringMid($PY_IN, $i, 1), 0, 26))
  12.                         EndSwitch
  13.                 Next
  14.         EndIf
  15.         Return StringLower($PY_OUT)
  16. EndFunc   ;==>_PY

  17. Func _PY_C($PY_s, $PY_f, $PY_e) ;改进的中值法
  18.         Local $PY_mid = Int(($PY_e - $PY_f) / 2) + $PY_f
  19.         If $PY_mid = $PY_f Then Return $PY_f
  20.         If StringCompare($PY_s, $PY_key[$PY_mid]) = 0 Then
  21.                 Return $PY_mid
  22.         ElseIf StringCompare($PY_s, $PY_key[$PY_mid]) > 0 Then
  23.                 Return _PY_C($PY_s, $PY_mid, $PY_e)
  24.         ElseIf StringCompare($PY_s, $PY_key[$PY_mid]) < 0 Then
  25.                 Return _PY_C($PY_s, $PY_f, $PY_mid)
  26.         EndIf
  27. EndFunc   ;==>_PY_C
复制代码
发表于 2015-11-8 20:59:43 | 显示全部楼层
搜索部分:


  1. Func _SOKEY()
  2.         If $SOKEY < 1 Then
  3.                 AdlibUnRegister("_SOKEY")
  4.                 If StringLen($SoItemName) > 0 Then
  5.                         If StringLen($SoItemName) > 0 Then
  6.                                 If Not $HGUI_QUICK_ListView_SO_OFF Then
  7.                                         GUICtrlSetState($HGUI_QUICK_ListView_SO, $GUI_SHOW)
  8.                                         GUICtrlSetState($HGUI_QUICK_ListView, $GUI_HIDE)
  9.                                         $HGUI_QUICK_ListView_SO_OFF = True
  10.                                 EndIf
  11.                                 _SoItemName($SoItemName)
  12.                         EndIf
  13.                 Else
  14.                         If $HGUI_QUICK_ListView_SO_OFF Then
  15.                                 GUICtrlSetState($HGUI_QUICK_ListView, $GUI_SHOW)
  16.                                 GUICtrlSetState($HGUI_QUICK_ListView_SO, $GUI_HIDE)
  17.                                 $HGUI_QUICK_ListView_SO_OFF = False
  18.                         EndIf
  19.                 EndIf
  20.         EndIf
  21.         $SOKEY -= 1
  22. EndFunc   ;==>_SOKEY

  23. Func _SoItemName($soname_str = "")
  24.         If $soname_str <> "" Then
  25.                 $soname_str = StringLower($soname_str)
  26.                 Dim $soname_len = StringLen($soname_str)
  27.                 Dim $SO_ERROR = False
  28.                 Dim $soname_str_check = $soname_str
  29.                 Dim $IsDigit = False
  30.                 $soname_str_check = StringLower($soname_str_check)
  31.                 Dim $soname_str_type = _checkzw($soname_str_check)
  32.                 If $soname_str_type Then
  33.                         If $soname_len > 0 Then $SO_ERROR = True
  34.                 Else
  35.                         If $soname_len > 1 Then $SO_ERROR = True
  36.                 EndIf
  37.                 If $soname_len > 3 And StringIsDigit($soname_str) Then
  38.                         $IsDigit = True
  39.                         $SO_ERROR = True
  40.                 EndIf
  41.                 _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($HGUI_QUICK_ListView_SO))
  42.                 If $SO_ERROR Then
  43.                         GUISetState(@SW_LOCK, $HGUI_QUICK)
  44.                         ReDim $SO_QUICK_DB[1][6]
  45.                         Dim $iUBound = 0
  46.                         $SO_QUICK_DB[$iUBound][0] = ""
  47.                         $SO_QUICK_DB[$iUBound][1] = ""
  48.                         $SO_QUICK_DB[$iUBound][2] = ""
  49.                         $SO_QUICK_DB[$iUBound][3] = ""
  50.                         $SO_QUICK_DB[$iUBound][4] = ""
  51.                         $SO_QUICK_DB[$iUBound][5] = ""
  52.                         If IsArray($ITEM_DB) Then
  53.                                 If UBound($ITEM_DB) > 1 Then
  54.                                         Dim $Q1 = -1, $Q2 = -1, $Q3 = -1, $Q4 = -1, $Q5 = 0
  55.                                         For $i = 0 To UBound($ITEM_DB) - 1
  56.                                                 $Q1 = StringRegExp($ITEM_DB[$i][2], $soname_str)
  57.                                                 $Q2 = StringRegExp(StringLower($ITEM_DB[$i][8]), $soname_str)
  58.                                                 $Q3 = StringRegExp(StringLower($ITEM_DB[$i][0]), $soname_str)
  59.                                                 $Q4 = StringRegExp($ITEM_DB[$i][1], $soname_str)
  60.                                                 If $Q1 = 1 Or $Q2 = 1 Or $Q3 = 1 Or $Q4 = 1 Then
  61.                                                         $Q5 += 1
  62.                                                         If $Q4 > 29 Then ExitLoop
  63.                                                         If $SO_QUICK_DB[0][0] = "" Then
  64.                                                                 Dim $iUBound = 0
  65.                                                                 ReDim $SO_QUICK_DB[$iUBound + 1][6]
  66.                                                                 $SO_QUICK_DB[$iUBound][0] = $ITEM_DB[$i][0]
  67.                                                                 $SO_QUICK_DB[$iUBound][1] = $ITEM_DB[$i][1]
  68.                                                                 $SO_QUICK_DB[$iUBound][2] = $ITEM_DB[$i][2]
  69.                                                                 $SO_QUICK_DB[$iUBound][3] = $ITEM_DB[$i][4]
  70.                                                                 $SO_QUICK_DB[$iUBound][4] = $ITEM_DB[$i][7]
  71.                                                                 $SO_QUICK_DB[$iUBound][5] = 0
  72.                                                         Else
  73.                                                                 Dim $iUBound = UBound($SO_QUICK_DB)
  74.                                                                 ReDim $SO_QUICK_DB[$iUBound + 1][6]
  75.                                                                 $SO_QUICK_DB[$iUBound][0] = $ITEM_DB[$i][0]
  76.                                                                 $SO_QUICK_DB[$iUBound][1] = $ITEM_DB[$i][1]
  77.                                                                 $SO_QUICK_DB[$iUBound][2] = $ITEM_DB[$i][2]
  78.                                                                 $SO_QUICK_DB[$iUBound][3] = $ITEM_DB[$i][4]
  79.                                                                 $SO_QUICK_DB[$iUBound][4] = $ITEM_DB[$i][7]
  80.                                                                 $SO_QUICK_DB[$iUBound][5] = 0
  81.                                                         EndIf
  82.                                                 EndIf
  83.                                         Next
  84.                                         If UBound($SO_QUICK_DB) = 1 And Not StringIsDigit($soname_str) Then
  85.                                                 _ADDGUI_POS($SO_QUICK_DB[0][0])
  86.                                                 Echo("查询条形码:" & $SO_QUICK_DB[0][0])
  87.                                         EndIf
  88.                                 EndIf
  89.                         EndIf
  90.                         If IsArray($SO_QUICK_DB) Then
  91.                                 _ArraySort($SO_QUICK_DB, 1, 0, 0, 1)
  92.                                 _GUICtrlListView_AddArray($HGUI_QUICK_ListView_SO, $SO_QUICK_DB)
  93.                         EndIf
  94.                         GUISetState(@SW_UNLOCK, $HGUI_QUICK)
  95.                 EndIf
  96.         EndIf
  97. EndFunc   ;==>_SoItemName

  98. Func _checkzw($str = "")
  99.         If $str <> "" Then
  100.                 Dim $str1 = StringSplit($str, "")
  101.                 If IsArray($str1) Then
  102.                         For $i = 1 To UBound($str1) - 1
  103.                                 If StringIsASCII($str1[$i]) = 0 Then
  104.                                         Return True
  105.                                 EndIf
  106.                         Next
  107.                 EndIf
  108.         EndIf
  109.         Return False
  110. EndFunc   ;==>_checkzw

复制代码
 楼主| 发表于 2015-11-16 10:35:48 | 显示全部楼层
回复 10# tvzml


    对,核心思想就是读取表结构,根据用户选择,建立一个复制的表,并插入新的首拼字段.使用sql查询语句得到结果,我不希望把源代码共享.因为这会让人养成不动脑子拿来就用的习惯.也不见得能让人提高多少的水平.如果有疑问,我可以解答,甚至可以给出部分实现功能的源码
发表于 2015-11-24 09:45:28 | 显示全部楼层
不开源,人家怎么学习!!!太自私了!!!
发表于 2016-12-12 15:47:28 | 显示全部楼层
來學習一下~!!
发表于 2016-12-12 23:05:15 | 显示全部楼层
回复 10# tvzml


    谢谢,这个东西好。
发表于 2016-12-13 10:10:58 | 显示全部楼层
回复 12# zzwwdd

忍不住 要 吐槽一下

誰規定  一定要開源給你學習的....

求學 應該要抱持感恩的心....願意開源的  我們感謝   

不願意開源的  一樣 我們學習觀念 邏輯  與 特點....

就是 你這樣的心態  難怪 樓主 不想開源....
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-12-9 23:38 , Processed in 0.078124 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表