首先,我不是VFP程序员,所以我做错了可能很简单。
我正在尝试从VFP 9数据库的常规字段中提取一些文档。我有一种方法可以通过有效地将字段复制并粘贴到Word中,然后将Word文档保存到磁盘上来实现此目的。
我在foxpro开发环境中使用.prg文件。
以下是我的代码的内容(其中大部分是从Microsoft支持问题中复制而来的):
DO WHILE NOT EOF()
IF EMPTY(tnoteole) then
SKIP
LOOP
ENDIF
KEYBOARD "{ctrl+c} {ctrl+w}"
MODIFY GENERAL tnoteole
TRY
.EditPaste
CATCH
ENDTRY
.InsertPara
filename = Path + ALLTRIM(STR(recnum)) + ".doc"
.FileSaveAs(filename)
.EditSelectAll
.EditClear
SKIP
recnum = recnum + 1
ENDDO
我的问题是,当我从开发环境中运行它时它工作正常,并且一般字段窗口在屏幕上闪烁并且它被粘贴到Word等等。但是当我尝试从一个编译的exe运行它时(用户单击表单上的按钮会触发该过程 - 我有很多工作 - 虽然我真的希望它是一个批处理作业,不需要用户交互)Word打开,但这就是它得到的。一般字段不会在屏幕上闪烁,基本上它只是等待永远。
(哦,如果你想知道讨厌的try / catch事情,我在粘贴一些字段时发现了一些异常,但是try / catch在开发环境中运行正常,所以我不认为这就是我遇到问题的原因。)
那么,我怎样才能做到这一点?我在foxpro的黑暗中有点感觉。
请帮忙! :)
谢谢,
克雷格
答案 0 :(得分:2)
一些事情:
这是VFP编译的EXE吗?你有一个'READ EVENTS'命令吗?否则exe代码将运行然后立即退出,这听起来有点像你的问题。
从哪里获取Path变量?开发和运行时间会有所不同吗?
任何需要设置的设置必须在运行时环境中明确设置 - 请记住SET EXCLUSIVE和SET SAFE。
否则,一些MessageBox调试或日志记录应该告诉您通过程序的程度以及设置的变量,这应该足以让它运行。
更新:我只是查看了Modify General文档,你可能需要在修改常规命令中使用NOWAIT子句:NOMODIFY也不会受到伤害,你可能需要提供一个DEFINEd窗口要打开的编辑窗口并包含IN WINDOW子句。
NOWAIT 继续执行程序后执行 一般字段编辑窗口是 打开。该计划不等待 要关闭的编辑窗口,但是 继续执行该程序 行后紧跟线 包含MODIFY GENERAL NOWAIT。 如果在MODIFY GENERAL时省略NOWAIT 在程序中发布,编辑 窗口打开并执行程序 暂停直到编辑窗口为止 闭合。
答案 1 :(得分:1)
自1987年以来,我一直是foxpro的开发者,自1993年以来一直是VFP。如果您拥有的数据不是保密的,那么你可以给我一份20条左右的记录...我会看看我是否有可以为您提供一些无人值守的EXE外部开发模式。即使你给我一个虚假的非一般列和一般数据列。
答案 2 :(得分:0)
“常规”字段高度依赖于“常规”字段中存储的自动化信息,以及Word文档中存储的自动化信息。因此,如果您运行它的计算机上没有Microsoft Word,您将遇到问题。你可能知道,一般领域很挑剔。
我的建议是在TRY ... CATCH中包含MODIFY GENERAL代码,并在CATCH中添加一些异常代码,这样你就可以看到这里发生了什么。
LOCAL loException AS Exception
TRY
KEYBOARD "{ctrl+c} {ctrl+w}"
MODIFY GENERAL tnoteole
.EditPaste
.InsertPara
filename = Path + ALLTRIM(STR(recnum)) + ".doc"
.FileSaveAs(filename)
.EditSelectAll
.EditClear
SKIP
CATCH TO loException
* Output problem to a text file for review after the process
STRTOFILE(loException.Message + CHR(13) + CHR(10) ;
" on " + TRANSFORM(loException.LineNo), ;
"ExceptionLog.txt", 1)
ENDTRY
我也同意NOWAIT。如果没有一些示例代码,我只会猜测打开的窗口也需要关闭,或者可能会占用机器上所需的一些资源。