回 帖 发 新 帖 刷新版面

主题:[原创]完整查询并精确定位实例

查询在有些数据系统中,无法用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

回复列表 (共15个回复)

沙发

注:“继续查询”按钮初始值为“按名称查询”。

板凳

用这么多代码来完成一个简单的查询,是不是有些太麻烦?
直接用 "123"$ABCDEF 不就解决了吗?

3 楼

多谢回帖。

看来是山人前述表示不够清楚。兄台的语句当属精准查询,很难在实例中达到目的。事实上,Fox自己的帮助系统在查找时也只是仅限于单词的头几个字母。

4 楼

补充几点,在图示情况下,或许我要找的是“多头交流点焊机”(所以只查“点焊机”,这是一种模糊查询法,可能是因为要查询的内容记不太清楚了),现实中,要查的这条记录并不一定就同前三条记录放在一块。

5 楼

顶2楼.

如果没有读错的话,楼主的程序这样的"点焊机"好像就找不到了.

"我是一台名称比较长的点焊机"。

6 楼

No!实例程序中的“OK”恰恰是系统查询得出的。

7 楼

[quote]顶2楼.

"我是一台名称比较长的点焊机"。[/quote]

这正是山人的用意之所在!

8 楼

"长的点焊机" 不等于 "点焊机" 就查不到了.

9 楼

抱歉,同你没法沟通下去!!!

10 楼

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]

我来回复

您尚未登录,请登录后再回复。点此登录或注册