关于DBF文件读取和写入的问题,问题解决有报酬

Snrmnm_sx 2010-12-03 05:26:03
1.在DBF文件以独占方式打开的情况下,可不可以再向DBF里面写入和读取数据。
2.兄弟我使用的是ADO.NET的方式来写入数据,给个事例代码。
3.有备注字段的DBF表,怎么样用ADO.NET来连接,连接字符串是什么?

问题解决有报酬

联系电话:18982139613
QQ:123198541
...全文
495 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
aabiao 2010-12-05
  • 打赏
  • 举报
回复
用.NET操作VFP的表,本来就是自讨苦吃。
都市夜猫 2010-12-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 snrmnm_sx 的回复:]
VFP是不是可以对数据表以共享的方式打开呢?
如果有共享方式的话,是不是就可以在对方打开DBF的情况下,我的程序也可以对数据表进行读写操作?
[/Quote]

1. 当然可以,否则 vfp 就不会被认为是最适合做数据处理中间层的语言了。
语法: use 表名 shared [其他选项]

2. 即使有共享打开的方式,但能否打开就是另一回事了。前面其他网友已有回答,如果别人用独占(换个词就是“排它”)的方式打开了一个表,这个进程已经明确的告诉了操作系统,在我操作这个文件期间,不允许其他进程再对这个文件进行任何读写操作。你又怎么可能再打开它来读取,甚至写入呢?所以,你要读写的表如果有其他程序同时也在读写,且又使用了独占打开方式的话,你只有:1.修改这个程序,使用共享读写的方式. 2. 没有源程序,只能另写一个替代它. 3. 也不想重写,只有放弃

此外,你首先得保证你没有使用独占的方式,连接串的写法可以到下面的网站去查,你应该对 exclusive 这个词敏感点:http://www.connectionstrings.com/visual-foxpro
Snrmnm_sx 2010-12-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 apple_8180 的回复:]
引用 14 楼 snrmnm_sx 的回复:
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?


不可以,读的前提是打开,因为别人独占打开,你就打不开了。
[/Quote]

VFP是不是可以对数据表以共享的方式打开呢?
如果有共享方式的话,是不是就可以在对方打开DBF的情况下,我的程序也可以对数据表进行读写操作?
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 apple_8180 的回复:]
引用 10 楼 snrmnm_sx 的回复:
引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

VFP6写的老程序应该是独占方式打开的此表,所以再用什么方式或软件打开此表均报错。

只能改动VFP6写的程序,改为共享方式打开此表。


首先谢谢 apple_8180 对我的问题的关注。

这个老程序的原代码我没有,好像是修改不到。
……
[/Quote]
兄弟,这个东西我没有用过!Microsoft OLE DB Provider for Visual FoxPro 9.0 是不是要安装噢,有没有连接事例呢?
十豆三 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 snrmnm_sx 的回复:]
引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

VFP6写的老程序应该是独占方式打开的此表,所以再用什么方式或软件打开此表均报错。

只能改动VFP6写的程序,改为共享方式打开此表。


首先谢谢 apple_8180 对我的问题的关注。

这个老程序的原代码我没有,好像是修改不到。
还有一个问题就是,DBF文件一但有备注型字段里,……
[/Quote]

用Microsoft OLE DB Provider for Visual FoxPro 9.0连接DBF,
不用 Provider=Microsoft.Jet.OLEDB.4.0
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
上面写错了,是OLE DB方式,不是ODBC
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 apple_8180 的回复:]
引用 8 楼 snrmnm_sx 的回复:

VFP6写的老程序应该是独占方式打开的此表,所以再用什么方式或软件打开此表均报错。

只能改动VFP6写的程序,改为共享方式打开此表。
[/Quote]

首先谢谢 apple_8180 对我的问题的关注。

这个老程序的原代码我没有,好像是修改不到。
还有一个问题就是,DBF文件一但有备注型字段里,我用ODBC找开DBF文件也要报错。
代码如下:
'装载数据库文件到ListBox1中
Dim conn As New System.Data.OleDb.OleDbConnection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\VB4DBF\bin\Data;Extended Properties=dBASE IV;User ID=Admin;Password="
Dim myCommand As New System.Data.OleDb.OleDbCommand

'SrcData为我当前的数据库名称
'你可以替换成你自己的名称
'''''''''''''''''''''''''''''''''''''''''''
'注意::: 数据库文件名的长度不要超过8个字符,否则出错!!!!!:::::

