2010-01-27 40 views
1

连接到MS Access数据库这是我的函数:通过函数

Public Function DBConnection(ByVal path As String) 
    ' This function makes the database connection and returns the object 
    ' to reference it. 
    cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path + ";") 
    cn.Open() 
    Return cn 
End Function 

正如你所看到的,我要初始化一个数据库连接并返回它,所以我可以在我的形式使用。此功能是在一个模块中,我的变量如下:

Public cn As OleDbConnection 
Public cmd As OleDbCommand 
Public dr As OleDbDataReader 

但我不知道我怎么能在我的形式使用,我只是调用的函数DBConnection,然后用我的SQL语句进行?还是我必须做别的事情?帮助将非常感激,欢呼声。

另外,我需要一些意见。我的应用程序依赖于MS Access数据库。在上初始化连接并在用户关闭程序时关闭连接,或者在查询运行时打开和关闭连接是否更好?我打算在多个表单上使用一些数据库查询,因此我将它放入一个模块中,但我不应该100%地处理这个问题。

谢谢。

+0

是您的客户端应用程序的.net应用程序或者是一个单独的访问应用程序? – 2010-01-27 18:53:04

+0

这是一个.NET应用程序:) – Matt 2010-01-27 19:14:10

回答

0

一些事情。每次调用该函数时都会打开一个连接。你最好确保你关闭了数据库,否则会开始占用内存。

你可能看一些其他的选择(例如使用NHibernate或其他ORM)

但是,如果你留在这个模型中,然后你可以使用返回访问数据库中的cn。

+0

感谢您的答案,这个功能只能在程序中调用一次,在Form_Load上。当我使用返回的cn时,我是否正常使用它?就像我想运行查询一样,我只是使用'cmd = New OleDbCommand(“blah”)'? – Matt 2010-01-27 18:48:47

+0

是的,不是创建一个新的连接,而是使用cn,所以就像cn.Query()或者需要使用的任何函数调用一样。 – taylonr 2010-01-27 20:17:27

1

来源:How to bind Microsoft Access forms to ADO recordsets

Private Sub Form_Open(Cancel As Integer) 
    Dim cn As ADODB.Connection 
    Dim rs As ADODB.Recordset 

    'Use the ADO connection that Access uses 
    Set cn = CurrentProject.AccessConnection 

    'Create an instance of the ADO Recordset class, and 
    'set its properties 
    Set rs = New ADODB.Recordset 
    With rs 
     Set .ActiveConnection = cn 
     .Source = "SELECT * FROM Customers" 
     .LockType = adLockOptimistic 
     .CursorType = adOpenKeyset 
     .Open 
    End With 

    'Set the form's Recordset property to the ADO recordset 
    Set Me.Recordset = rs 

    Set rs = Nothing 
    Set cn = Nothing 
End Sub