TZTJ 发表于 2008-2-19 16:58

预览问题

我在表单中设置一个预览按钮,用了以下代码,一运行表单,命令结果总是先在表单上显示,再看到预览结果,使得表单乱七八糟,有几位高手叫我设置set talk off或用noconsole,但都不能解决,tiger你怎么不发表你的意见呢?你的学问,你的为人,真使小人敬佩。
set talk off
set order to tag
set safety off
sele 8
use sjtmp
sele 3
use tx
sele 4
use st
sele 5
use sjmc
sele 6
use sj
sele 7
use sjtx
if alltrim(thisform.combo1.value)==""
   =messagebox("请选择试卷",0+64,"提示")
else
        nxh=1
        sele 7
        locate for 试卷名称=alltrim(thisform.combo1.value)
        do while (.not.eof())
                ntx=题型编号
                i=1
                sele 3
                locate for 题型编号=ntx
                ctxmc=题型名称
                *memotm=""
                *memoda=""
                set textmerge on
                set textmerge delimiters to
                set textmerge to tm.txt
                store _text to gctmhandle &&保存tm.txt的句柄
                store -1 to _text &&关闭对tm.txt文件的输出,但保持tm.txt文件的打开
                set textmerge to da.txt &&创建并输出到da.txt
                store _text to gcdahandle &&保存da.txt的句柄
               
                sele 6
                locate for 试卷名称=alltrim(thisform.combo1.value) .and. 题型编号=ntx
                do while (.not.eof())
                        csth=alltrim(试题号)
                        sele 4
                        locate for 试题号=csth
                        tmtmp=""
                        datmp=""
                        *if (.not.eof())
                                tmtmp=题目
                                datmp=答案
                        *endif
                        sele 6
                        nfz=分值
                        *memotm=memotm+str(i)+". "+tmtmp
                        *memoda=memoda+str(i)+". "+datmp
                        store gctmhandle to _text
                        if i=1
                                \\<<alltrim(str(i))>>.
                        else
                                \
                                \<<alltrim(str(i))>>.
                        endif
                        \\<<tmtmp>>
                        store gcdahandle to _text
                        if i=1
                                \\<<alltrim(str(i))>>.
                        else
                                \
                                \<<alltrim(str(i))>>.
                        endif
                        \\  答案:<<datmp>>
                       
                        i=i+1
                        continue
                enddo
                fclose(gctmhandle)
                fclose(gcdahandle)
                sele 8
                append blank
                *set textmerge to
                replace xh with nxh,题型名称 with ctxmc
                *store gctmhandle to _text
                append memo 题目 from tm.txt overwrite
                *store gcdahandle to _text
                append memo 答案 from da.txt overwrite
                erase tm.txt
                erase da.txt
                nxh=nxh+1
                sele 7
                continue
        enddo
        endif
        *do form form1
        labtitle=alltrim(thisform.combo1.value)
        report form rptsj preview NOCONSOLE

Tiger5392 发表于 2008-2-20 13:32

不好意思,有别人帮助你,我也就不说话了。其实,你去掉\\或\命令即可

TZTJ 发表于 2008-2-20 15:19

如果去掉\\或\命令,所有的代码都不能用了,也达不到预览的结果

Tiger5392 发表于 2008-2-20 15:50

做报表啊

TZTJ 发表于 2008-2-20 15:59

报表的结果是需要这段代码的。

Tiger5392 发表于 2008-2-20 16:02

若想把结果保存在 tm.txt 文本文件中,可以用 strtofile() 函数且能避免乱屏

Tiger5392 发表于 2008-2-20 16:28

其实你的程序,好像用不着 tm.txt 和 da.txt 这两个文件。分别用两个变量 lcTM 和 lcDA 来代替这两个文件,后面的内容稍微修改一下也能完成你的任务。

TZTJ 发表于 2008-2-20 22:39

不好意思tiger ,这个问题在前几天hu9jj已经告诉我了,由于粗心,没有认真看好他的贴,今晚我再次看,原来用 SET TEXTMERGE NOSHOW  就可以了。

页: [1]

编程论坛