一个用来快速查找mdb数据库中数据的查询工具
本帖最后由 tubaba 于 2018-3-9 15:53 编辑源码已公布
一个用来快速查找mdb数据库中数据的查询工具.灵感来自于手机通讯录中利用汉字首拼快速定位联系人的原理.可以把它当作是电脑上的智能通讯录.
下面只是一个例子,因通讯录涉及隐私,因此就拿了另一个邮编数据库来举例,但是使用原理是一样的.
使用方法在程序中已有说明.上图,
举例,当输入ffkc或者峰峰矿区都可以快速定位到数据库这一条记录.如果是通讯录中的联系人,比如王二麻,可以直接输入wem或者王二,都可以定位
在参数设置中,需要利用汉字首拼查询功能的字段请在step4中勾选
本帖最后由 zhaoyun 于 2015-11-4 07:22 编辑
楼主发下源码学习下。。。。。。。。。。。。。。。。。。。。。 谢谢,这个东西好。 没有源代码呜呜 没有源代码,可惜了。 謝謝樓主分享。 发布这个,如果没有源码,就没有任何的意义。
这类的数据库开发,很多的语言都可以轻松的做到,在这些语言里都是小儿科的东西。
这到里就是希望学习AUTOIT源码的。
不给源码,楼主的这个东西没有任何价值。我至少可以用其他三种语言,10分钟内做出来的。 我来给出部分吧,简拼搜索 核心代码 建立简拼库函数
Func _PY($PY_IN = "")
Dim $PY_OUT
If $PY_IN = "" Then
$PY_OUT = $PY_IN
Else
For $i = 1 To StringLen($PY_IN)
Switch Dec(StringTrimLeft(StringToBinary(StringMid($PY_IN, $i, 1)), 2))
Case 32 To 127
$PY_OUT &= StringMid($PY_IN, $i, 1)
Case 33095 To 62289
$PY_OUT &= Chr(97 + _PY_C(StringMid($PY_IN, $i, 1), 0, 26))
EndSwitch
Next
EndIf
Return StringLower($PY_OUT)
EndFunc ;==>_PY
Func _PY_C($PY_s, $PY_f, $PY_e) ;改进的中值法
Local $PY_mid = Int(($PY_e - $PY_f) / 2) + $PY_f
If $PY_mid = $PY_f Then Return $PY_f
If StringCompare($PY_s, $PY_key[$PY_mid]) = 0 Then
Return $PY_mid
ElseIf StringCompare($PY_s, $PY_key[$PY_mid]) > 0 Then
Return _PY_C($PY_s, $PY_mid, $PY_e)
ElseIf StringCompare($PY_s, $PY_key[$PY_mid]) < 0 Then
Return _PY_C($PY_s, $PY_f, $PY_mid)
EndIf
EndFunc ;==>_PY_C
搜索部分:
Func _SOKEY()
If $SOKEY < 1 Then
AdlibUnRegister("_SOKEY")
If StringLen($SoItemName) > 0 Then
If StringLen($SoItemName) > 0 Then
If Not $HGUI_QUICK_ListView_SO_OFF Then
GUICtrlSetState($HGUI_QUICK_ListView_SO, $GUI_SHOW)
GUICtrlSetState($HGUI_QUICK_ListView, $GUI_HIDE)
$HGUI_QUICK_ListView_SO_OFF = True
EndIf
_SoItemName($SoItemName)
EndIf
Else
If $HGUI_QUICK_ListView_SO_OFF Then
GUICtrlSetState($HGUI_QUICK_ListView, $GUI_SHOW)
GUICtrlSetState($HGUI_QUICK_ListView_SO, $GUI_HIDE)
$HGUI_QUICK_ListView_SO_OFF = False
EndIf
EndIf
EndIf
$SOKEY -= 1
EndFunc ;==>_SOKEY
Func _SoItemName($soname_str = "")
If $soname_str <> "" Then
$soname_str = StringLower($soname_str)
Dim $soname_len = StringLen($soname_str)
Dim $SO_ERROR = False
Dim $soname_str_check = $soname_str
Dim $IsDigit = False
$soname_str_check = StringLower($soname_str_check)
Dim $soname_str_type = _checkzw($soname_str_check)
If $soname_str_type Then
If $soname_len > 0 Then $SO_ERROR = True
Else
If $soname_len > 1 Then $SO_ERROR = True
EndIf
If $soname_len > 3 And StringIsDigit($soname_str) Then
$IsDigit = True
$SO_ERROR = True
EndIf
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($HGUI_QUICK_ListView_SO))
If $SO_ERROR Then
GUISetState(@SW_LOCK, $HGUI_QUICK)
ReDim $SO_QUICK_DB
Dim $iUBound = 0
$SO_QUICK_DB[$iUBound] = ""
$SO_QUICK_DB[$iUBound] = ""
$SO_QUICK_DB[$iUBound] = ""
$SO_QUICK_DB[$iUBound] = ""
$SO_QUICK_DB[$iUBound] = ""
$SO_QUICK_DB[$iUBound] = ""
If IsArray($ITEM_DB) Then
If UBound($ITEM_DB) > 1 Then
Dim $Q1 = -1, $Q2 = -1, $Q3 = -1, $Q4 = -1, $Q5 = 0
For $i = 0 To UBound($ITEM_DB) - 1
$Q1 = StringRegExp($ITEM_DB[$i], $soname_str)
$Q2 = StringRegExp(StringLower($ITEM_DB[$i]), $soname_str)
$Q3 = StringRegExp(StringLower($ITEM_DB[$i]), $soname_str)
$Q4 = StringRegExp($ITEM_DB[$i], $soname_str)
If $Q1 = 1 Or $Q2 = 1 Or $Q3 = 1 Or $Q4 = 1 Then
$Q5 += 1
If $Q4 > 29 Then ExitLoop
If $SO_QUICK_DB = "" Then
Dim $iUBound = 0
ReDim $SO_QUICK_DB[$iUBound + 1]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = 0
Else
Dim $iUBound = UBound($SO_QUICK_DB)
ReDim $SO_QUICK_DB[$iUBound + 1]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = $ITEM_DB[$i]
$SO_QUICK_DB[$iUBound] = 0
EndIf
EndIf
Next
If UBound($SO_QUICK_DB) = 1 And Not StringIsDigit($soname_str) Then
_ADDGUI_POS($SO_QUICK_DB)
Echo("查询条形码:" & $SO_QUICK_DB)
EndIf
EndIf
EndIf
If IsArray($SO_QUICK_DB) Then
_ArraySort($SO_QUICK_DB, 1, 0, 0, 1)
_GUICtrlListView_AddArray($HGUI_QUICK_ListView_SO, $SO_QUICK_DB)
EndIf
GUISetState(@SW_UNLOCK, $HGUI_QUICK)
EndIf
EndIf
EndFunc ;==>_SoItemName
Func _checkzw($str = "")
If $str <> "" Then
Dim $str1 = StringSplit($str, "")
If IsArray($str1) Then
For $i = 1 To UBound($str1) - 1
If StringIsASCII($str1[$i]) = 0 Then
Return True
EndIf
Next
EndIf
EndIf
Return False
EndFunc ;==>_checkzw
回复 10# tvzml
对,核心思想就是读取表结构,根据用户选择,建立一个复制的表,并插入新的首拼字段.使用sql查询语句得到结果,我不希望把源代码共享.因为这会让人养成不动脑子拿来就用的习惯.也不见得能让人提高多少的水平.如果有疑问,我可以解答,甚至可以给出部分实现功能的源码 不开源,人家怎么学习!!!太自私了!!! 來學習一下~!! 回复 10# tvzml
谢谢,这个东西好。 回复 12# zzwwdd
忍不住 要 吐槽一下
誰規定一定要開源給你學習的....
求學 應該要抱持感恩的心....願意開源的我們感謝
不願意開源的一樣 我們學習觀念 邏輯與 特點....
就是 你這樣的心態難怪 樓主 不想開源....
页:
[1]
2