'下面的几种形式都可以使用
myCommand.CommandText = "select * from Src_Data"
'myCommand.CommandText = "select xm from Src_Data.dbf"
'myCommand.CommandText = "select xm from [Src_Data]"
'myCommand.CommandText = "select xm from [Src_Data.dbf]"
''''表名大于8个字符,只取前八个
'myCommand.CommandText = "select xm from Src_Data_NoProblem"
'myCommand.CommandText = "select xm from [Src_Data_NoProblem.dbf]"

myCommand.Connection = conn
ListBox1.Items.Clear()
Try
conn.Open()
Dim myReader As System.Data.OleDb.OleDbDataReader
myReader = myCommand.ExecuteReader()
While myReader.Read()
ListBox1.Items.Add(myReader.Item("xh")) '数据加载到ListBox1
End While
myReader.Close()
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString)
Me.Close()
End Try
十豆三 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 snrmnm_sx 的回复:]
有一个用VFP6写的老程序,数据库是VFP自己的,表是DBF文件,我现在需要写一个新的程序(.NET来写),要在VFP6的老程序运行的情况下,对DBF数据表进行读写操作,这样可以现实吗?
[/Quote]

VFP6写的老程序应该是独占方式打开的此表,所以再用什么方式或软件打开此表均报错。

只能改动VFP6写的程序,改为共享方式打开此表。
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 apple_8180 的回复:]
引用 4 楼 snrmnm_sx 的回复:
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。


那别人是独占打开,所以你再打开时就打开了,就报错。

如果别人也是用你的程序打开的,那将你的程序改为共享打开,
不过如果别人是用其他软件独占打开的那你就共享打也没有……
[/Quote]

有一个用VFP6写的老程序,数据库是VFP自己的,表是DBF文件,我现在需要写一个新的程序(.NET来写),要在VFP6的老程序运行的情况下,对DBF数据表进行读写操作,这样可以现实吗?
十豆三 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 snrmnm_sx 的回复:]
急用呀,高手出来救场呀!
[/Quote]

说明一下你所说的别人打开了此表,别人用什么软件打开的此表,是用的你的软件?还是第三方软件?

要是第三方软件,没办法,除非改动第三方软件打开方式。
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
急用呀,高手出来救场呀!
十豆三 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 snrmnm_sx 的回复:]
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。
[/Quote]

那别人是独占打开,所以你再打开时就打开了,就报错。

如果别人也是用你的程序打开的,那将你的程序改为共享打开,
不过如果别人是用其他软件独占打开的那你就共享打也没有用。
Snrmnm_sx 2010-12-04
  • 打赏
  • 举报
回复
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。
十豆三 2010-12-04
  • 打赏
  • 举报
回复
用oledb for vfp(如9.0 Microsoft OLE DB Provider for Visual FoxPro 9.0)连接
不是oledb for odbc

oledb for vfp下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

File Name: vfpoledb.exe
Version: 1.1
Date Published: 1/5/2006
Language: English
Download Size: 2.5 MB

安装完oledb for vfp后,建一ado连接,选oledb for vfp,如果是数据库,连接到数据库,如果是自由表,连接到自由表所在目录,然后建一ado command或用ado连接的execute方法
十豆三 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 snrmnm_sx 的回复:]
兄弟,这个东西我没有用过!Microsoft OLE DB Provider for Visual FoxPro 9.0 是不是要安装噢,有没有连接事例呢?
……
[/Quote]

需要安装
安装oledb for vfp后,建一ado连接,选oledb for vfp,如果是数据库,连接到数据库,如果是自由表,连接到自由表所在目录,然后建一ado command或用ado连接的execute方法
十豆三 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 snrmnm_sx 的回复:]
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?
[/Quote]

不可以,读的前提是打开,因为别人独占打开,你就打不开了。
lc_apple 2010-12-03
  • 打赏
  • 举报
回复
这不应该是一个VFP的问题啊!给你一个地址去看看吧,相信可以解决楼主的问题!

http://www.d9soft.com/article/2007/7-9/Article19637_1.htm
华夏小卒 2010-12-03
  • 打赏
  • 举报
回复
1、如果是你自己独占打开的,可以写数据,如果已经被别人独占打开了,不要说写,你都打不开了
2,3 不清楚

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