dbf只能修改。插入,不能删除
一个dbf数据库,用C#连接,能insert、update,但不能delete,请问这是什么原因? 问题点数:0、回复次数:2Top
1 楼apple_8180(十豆三)回复于 2006-03-04 08:50:49 得分 0
应该可以DELETE,只是不能彻底删除。
请参考:
VB对FOXPRO数据库操作时能否Pack
*----------------------------------
出处:http://www.china-askpro.com/msg1/qa52.shtml
Q:我用VB对FOXPRO数据库操作,遇到这样一个问题: 只能对记录进行DEL,也就是在该条记录上打一个删除标记,但不能象在数据库中那样,用“PACK”把这条记录真正删除。当记录数较多时, 用DBGRID等控件做的程序都会出错。该怎样办呢?
A:VB中无法对DBF文件进行PACK,也就是说无法真正地从物理上删除记录。只能把ISAM的设置 Deleted设为On,这样相当于FoxPro的SET DELETED ON,也就是在VB中不显示有删除标记的记录,但是在Fox中仍然可以看到。当安装 Microsoft FoxPro 数据库的驱动程序时,设置程序会在引擎的 Windows 注册表和 ISAM格式子键写入一些缺省值。Microsoft FoxPro 初始化设置在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\Engines\Xbase 文件夹包含用来访问外部 FoxPro 工作表的 Msxbse35.dll 驱动程序的初始化设置。其中的Deleted用以决定 Microsoft Jet 数据库引擎如何处理已标记为删除的记录的二进制指示器。01 值对应 Microsoft FoxPro 的 SET DELETED ON 命令,且指示 Microsoft Jet 不再检索或定位已删除的记录。00 值对应 Microsoft FoxPro 的 SET DELETED OFF 命令,且指示 Microsoft Jet 对待一个删除的记录像对待任何其它的记录一样。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型,而在 Windows NT 3.51 中是 REG_BINARY 类型。
如果要真的Pack,可以将保留的记录拷贝到一个临时数据库中,再覆盖原来的数据库。
A:我倒有一个没办法中的方法(不过此方法只适合你的DBF数据库是你个人使用,而非网上多用户使用):
将以下代码用V_FoxPro编译成可执行文件(PACK.EXE)
PARA FILENAME
IF .NOT. FILE(FILENAME) THEN
MESSAGEBOX ("指定的数据库 ' "+FILENAME +" ' 没有找到!")
RETURN
ENDIF
SET EXCLUSIVE ON
USE (FILENAME)
PACK
USE
** CLOSE ALL
RETURN
当每次操作完DBF数据库后关闭连接(db.clos)
然后调用以上程序进行切底删除,方法如下:
...
db.clos
shell "path\pack.exe paht\数据库名"
或者在Form_Unload事件执行(建议)
(我编写的一个管理系统就经常用此方法的,简单方便)
Top
2 楼pwife(大大)回复于 2006-03-04 10:37:57 得分 0
谢谢,换成用C#来操作,可以用pack tablename来物理删除了。
只是,没分给了:(Top
相关问题
- 用ADO。NET如何更新数据(插入、删除、修改)?
- 关于BLOB的插入,修改和删除
- 新手问一个关于sql插入、修改、删除的问题
- Remoting(TCP)如何传递Datatable中修改(更新、删除、插入)了的数据?
- 如何用VC++的ADO实现向SQLSERVR中存取图片,并进行操作(插入,删除,修改)
- 如何在Web开发中对数据库进行插入,修改,更新,删除和显示操作?
- 通过 Button在 Grid中插入 ,修改,删除!怎么实现呀(在线等,分不够再加)!!
- 求c#的数据库编程 比如 查询 插入 修改 删除 操作代码或源程序,谢谢
- 怎么防止用户在DbGrid中插入、删除数据,而只能修改数据。
- 如何用VB.net访问ACESS数据库并对表进行读取,插入,修改,删除。




