مسلمآ این روش رو که من گفتم برای Bind کردن کنترلها مناسب نیست و باید تمام کارها به صورت دستی انجام بشه. روش دوم که بهتر از روش اول هست ایجاد یک کلاس به ازای هر موجودیت Entity در Database هست و بعد تولید فیلدها به صورت Property به مثال زیر دقت کنید:
'a class module
Option Explicit
Private connDB As ADODB.Connection
Private mFirstName As String
Private mLastName As String
Private Changed As Boolean
Private m_ID As Long
Private Sub Class_Initialize()
'
Set connDB = New ADODB.Connection
With connDB
.ConnectionString = "your connection string"
.Open
End With
'
End Sub
Private Sub Class_Terminate()
'
If Changed Then Call Update
connDB.Close
setconndb = Nothing
'
End Sub
Public Property Get FirstName() As String
FirstName = mFirstName
End Property
Public Property Let FirstName(ByVal vNewValue As String)
'
mFirstName = vNewValue
Changed = True
'
End Property
Public Property Get LastName() As String
LastName = mLastName
End Property
Public Property Let LastName(ByVal vNewValue As String)
'
mLastName = vNewValue
Changed = True
'
End Property
Public Property Get ID() As Long 'This property id read only because I supposed it's identity or autonumber in db
ID = m_ID
End Property
Public Sub RetriveDate(ByVal ID As Long)
'
Dim rsTmp As ADODB.Recordset
Set rsTmp = connDB.Execute("SELECT * FROM tblTest WHERE ID = " & ID)
If rsTmp.State = adStateOpen Then
With rsTmp
m_ID = ID
mFirstName = .Fields("FirstName") & ""
mLastName = .Fields("LastName") & ""
.Close
End With
End If
Set rsTmp = Nothing
'
End Sub
'To get a list of whole records in table
Public Function GetList(ByRef rsResult As ADODB.Recordset) As Long
'
Dim lngRecAffects As Long
Set rsResult = connDB.Execute("SELECT * FROM tblTest;", lngRecAffects)
GetList = lngRecAffects
'
End Function
'adds a new record
Public Function AddNew() As Long
'
Dim strSQL As String
Dim lngRecAffects As Long
strSQL = "INSERT INTO tblTest (FirstName, LastName) VALUES('" & mFirstName & "', '" & _
mLastName & "');"
Call connDB.Execute(strSQL, lngRecAffects)
AddNew = lngRecAffects
'
End Function
'Updates changes
Public Function Update() As Long
'
Dim strSQL As String
Dim lngRecAffects As Long
strSQL = "UPDATE tblTest SET FirstName = '" & mFirstName & "', LastName = '" & mLastName & _
"' WHERE ID = " & m_ID
Call connDB.Execute(strSQL, lngRecAffects)
Update = lngRecAffects
Changed = False
'
End Function
و برای استفاده از اون
Option Explicit
Private mCustomer As Customer
Private Sub Form_Load()
'
Set mCustomer = New Customer
Call mCustomer.RetriveDate(1)
txtFirstName.Text = mCustomer.FirstName
txtLastName.Text = mCustomer.LastName
'
End Sub
Private Sub cmdAddNew_Click()
'
With mCustomer
.FirstName = txtFirstName.Text
.LastName = txtLastName.Text
.AddNew
End With
'
End Sub
Private Sub cmdUpdate_Click()
'
With mCustomer
.FirstName = txtFirstName.Text
.LastName = txtLastName.Text
.Update
End With
'
End Sub
این روش از قبلی بهتره ولی هنوز بهترین روش نیست. در ضمن پروژه شما چی هست!