注册 登录
编程论坛 VFP论坛

关于标签打印的奇怪现象,各位帮忙分析一下原因

laowan001 发布于 2023-09-26 08:17, 870 次点击
只有本站会员才能查看附件,请 登录

基本情况说明:
图中两个text,controlsource分别对应一个grid的两个字段,两个text.lostfocus中调用了一个表单的方法,其中判断text的值是否变化,如果变化了,则更新远程数据库中相应的数据
按钮“打印”是要打印一个标签,与grid表中当前记录相关(基本过程:根据grid表中的数据,生成一个供打印的临时表)
奇怪的情况:
输入了两个text中的值(可能是任一个),然后直接点“打印”按钮,则会报错:找不到变量boxprn(这是标签打印时生成的临时表中的一个字段名)
但是,如果输入text值后不点打印,而是点击grid中的另一条记录,然后再点击grid中的刚才那条记录,此时点击打印按钮就不会报错,打印结果正常

调试:在打印按钮的程序中brow将要打印的临时表,记录内容是正确的,boxprn字段也有且内容正确&ensp;<br>&ensp;<br>说明:临时表中的boxprn字段确实存在,只是在text值有变化(调用了一个方法)时会出现报错

这是什么原因呢?
百思不得其解,请各位援手,先谢了

[此贴子已经被作者于2023-9-26 08:21编辑过]

12 回复
#2
easyppt2023-09-26 08:27
1、确认你Grid数据源是行缓冲还是表缓冲,表缓冲模式下,不改变当前记录号的情况下,数据的改动不会提交,除非手动提交。  
2、打印的报表中的 字段是否加了表的别名?如果没有,请确认工作区是否是对应的工作区。  
3、就是检查一下临时表是否已创建。
 
程序编写要学会调试,比如代码中加入 临时用的全局变量或messagebox()等,调试,记录关键代码的结果。

你描述的问题,调试排查 其实并不难。

[此贴子已经被作者于2023-9-26 08:28编辑过]

#3
hu9jj2023-09-26 08:30
将调用表单的方法这段代码移到“打印”按钮试试看。
#4
laowan0012023-09-26 08:47
以下是引用easyppt在2023-9-26 08:27:43的发言:

1、确认你Grid数据源是行缓冲还是表缓冲,表缓冲模式下,不改变当前记录号的情况下,数据的改动不会提交,除非手动提交。   
2、打印的报表中的 字段是否加了表的别名?如果没有,请确认工作区是否是对应的工作区。   
3、就是检查一下临时表是否已创建。  
  
程序编写要学会调试,比如代码中加入 临时用的全局变量或messagebox()等,调试,记录关键代码的结果。
 
你描述的问题,调试排查 其实并不难。

 
 
感谢回复
1.grid表更新后执行了
=CURSORSETPROP("Buffering",3,表名)
2.打印之前当前工作区已经是需要打印的临时表,打印中直接使用字段名
3.临时表已经创建,调试已确认结构和内容是正确的(直接点“打印”按钮则一切正常),调试结果
也验证了grid表的数据是已经更新过的


[此贴子已经被作者于2023-9-26 09:05编辑过]

#5
laowan0012023-09-26 08:49
以下是引用hu9jj在2023-9-26 08:30:40的发言:

将调用表单的方法这段代码移到“打印”按钮试试看。

因为改变了text值后不是必然点“打印”按钮,所以那个方法不能与打印按钮合并
#6
laowan0012023-09-26 13:53
两种操作方式的差异是:(1)点击了打印按钮,之前会执行一段程序,然后执行click事件(2)直接执行click事件
#7
laowan0012023-09-27 06:53
汇报一下进展
不报错了,在text.lostfocus里人为移动了行,skip;skip -1,然后打印就正常了

虽然不报错了,但还是不明白为什么
#8
hu9jj2023-09-27 07:31
因为有些命令是要移动记录后才能生效的。
#9
独木星空2023-09-27 07:39
能解决问题就好,我是从事会计行业的,在Excel记录的账页也需要打印,现在还没有尝试过,估计也会有各种问题,比如安年度,安科目,汇总帐,明细帐,......等等一切都需要安排,如何安排,打印顺序,账页编码等等,唉,不考虑了,有些复杂。
#10
hu9jj2023-09-27 07:42
账页编号等标识可以在页眉、页脚里定义。
#11
laowan0012023-09-27 08:03
以下是引用hu9jj在2023-9-27 07:31:21的发言:

因为有些命令是要移动记录后才能生效的。

比如说?

我疑惑的是,点击按钮前,text要失去焦点,就要执行lostfocus,然后再执行按钮的click,想象应该是这个逻辑,click中按变化后的数据生成需要打印的临时表,数据也是正确的,但打印时只有那个字段报错找不到,临时表中明明已经有字段了

最搞不明白的是,打印时用的是新生成的临时表,跟那个表没啥关系,为什么那个表移动了记录不报错了???

#12
laowan0012023-09-27 11:50
吹版怎么看?
#13
独木星空2023-10-19 21:31
回复 11楼 laowan001
我就纳闷了,咋100分,四个人分,每人分24分就完了,是我数学不好,还是这个系统没有验真方法?
1