|
|
1
3
我假设当你提到“FoxPro本身”时,你的意思是有人在运行FoxPro 2.6 for DOS或Windows,或VisualFoxPro(任何版本)。如果是这种情况,请确保用户在命令窗口中使用以下命令
或者,它们可以打开每个表,并在每个use命令中包含shared子句。 如果你提到的是在FoxPro中开发的一个应用程序,你会遇到一个稍微复杂的情况,因为这个应用程序可以被设计为单用户,并且在代码中有一个独占的集合。在这种情况下,最好尝试修改现有的config.fp或config.fpw(取决于版本)并添加一行:
或者,如果文件不存在,您可以创建它。如果这不起作用,您将需要应用程序源代码来更改它,这样它就不会以独占方式打开表。 至于将vfp ole db驱动程序与C程序一起使用,您可以在exclusive=off的文件夹中包含config.fpw文件,它将确保您以共享模式打开文件,以防您尝试独占使用。这不太可能,因为运行时版本不默认为exclusive,并且OLE DB驱动程序遵循运行时标准。 里克·舒默VFP MVP |
|
|
2
1
您得到的错误代码是hresult 0x80040e37,它被一些不知道无符号Int32的中间步骤破坏了——它是“can't open that table”(无法打开该表)的通用ODBC错误(通常是由于拼写错误)。毫无疑问,FoxPro和主应用程序使用的libs正在进行某种“锁定”——即使ODBC允许您指定只想读,但如果其他进程打开它进行写入,仍然应该拒绝(两个或多个只想读的进程可以,但即使只有一个想写的进程也必须排除所有其他进程,r读写者)。 如果在短暂地读取.dbf文件时不能暂时将其与其他用途分离,那么一种方法可能是将其复制到另一个名称(still.dbf)并尝试打开该副本--它是否工作,或者仍然因同一错误而失败?在后一种情况下,可能会有方法对文件进行黑客攻击,以便清除文件的“锁定状态”——只要它不在使用中(就像副本不在使用中一样,除非您设法打开它!)-)。完成所需的阅读后,可以删除副本。 问题是,虽然这种方法可能是可行的,但并不完全可靠:它是 可能的 (如果你不走运的话)FoxPro或你的主应用程序可能正在对数据库进行更改(这就是他们锁定数据库的原因,毕竟为了安全起见,他们可以进行更改),并且这些更改可能在你执行拷贝的那一刻部分但不是全部提交到磁盘上。您是否有办法检查正在读取的数据是明智的还是损坏的?如果你能告诉它已经损坏了,你可以简单地再次尝试读取(希望新数据保存到磁盘的同时也完成了),但是如果你不能告诉这真的是一个错误……:。-( 我想要记住的一点是,某些持久化数据的方法并不完全适用于多任务的目的——下次为程序设计任何类型的数据持久化时,请确保使用更可靠的方法! |
|
|
3
1
里克是对的。默认情况下,FoxPro设置会授予FoxPro会话对“use”命令打开的任何表的独占权限。 当你打开桌子的时候,当vb应用程序运行的时候,你是在互相绊倒。 我假设您在Windows资源管理器中双击dbf文件并打开它们,而不使用FoxPro中的“use”命令查看表。如果您只想这样做,那么(在VFP9中)关闭除一个VFP之外的所有会话。转到“工具”->“选项”->“数据”选项卡,然后取消选中“以独占方式打开”。现在关闭该会话。这将保存设置。下次双击dbf/dbc时,它将打开具有“共享”访问权限的所有表。 否则,要使用“use”命令从vfp中访问表,请执行以下操作: 对于独占访问:
对于共享访问:
您还可以给它一个noupdate标志,使其成为只读的。(安全的查询方式。)
或
据我所知,主要的问题是VB接管了对数据库的“独占”权限,并在打开表(共享或其他)时崩溃。 然而,这听起来更像是一个时间问题,而不是一个FoxPro。假设您没有访问权限或权限重写vb应用程序,唯一的另一种选择是找到一个主vb应用程序不运行的时间(可能是深夜?)并在调度程序上运行FoxPro查询(.prg文件)。查询可以复制到另一个文件,如Alex建议的。 运行FoxPro程序的命令很简单:
它可以进入由通用调度程序运行的.bat或.cmd文件中。 但是,有一个陷阱: 最好是自己在vfp中编译.prg,而不是让vfp为您编译它(如果您不这样做,它也会这样做)。此外,如果您进行了更改并且不重新编译,vfp将使用最新编译的版本(只是为了与您计较)。 如果你已经知道这些了,为过度杀人道歉。 祝你好运。 |
|
4
0
除了Ricks对在实际FoxPro应用程序中设置独占项的评论之外。有几个实例需要对文件进行真正的锁定,例如修改结构、打包数据库(删除标记为删除的记录)、重建索引。如果其中任何一个都是锁定文件的基础,那么即使复制也不会有帮助,因为您无法获得文件句柄,和/或复制的结果可能不同步,那么您的查询可能会失败或给出其他错误的结果。 |
|
|
5
0
这很难看,但你可以尝试通过操作系统从一个FoxPro应用程序中复制表。如果操作系统正处于另一个进程的写操作过程中,它甚至可以处理副本并延迟操作。复制后,如果有一个dbc反向链接到文件,而您无法打开它,则只需释放表。不管是掉下来还是释放出来,我的记忆都让我失望了:)这一切都是通用的。最好的解决方案是按照建议重新编译锁定的FoxPro软件,这样它就不会是独占的。但是如果你这样做,那么你就必须理解为什么从……开始它可能是排他的。是故意的还是只是错误的编码? |