回 帖 发 新 帖 刷新版面

主题:一个有挑战性的问题?

有一个表,表中有一特征字段(备注型),建立一表单,在表单上放文本框和命令按钮,怎样实现在文本框中输入检索关键字,查找符合条件的备注型字段中的内容.要求是:比如输入:为人随和 性格开朗 好(也就是在文本框中输入几个关键字,它们中间有空格)

回复列表 (共10个回复)

沙发

**表单中设置文本框Text1,编辑框Eid1,命令按钮一个.
**下列代码在命令按钮的Click事件中
**表名rcda.dbf,其中备注字段名gzjl,设置在表单的数据环境中

ctext=ALLTRIM(ThisForm.Text1.Value)+SPACE(2)
nlenCtext=LEN(ctext)
IF nlenCtext=0
    =MESSAGEBOX("请输入关键字......",48,"友情提醒")
    ThisForm.Text1.SetFocus 
ENDIF 
nword=0
n=1
nstart=1
nend=0
**统计文本框输入的单词个数并把单词存放在相应的变量中
**文本框中单词之间空格隔开
DO WHILE n<nlenCtext
    cCh=SUBSTR(ctext,n,1)
    nend=nend+1
    IF ASC(SUBSTR(ctext,nend-1,1))!=32.and.asc(SUBSTR(ctext,nend,1))=32
        nword=nword+1
        cWordName=ALLTRIM("cword"+ALLTRIM(STR(nword)))
        &cWordName=ALLTRIM(SUBSTR(ctext,nstart,nend-nstart))
        nstart=nend
    ENDIF 
    n=n+1
ENDDO
SELECT rcda
GO TOP 
DO WHILE .not.eof()
cTextMemo=gzjl  &&取出备注字段存放在变量中
cExp=""
FOR i=1 TO nword
    nn="nat"+ALLTRIM(STR(i))
    cWordName=ALLTRIM("cword"+ALLTRIM(STR(i)))
    &nn=AT(&cWordName,cTextMemo)
    cExp=cExp+"&nn>0"+".and."
ENDFOR 
nlencExp=LEN(cExp)
cExp=LEFT(cExp,nLencExp-5)
IF &cExp
    ThisForm.Edit1.Value=cTextMemo  &&编辑框显示符合条件的内容
    wait
ENDIF 
SKIP 
ENDDO 

    

板凳

高手啊!你上面写的这段程序,有几处不明白:1.wait命令是按任意键继续查看,但是不到一会屏幕上就有好几个"按任意键继续"重叠在了一起,很不美观,可不可以通过上一页,下一页,首页来控制查询结果.2.查到的结果怎么与该表的其它字段绑定在一起也跟着备注型字段动态显示(为了完整地显示一个商品的信息).不胜感激!!!

3 楼


1.wait是为了停顿看清Edit1中显示的内容,实际应用时要修改
2.在SKIP之前把其他字段的内容转换成字符型数据后和前面的字符串连接起来就可以了

4 楼

很感谢我已经解决了.1.把wait后加windows "请按任意键!"2.在wait前加thisform.text1.value=表.字段

5 楼

1楼的老师,时间过了很久,您当时的办法很好,帮我解决了大问题,现在根据要求,我必须把这个程序改改,上面的那段代码是把查询的结果隐藏在了表单后面,用任意键来翻看,现在我想把若干个查询结果一起显示在表格控件里,不知道怎么实现,我已经试验了很多次都不行,而且上面的那段的代码我有的地方还是不懂,请赐教,谢谢

6 楼

djGong2002老师已经好久没来本网了,真是有些想呢。

7 楼

啊, 那可惨了,我的问题解决不了了

8 楼

楼主,你真的惨了

9 楼

年底了,到这里看看.有人惦记着是很高兴的事.当然对8月份的帖子现在才回复是一个很有歉意的动作.

接着上一次的回复.设rcda.dbf中有字段xm c(10)[姓名],xb c(2)[性别],csrq d[出生日期],gzjl M[工作经历],为了能是符合要求的记录显示在表格控件中,再创建一个表rcdawy.dbf,除了工作经历gzjl 设为字符型外(长度254,为了立即显示在表格中),其余同rcda.
有了这些准备工作后,在表单中加表格控件Grid1.
在原来代码中修改:
把分支结构中IF &cExp...ENDIF中的ThisForm.Edit1.Value=cTextMemo和wait去掉.改成如下代码:
IF &cExp
  cxm=xm
  cxb=xb
  dcsrq=csrq
  cjl=cTextMemo
  INSERT INTO RCDAWY(XM,XB,CSRQ,GZJL)VALUES(CXM,CXB,CSRQ,CtEXTmEMO)
  SELECT RCDAWY
  GO TOP 
  ThisForm.Grid1.ColumnCount=-1
  ThisForm.Grid1.RecordSourceType=1
  ThisForm.Grid1.RecordSource="rcdawy"
ENDIF 
其余代码同上次回复.

另外,为了再次查询时RCDAWY为空表,因此在FORM1.DESTROY中把其中记录删除为好:
USE IN RCDAWY
USE RCDAWY IN 0 EXCLUSIVE
ZAP
CLOSE TABLES ALL


预祝各位网友新年快乐.

10 楼

顶一下!LZ还没有来呢

我来回复

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