【问题标题】:Visual Foxpro modify general fieldVisual Foxpro 修改通用字段
【发布时间】:2009-07-01 02:46:55
【问题描述】:

首先,我不是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 的黑暗中摸索。

请帮忙! :)

谢谢,

克雷格

【问题讨论】:

    标签: foxpro visual-foxpro


    【解决方案1】:

    一些事情:

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

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

    • 任何需要设置的设置都必须在运行时环境中显式设置 - 立即想到 SET EXCLUSIVE 和 SET SAFE。

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

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

    现在等待 后继续执行程序 一般字段编辑窗口是 打开。程序不等待 要关闭的编辑窗口,但是 继续执行程序 紧跟在该行之后的行 包含 MODIFY GENERAL NOWAIT。 如果在 MODIFY GENERAL 时省略 NOWAIT 在程序中发布,编辑 打开窗口并执行程序 暂停直到编辑窗口 关闭。

    【讨论】:

    • 感谢您的回复。我确实有一个 READ EVENTS - 它正在弹出一个表格。我在代码中分散了一些消息框,但没有太大帮助——我认为基本上它卡在了 MODIFY GENERAL 命令上。 patch 变量来自我从 PRG 的参数中获得的命令行参数。如果有帮助,我可以发布更多代码。
    【解决方案2】:

    我自 1987 年以来一直是 foxpro 开发人员,自 1993 年以来一直是 VFP。如果您拥有的数据不是机密数据,您可以给我一份大约 20 条记录的副本...我会看看我是否可以为您拼凑一些东西,这些东西可以在无人看管的情况下作为 EXE 外部开发模式运行。即使你给我一个虚假的非通用列和通用数据列。

    【讨论】:

    • 那真是太棒了。我怎么联系你?这些数据是机密的医疗资料,但我相信我可以给你一些虚假的资料。实际上,您可以通过 craig (at) supacrash (dot) com 给我发电子邮件。期待您的来信。
    【解决方案3】:

    常规字段高度依赖于存储在常规字段中的自动化信息,在您的情况下是 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。如果没有一些示例代码,我只能猜测打开的窗口也需要关闭,或者可能会占用机器上所需的一些资源。

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      相关资源
      最近更新 更多