VB.NET 创建access数据库,在程序不关闭情况下打开,出现提示

wcf_01 2016-12-16 09:03:31
我引用的是 Microsoft Ado Ext.6.0 for DDL and Security和adodb
在创建完access后,程序不关闭的情况下打开这个数据库提示

you attempted to open a database that is already opened exclusively by user 'admin' on machine 'mypc ',try again when the database is available

图片上传不了,vs2010,access 2007


Imports ADOX

Public Class Form
Private Sub btnCreatAccess_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreatAccess.Click
Dim AccessName As String
Dim AccessPath As String
Dim TableName As String
Dim Field() As String
AccessName = TextBox1.Text.ToString
AccessPath = Application.StartupPath
TableName = "成绩表"
Field = {"d", "f", "g", "h"}

CreatAccess(AccessName, AccessPath, TableName, Field)

End Sub

Public Function CreatAccess(ByVal AccessName As String, ByVal AccessPath As String, ByVal TableName As String, ByVal Field() As String) As Boolean
Try
Dim CAT As Catalog = New ADOX.Catalog

CAT.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & AccessPath & "\" & AccessName & ".mdb")

Dim objTable As ADOX.Table = New ADOX.Table

'objTable.ParentCatalog = CAT
objTable.Name = TableName
'set autoID and primary key
Dim col As New ADOX.Column
col.ParentCatalog = CAT
col.Name = "ID"
col.Type = DataTypeEnum.adInteger
col.Properties("AutoIncrement").Value = True
col.Properties("Jet OLEDB:Allow Zero Length").Value = True
objTable.Columns.Append(col, DataTypeEnum.adInteger, 0)
objTable.Keys.Append("Primary", KeyTypeEnum.adKeyPrimary, "ID")
'creat field and updata it
Dim i As Integer
Dim num As Integer
num = Field.GetUpperBound(0)
For i = 0 To num
objTable.Columns(i).ParentCatalog = CAT
objTable.Columns.Append(Field(i), DataTypeEnum.adWChar, 0)
objTable.Columns(i).Properties("Jet OLEDB:Allow Zero Length").Value = True
Next

CAT.Tables.Append(objTable)
objTable = Nothing
CAT = Nothing

'Dim MyConnection As ADODB.Connection = New ADODB.Connection
'MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & AccessPath & "\" & AccessName & ".mdb"
'MyConnection.Open()

'MyConnection.Close()
'MyConnection = Nothing

Return True

Catch ex As Exception

MessageBox.Show(ex.Message, "Alarm", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False

End Try

End Function

End Class
...全文
268 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
引用 7 楼 songhtao 的回复:
创建后,关闭acces数据库。释放句柄。
恩恩 问题是怎么释放呢?cat=nothing 不行
我不懂电脑 2016-12-16
  • 打赏
  • 举报
回复
创建后,关闭acces数据库。释放句柄。
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
既然要多用户访问,那么你选错数据库了。改用 SQL Server 吧。
我不需要多用户访问 ,就一台电脑 我详细说下:我在笔记本上创建的ACCESS数据库,也是在这台笔记本上访问的,只不过这台电脑上运行的程序没有关,我用ACCESS打开我刚才创建的数据库提示
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
我不需要多用户访问 ,就一台电脑 我详细说下:我在笔记本上创建的ACCESS数据库,也是在这台笔记本上访问的,只不过这台电脑上运行的程序没有关,我用ACCESS打开我刚才创建的数据库提示
Tiger_Zhao 2016-12-16
  • 打赏
  • 举报
回复
既然要多用户访问,那么你选错数据库了。改用 SQL Server 吧。
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
Access 数据库对多用户支持不完善,最好按单用户方式使用。 要用 Access 程序打开前先关闭你的程序;同样要用你的程序访问前先关闭 Access 程序。
可是我写的是上位及程序,相当于从下位机读数据放到ACCESS里面去,不可能关掉上位及的, 我能不能在程序里增加断开的处理呢
Tiger_Zhao 2016-12-16
  • 打赏
  • 举报
回复
Access 数据库对多用户支持不完善,最好按单用户方式使用。
要用 Access 程序打开前先关闭你的程序;同样要用你的程序访问前先关闭 Access 程序。
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
希望有人帮忙看下 我是个vb菜鸟
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
按照上一篇帖子改的代码,亲测 可用,并能关掉ldb文件。分享给大家,如果有更好的释放 cat的方法,欢迎大家一起讨论。毕竟我是个新手!

Imports ADOX

Public Class Form
    Public Function CreatAccess(ByVal AccessName As String, ByVal AccessPath As String, ByVal TableName As String, ByVal Field() As String) As Boolean
        Try
            Dim CAT As Catalog = New ADOX.Catalog
            'Creat access 
            CAT.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & AccessPath & "\" & AccessName & ".mdb")
            'creat updata table data
            Dim objTable As ADOX.Table = New ADOX.Table
            objTable.Name = TableName
            'set autoID and  primary key
            Dim col As New ADOX.Column
            col.ParentCatalog = CAT
            col.Name = "ID"
            col.Type = DataTypeEnum.adInteger
            col.Properties("AutoIncrement").Value = True
            col.Properties("Jet OLEDB:Allow Zero Length").Value = True
            objTable.Columns.Append(col, DataTypeEnum.adInteger, 0)
            objTable.Keys.Append("Primary", KeyTypeEnum.adKeyPrimary, "ID")
            'creat field and updata it
            Dim i As Integer
            Dim num As Integer
            num = Field.GetUpperBound(0)
            For i = 0 To num
                objTable.Columns(i).ParentCatalog = CAT
                objTable.Columns.Append(Field(i), DataTypeEnum.adWChar, 0)
                objTable.Columns(i).Properties("Jet OLEDB:Allow Zero Length").Value = True
            Next
            'updata table
            CAT.Tables.Append(objTable)
            objTable = Nothing
            'release access.ldb
            Dim MyConnection As ADODB.Connection = New ADODB.Connection
            MyConnection = CAT.ActiveConnection
            MyConnection.Close()
            'release COM
            System.Runtime.InteropServices.Marshal.ReleaseComObject(MyConnection)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(CAT)
            CAT = Nothing
            MyConnection = Nothing
            Return True
        Catch ex As Exception
            MessageBox.Show("数据库未成功建立,请检查!" & vbCrLf & "错误提示:" & ex.Message, "Alarm", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End Try
    End Function
End Class
wcf_01 2016-12-16
  • 打赏
  • 举报
回复
我从这篇帖子中找到答案:http://bbs.csdn.net/topics/390704199

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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