0

首先,我不是 VFP 程序员,所以我做错的可能很简单。

我正在尝试从 VFP 9 数据库的常规字段中提取一些文档。我有一种方法可以有效地将字段复制并粘贴到 Word 中,然后将 Word 文档保存到磁盘。

我在 .prg 文件中的 foxpro 开发环境中完成了这一切。

这是我的代码的核心内容(其中大部分是从 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 事情,我在粘贴一些字段时发现 Word 有一些异常,但是 try/catch 在开发环境中工作正常,所以我认为这不是原因我的问题。)

那么,我怎样才能使这项工作?我有点在foxpro的黑暗中摸索。

请帮忙!:)

谢谢,

克雷格

4

3 回答 3

2

一些东西:

  • 这是VFP编译的EXE吗?你有一个' READ EVENTS '命令吗?否则exe代码将运行然后立即退出,这听起来有点像你的问题。

  • 你从哪里得到 Path 变量?这会在开发和运行时有所不同吗?

  • 任何需要设置的设置都必须在运行时环境中显式设置——首先想到的是 SET EXCLUSIVE 和 SET SAFE。

否则,一些 MessageBox 调试或日志记录应该会告诉您程序完成了多远以及您的变量设置为什么,这应该足以让它工作。

更新:我只是在查看Modify General文档,您可能需要将 NOWAIT 子句与 Modify General 命令一起使用:NOMODIFY 也不会受到伤害,并且您可能必须提供一个 DEFINed 窗口才能打开编辑窗口并包含一个 IN WINDOW 子句。

NOWAIT 在通用字段编辑窗口打开后继续程序执行。程序不会等待编辑窗口关闭,而是继续在包含 MODIFY GENERAL NOWAIT 的行之后的程序行上继续执行。如果在程序中发出 MODIFY GENERAL 时省略 NOWAIT,则会打开编辑窗口并暂停程序执行,直到关闭编辑窗口。

于 2009-06-27T00:54:54.800 回答
1

自 1987 年以来我一直是 foxpro 开发人员,自 1993 年以来一直是 VFP。如果您拥有的数据不是机密数据,您可以给我一份 20 条左右记录的副本...我会看看我是否可以抛出一些东西一起为您将作为 EXE 外部开发模式无人值守运行。即使你给我一个虚假的非通用列和数据的通用列。

于 2009-06-27T02:50:37.140 回答
0

通用字段高度依赖于存储在通用字段中的自动化信息,在您的情况下是 Word 文档。因此,如果您运行它的机器上没有 Microsoft Word,您将遇到问题。您可能知道,General 字段很挑剔。

我的建议是在 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。如果没有一些示例代码,我只会猜测打开的窗口也需要关闭,或者可能会占用机器上所需的一些资源。

于 2009-06-30T18:46:55.017 回答