当前位置: 代码迷 >> VFP >> !vfp组合框模糊查询怎么实现
  详细解决方案

!vfp组合框模糊查询怎么实现

热度:5996   发布时间:2013-02-26 00:00:00.0
求助!vfp组合框模糊查询如何实现?
求助!vfp组合框模糊查询如何实现?

我想用vfoxpro作一个录入查询系统,需要在组合框内实现输入字段为【客户】的拼音码或代码或电报码就可以立即弹出下拉

列表出现查找到对应的汉字名,如有多项符合条件的,在符合条件的项前添加数字序号,同时实现按数字键选择填充,不知如

何实现,请高手指点,谢谢!

只知道需要有字典文件,我已经准备好了,表文件为khxx.dbf,字段为:客户名,拼音码,数字代码,电报码。

------解决方案--------------------------------------------------------
具体是这样的:比如在 text1 中输入“豌豆种植”,而希望通过“豆”,“种植”这几个关键字查找到自由表中的“豆类种植”,在 text2 中显示出来;如果找到的结果不只一个的话,比如查找“水泥”,而表中有“水泥生产”和“水泥销售”两个,通过按钮“下一个”刷新text2。
 
请教如何实现呢?
---------------------------------------------------------------
*****假如你在1区打开的表(以下方法只适合汉字查询)
 
*****text1的Valid事件:
SELECT 1
Ctxt1=ALLTRIM(thisform.text1.value)
P=LEN(ALLTRIM(thisform.text1.value))
for I=1 to P step 2 &&step 2表示查询关键字全部为汉字,如果全部为英文改为step 1或去掉此项
Ctxt2=substr(Ctxt1,I,I+1)
DELETE ALL FOR Ctxt2$字段名1 &&此字段是你表中要查询的字段名。
endfor
select 2
use
select 1
copy to temp for DELETED()
RECALL all
SELECT 2
USE temp
RECALL all
IF RECCOUNT()>0
thisform.command2.enabled=.t. &&command为“下一个”按钮
thisform.command3.enabled=.t. &&command为“上一个”按钮
GO TOP
thisform.text2.value=字段名1
ELSE
thisform.command2.enabled=.f.
thisform.command3.enabled=.f.
thisform.text2.Value=""
ENDIF
thisform.Refresh
 
*********"下一个"按钮的Click事件:
SELECT 2
IF NOT EOF()
SKIP
thisform.text2.value=字段名1
ELSE
GO BOTTOM
thisform.text2.value=字段名1
ENDIF
thisform.Refresh
 
*********"上一个"按钮的Click事件:
SELECT 2
IF NOT BOF()
SKIP -1
thisform.text2.value=字段名1
ELSE
GO TOP
thisform.text2.value=字段名1
ENDIF
thisform.Refresh

------解决方案--------------------------------------------------------
这是一个测试代码,我把它写成了一个类

DEFINE CLASS test AS container
Width = 100
Height = 94
Name = "Container2"

ADD OBJECT text1 AS textbox WITH ;
Height = 20, ;
Left = 0, ;
Top = 0, ;
Width = 100, ;
Name = "Text1"

ADD OBJECT list1 AS listbox WITH ;
BoundColumn = 1, ;
ColumnCount = 1, ;
ColumnWidths = "300", ;
RowSourceType = 6, ;
RowSource = "khxx.客户名", ;
ControlSource = "", ;
Height = 70, ;
Left = 0, ;
Top = 24, ;
Visible = .F., ;
Width = 100, ;
Name = "List1"


PROCEDURE text1.InteractiveChange
cFilter = ALLTRIM(This.Value)

SELECT jtcyqk
IF ! EMPTY(cFilter) THEN
DO CASE
CASE ASC(cFilter) > 255
SET FILTER TO OCCURS(cFilter, khxx.客户名) > 0
CASE ISALPHA(cFilter)
SET FILTER TO OCCURS(UPPER(cFilter), khxx.拼音码) > 0
CASE ISDIGIT(cFilter)
SET FILTER TO OCCURS(UPPER(cFilter), khxx.电报码) > 0
ENDIF
ThisForm.List1.Requery
ELSE
SET FILTER TO
ThisForm.List1.Requery
ENDIF
ENDPROC


PROCEDURE text1.GotFocus
This.Parent.List1.Visible = .T.
ENDPROC


PROCEDURE list1.DblClick
双击列表项时的处理
ENDPROC


ENDDEFINE
  相关解决方案