回 帖 发 新 帖 刷新版面

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

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

11 楼

应该说,你的编程水准非同凡响。如用2楼兄台的语句可否达到目的呢???

12 楼

[quote]应该说,你的编程水准非同凡响。如用2楼兄台的语句可否达到目的呢???[/quote]

不敢.
只是像你现在这样去错,多少好像有点走弯路了.
帮2楼的补充一些,像以下的都可以查询出包含点焊机的记录:
SELECT * FROM gljcx WHERE gljmc like '%点焊机%'
SELECT * FROM gljcx WHERE '点焊机'$gljmc

13 楼

不错,通过这种方法先“查询”,再通过代号来定位(或是补充记录,或是转换整个记录数据),也同样能达到本人的要求。语句上确实简单,只是对使用者来说,操作上略显麻烦!谢谢。

14 楼

山人非科班出身,编程只是出于工作上的需要以及对编程的钟爱,所以走弯路的确在所难免,多谢二位赐教。看得出本人对VFP的许多指令尚非常陌生,以后还望诸位多多指教,在此先行谢过!

15 楼

原代码已被简化,再次谢过两位的指点!

我来回复

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