【发布时间】:2014-09-03 09:26:40
【问题描述】:
TL;DR 在通过 ODBC/OLE DB 运行 INSERT 和 APPEND FROM 命令时,如何发出命令以可靠地将 FoxPro 错误记录到纯文本文件?
我正在尝试将一些经过处理的数据写回 FoxPro 数据库。与 .dbf 的实际连接是由同事编写的服务完成的——我假设它使用 ODBC 或 OLE DB。我只提供 DBF 的路径和要运行的查询字符串。但是我在使用 FoxPro 时遇到了一些问题,不幸的是,我所有的经验都来自 SQL Server 和朋友——而不是 FoxPro。
我的问题是像下面的 INSERT 这样的简单语句在 Visual Fp 中工作正常,但无法通过服务。除了“发生错误”之外,我没有得到太多有用的错误信息。
INSERT INTO "ADDRESSES" (addressid, firstname, lastname) ;
VALUES (55, 'Test', 'Testerson')
为了让自己的生活更轻松,我尝试发出更多命令以使 FoxPro 将所有错误信息记录到文本文件中。同样,这在 Visual FoxPro 中有效 - 但在通过服务运行时会静默失败并且不输出文件。我已确保目录权限正确:
LOCAL lcOldOnError
lcOldOnError = ON("ERROR") && save old error handler
SET PROCEDURE TO [D:\foxpro\errhandler.prg]
ON ERROR DO ErrHandler WITH ERROR(), MESSAGE()
&& This insert causes a duplicate primary key error:
INSERT INTO "address book!addresses" (addressid, firstname, lastname) ;
VALUES (1, 'MyName', 'IsError')
ON ERROR &lcOldOnError && restore old error handler
外部 PRG errorhandler.prg 如下所示。它在 Visual FoxPro 中工作:
PROCEDURE ErrHandler
PARAMETERS gnError, gcMsg
LOCAL aErrInfo[1]
AERROR(aErrInfo)
cErrMsg = LTRIM(STR(aErrInfo[1])) + CHR(13) + CHR(10) + aErrInfo[2] + CHR(13) + CHR(10) + aErrInfo[3] + CHR(13) + CHR(10)
lnFileHandle = FCREATE ([D:\foxpro\errorlog.txt])
FPUTS(lnFileHandle, cErrMsg)
FCLOSE(lnFileHandle)
ENDPROC
任何提示或提示将不胜感激,谢谢。
@DRapp,这是我的 C# 代码。恐怕它是特定于站点的,所以不知道它是否有帮助:
static void Main(string[] args)
{
// Test - not production code!
var errormessage = string.Empty;
DataSvc dataService = new DataSvc();
dataService.AppDataPath = @"D:\foxpro\test\DATA\addresses.dbf";
const string commandText = "INSERT INTO [address book!addresses] (addressid, firstname, lastname) VALUES (90, [Iam], [Error])";
var returnValue = dataService.ExecuteCommands(commandText, ref errormessage);
Console.WriteLine("\nResult:{0}\nErrorMsg: {1}", returnValue, errormessage);
Console.ReadLine();
}
我只从 DataSvc 收到“发生错误”类型的错误,因此我想用更多命令来装饰 INSERT 语句,以便将错误信息重新路由到文本文件。
【问题讨论】:
标签: foxpro visual-foxpro