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

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

问题解决有报酬

联系电话:18982139613
QQ:123198541

19 个解决方案

#1


1、如果是你自己独占打开的,可以写数据,如果已经被别人独占打开了,不要说写,你都打不开了
2,3 不清楚

#2


这不应该是一个VFP的问题啊!给你一个地址去看看吧,相信可以解决楼主的问题!

http://www.d9soft.com/article/2007/7-9/Article19637_1.htm

#3


用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方法

#4


我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。

#5


引用 4 楼 snrmnm_sx 的回复:
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。


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

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

#6


急用呀,高手出来救场呀!

#7


引用 6 楼 snrmnm_sx 的回复:
急用呀,高手出来救场呀!


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

要是第三方软件,没办法,除非改动第三方软件打开方式。

#8


引用 5 楼 apple_8180 的回复:
引用 4 楼 snrmnm_sx 的回复:
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。


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

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


有一个用VFP6写的老程序,数据库是VFP自己的,表是DBF文件,我现在需要写一个新的程序(.NET来写),要在VFP6的老程序运行的情况下,对DBF数据表进行读写操作,这样可以现实吗?

#9


引用 8 楼 snrmnm_sx 的回复:
有一个用VFP6写的老程序,数据库是VFP自己的,表是DBF文件,我现在需要写一个新的程序(.NET来写),要在VFP6的老程序运行的情况下,对DBF数据表进行读写操作,这样可以现实吗?


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

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

#10


引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

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

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


首先谢谢  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

#11


上面写错了,是OLE DB方式,不是ODBC

#12


引用 10 楼 snrmnm_sx 的回复:
引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

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

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


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

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


用Microsoft OLE DB Provider for Visual FoxPro 9.0连接DBF,
不用 Provider=Microsoft.Jet.OLEDB.4.0

#13


引用 12 楼 apple_8180 的回复:
引用 10 楼 snrmnm_sx 的回复:
引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

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

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


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

这个老程序的原代码我没有,好像是修改不到。
……

兄弟,这个东西我没有用过!Microsoft OLE DB Provider for Visual FoxPro 9.0 是不是要安装噢,有没有连接事例呢?

#14


还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?

#15


引用 14 楼 snrmnm_sx 的回复:
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?


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

#16


引用 13 楼 snrmnm_sx 的回复:
兄弟,这个东西我没有用过!Microsoft OLE DB Provider for Visual FoxPro 9.0 是不是要安装噢,有没有连接事例呢?
……


需要安装
安装oledb for vfp后,建一ado连接,选oledb for vfp,如果是数据库,连接到数据库,如果是*表,连接到*表所在目录,然后建一ado command或用ado连接的execute方法

#17


引用 15 楼 apple_8180 的回复:
引用 14 楼 snrmnm_sx 的回复:
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?


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


VFP是不是可以对数据表以共享的方式打开呢?
如果有共享方式的话,是不是就可以在对方打开DBF的情况下,我的程序也可以对数据表进行读写操作?

#18


引用 17 楼 snrmnm_sx 的回复:
VFP是不是可以对数据表以共享的方式打开呢?
如果有共享方式的话,是不是就可以在对方打开DBF的情况下,我的程序也可以对数据表进行读写操作?


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

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

此外,你首先得保证你没有使用独占的方式,连接串的写法可以到下面的网站去查,你应该对 exclusive 这个词敏感点: http://www.connectionstrings.com/visual-foxpro

#19


用.NET操作VFP的表,本来就是自讨苦吃。

#1


1、如果是你自己独占打开的,可以写数据,如果已经被别人独占打开了,不要说写,你都打不开了
2,3 不清楚

#2


这不应该是一个VFP的问题啊!给你一个地址去看看吧,相信可以解决楼主的问题!

http://www.d9soft.com/article/2007/7-9/Article19637_1.htm

#3


用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方法

#4


我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。

#5


引用 4 楼 snrmnm_sx 的回复:
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。


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

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

#6


急用呀,高手出来救场呀!

#7


引用 6 楼 snrmnm_sx 的回复:
急用呀,高手出来救场呀!


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

要是第三方软件,没办法,除非改动第三方软件打开方式。

#8


引用 5 楼 apple_8180 的回复:
引用 4 楼 snrmnm_sx 的回复:
我也是做.NET的,楼上的连接里面的内容,我基本上都知道哈,在DBF文件没有被其它人打开的情况下,我是可以连接BDF文件的,但是当别人先打开发DBF文件,我的程序就出错了。


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

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


有一个用VFP6写的老程序,数据库是VFP自己的,表是DBF文件,我现在需要写一个新的程序(.NET来写),要在VFP6的老程序运行的情况下,对DBF数据表进行读写操作,这样可以现实吗?

#9


引用 8 楼 snrmnm_sx 的回复:
有一个用VFP6写的老程序,数据库是VFP自己的,表是DBF文件,我现在需要写一个新的程序(.NET来写),要在VFP6的老程序运行的情况下,对DBF数据表进行读写操作,这样可以现实吗?


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

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

#10


引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

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

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


首先谢谢  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

#11


上面写错了,是OLE DB方式,不是ODBC

#12


引用 10 楼 snrmnm_sx 的回复:
引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

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

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


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

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


用Microsoft OLE DB Provider for Visual FoxPro 9.0连接DBF,
不用 Provider=Microsoft.Jet.OLEDB.4.0

#13


引用 12 楼 apple_8180 的回复:
引用 10 楼 snrmnm_sx 的回复:
引用 9 楼 apple_8180 的回复:
引用 8 楼 snrmnm_sx 的回复:

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

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


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

这个老程序的原代码我没有,好像是修改不到。
……

兄弟,这个东西我没有用过!Microsoft OLE DB Provider for Visual FoxPro 9.0 是不是要安装噢,有没有连接事例呢?

#14


还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?

#15


引用 14 楼 snrmnm_sx 的回复:
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?


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

#16


引用 13 楼 snrmnm_sx 的回复:
兄弟,这个东西我没有用过!Microsoft OLE DB Provider for Visual FoxPro 9.0 是不是要安装噢,有没有连接事例呢?
……


需要安装
安装oledb for vfp后,建一ado连接,选oledb for vfp,如果是数据库,连接到数据库,如果是*表,连接到*表所在目录,然后建一ado command或用ado连接的execute方法

#17


引用 15 楼 apple_8180 的回复:
引用 14 楼 snrmnm_sx 的回复:
还有,我想问一下,如果DBF被别人以独占方式打了,我想再去读都不可以是吗?


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


VFP是不是可以对数据表以共享的方式打开呢?
如果有共享方式的话,是不是就可以在对方打开DBF的情况下,我的程序也可以对数据表进行读写操作?

#18


引用 17 楼 snrmnm_sx 的回复:
VFP是不是可以对数据表以共享的方式打开呢?
如果有共享方式的话,是不是就可以在对方打开DBF的情况下,我的程序也可以对数据表进行读写操作?


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

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

此外,你首先得保证你没有使用独占的方式,连接串的写法可以到下面的网站去查,你应该对 exclusive 这个词敏感点: http://www.connectionstrings.com/visual-foxpro

#19


用.NET操作VFP的表,本来就是自讨苦吃。