主题:[原创]完整查询并精确定位实例
妙计山人
[专家分:130] 发布于 2009-08-22 20:56:00
查询在有些数据系统中,无法用VF提供的简单指令或函数来完成,为此应编写自己的执行代码。比如在字符ABCDEF中,要查找“123”的字样,由于“123”可能在最前面,也可能在最后面,或是在中间的某个位置。现提供一个类似这样的实例,供诸位参考。
如图示,代码的编写过程如下(修复后的代码):
Local _Aa
_Aa=Alltri(Upper(thisform.Yspagefrm1.page5.ystxtbx1.value))
If Chaxun=1
Sele gljcx
Repl chx with "" for recno()>0
SELECT * FROM gljcx WHERE _Aa$gljmc INTO TABLE Lscx
Sele Lscx
Go TOP
ELSE
Sele Lscx
If Not Eof()
Go Chaxun
Endif
ENDIF
DO WHILE .T.
IF EOF()
Thisform.Yspagefrm1.page5.Yscmdbtn1.Caption="查询完毕"
EXIT
Else
Thisform.Yspagefrm1.page5.Yscmdbtn1.Caption="继续查询"
ENDIF
SELE GLJCX
LOCATE FOR Alltri(GLJMC)==ALLTRI(Lscx.gljmc)
IF FOUND()
Repl chx with "OK"
Sele Lscx
SKIP
Chaxun=recno()
EXIT
Else
SELE Lscx
SKIP
Chaxun=recno()
LOOP
Endif
ENDDO
Thisform.Yspagefrm1.page5.Grid1.Refresh
最后更新于:2009-08-25 11:41:00
回复列表 (共15个回复)
沙发
妙计山人 [专家分:130] 发布于 2009-08-22 21:10:00
注:“继续查询”按钮初始值为“按名称查询”。
板凳
sywzs [专家分:5650] 发布于 2009-08-23 05:47:00
用这么多代码来完成一个简单的查询,是不是有些太麻烦?
直接用 "123"$ABCDEF 不就解决了吗?
3 楼
妙计山人 [专家分:130] 发布于 2009-08-23 18:37:00
多谢回帖。
看来是山人前述表示不够清楚。兄台的语句当属精准查询,很难在实例中达到目的。事实上,Fox自己的帮助系统在查找时也只是仅限于单词的头几个字母。
4 楼
妙计山人 [专家分:130] 发布于 2009-08-23 19:05:00
补充几点,在图示情况下,或许我要找的是“多头交流点焊机”(所以只查“点焊机”,这是一种模糊查询法,可能是因为要查询的内容记不太清楚了),现实中,要查的这条记录并不一定就同前三条记录放在一块。
5 楼
Vii [专家分:1130] 发布于 2009-08-23 19:26:00
顶2楼.
如果没有读错的话,楼主的程序这样的"点焊机"好像就找不到了.
"我是一台名称比较长的点焊机"。
6 楼
妙计山人 [专家分:130] 发布于 2009-08-23 19:43:00
No!实例程序中的“OK”恰恰是系统查询得出的。
7 楼
妙计山人 [专家分:130] 发布于 2009-08-23 19:45:00
[quote]顶2楼.
"我是一台名称比较长的点焊机"。[/quote]
这正是山人的用意之所在!
8 楼
Vii [专家分:1130] 发布于 2009-08-23 20:04:00
"长的点焊机" 不等于 "点焊机" 就查不到了.
9 楼
妙计山人 [专家分:130] 发布于 2009-08-23 20:29:00
抱歉,同你没法沟通下去!!!
10 楼
Vii [专家分:1130] 发布于 2009-08-23 20:51:00
chx dh gljmc
10664 缝焊机<150
10665 短臂交流点焊机<50
10666 长臂交流点焊机<75
10667 长臂交流点焊机<100
10668 多头交流点焊机<6*35
10670 电动破碎机250*250
10671 电动破碎机400*250
10672 电动破碎机500*250
10673 我是一台名称比较长的点焊机
建了个表.
用楼主的程序试了下,找对最后,长一点名称的"点焊机"还是没显示ok.
恩 如果IF加到20是可以找到的. [em1]
我来回复