Visual Foxpro修改一般字段

时间:2009-06-26 03:16:02

标签: foxpro visual-foxpro

首先,我不是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的黑暗中有点感觉。

请帮忙! :)

谢谢,

克雷格

3 个答案:

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