您提出这么好的问题是CSDN的福气,也是大家的福气,尽管没人回答得了,但您总不至于不结贴吧?既然一个回答的都没有,您就无法结贴了。我帮你UP吧,你只要在结贴的时候给我所有的分。万一碰上高人能回答了您的问题,那时候给我一半就可以了。
解决方案 »
- 偷偷的问:Vb 中的PropertyPage 如何使用啊?
- 关于使用inno setup 5
- 怎么样释放集合中的对象
- 从VB转VC,和VB版的朋友们告别,散尽最后80分,也祝做VB的朋友:一路走好!
- 请教动态建数据库表的问题
- 发挥你的创造力,我给你送高分!
- 问几个问题,先来先得分(三)。
- 关于VB访问oracle数据库表结构得问题,高手请进!在线等候!!!!!
- win7下vba生成文件,文件名无法生成,详述见内容
- 关于DataEnvironment 控件不能查询英语和中文字符串的问题
- 仅仅征集方案送分,实现我在帖子中描述的功能,关键字 access 网络 连接 win2000 win98
- ado连access问题
与
Public Sub ReBind()
Dim oText As Variant
Set BookCLS = New Book
重复,但这不是主要的2.在
Public Sub ReBind()
Dim oText As Variant
Set BookCLS = New Book
For Each oText In Me.Text1
oText.DataMember = "Book"
Set oText.DataSource = BookCLS
Next
End Sub
中你只设置了每一个textbox的datasource and datamember,但没设置datafield
你不应该在类里,而应该在form 的 delaration里写那些函数
类里应该写一些api操作,还有一些函数
窗体代码为:
Option Explicit
Private WithEvents PrimaryCLS As clsBook
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As BooleanPrivate Sub Form_Load()
Set PrimaryCLS = New clsBook Dim oText As TextBox
'Bind the text boxes to the data provider
For Each oText In Me.txtFields
oText.DataMember = "Primary"
Set oText.DataSource = PrimaryCLS
Next
End SubPrivate Sub Form_Resize()
On Error Resume Next
lblStatus.Width = Me.Width - 1500
cmdNext.Left = lblStatus.Width + 700
cmdLast.Left = cmdNext.Left + 340
End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If mbEditFlag Or mbAddNewFlag Then Exit Sub Select Case KeyCode
Case vbKeyEscape
cmdClose_Click
Case vbKeyEnd
cmdLast_Click
Case vbKeyHome
cmdFirst_Click
Case vbKeyUp, vbKeyPageUp
If Shift = vbCtrlMask Then
cmdFirst_Click
Else
cmdPrevious_Click
End If
Case vbKeyDown, vbKeyPageDown
If Shift = vbCtrlMask Then
cmdLast_Click
Else
cmdNext_Click
End If
End Select
End SubPrivate Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
End SubPrivate Sub PrimaryCLS_MoveComplete()
'This will display the current record position for this recordset
lblStatus.Caption = "Record: " & CStr(PrimaryCLS.AbsolutePosition)
End SubPrivate Sub cmdAdd_Click()
On Error GoTo AddErr
PrimaryCLS.AddNew
lblStatus.Caption = "Add record"
mbAddNewFlag = True
SetButtons False Exit Sub
AddErr:
MsgBox Err.Description
End SubPrivate Sub cmdDelete_Click()
On Error GoTo DeleteErr
PrimaryCLS.Delete
Exit Sub
DeleteErr:
MsgBox Err.Description
End SubPrivate Sub cmdRefresh_Click()
'This is only needed for multi user apps
On Error GoTo RefreshErr
PrimaryCLS.Requery
Exit Sub
RefreshErr:
MsgBox Err.Description
End SubPrivate Sub cmdEdit_Click()
On Error GoTo EditErr lblStatus.Caption = "Edit record"
mbEditFlag = True
SetButtons False
Exit SubEditErr:
MsgBox Err.Description
End Sub
Private Sub cmdCancel_Click()
On Error Resume Next PrimaryCLS.Cancel
SetButtons True
End SubPrivate Sub cmdUpdate_Click()
On Error GoTo UpdateErr PrimaryCLS.Update
SetButtons True
Exit Sub
UpdateErr:
MsgBox Err.Description
End SubPrivate Sub cmdClose_Click()
Unload Me
End SubPrivate Sub cmdFirst_Click()
On Error GoTo GoFirstError PrimaryCLS.MoveFirst
mbDataChanged = False Exit SubGoFirstError:
MsgBox Err.Description
End SubPrivate Sub cmdLast_Click()
On Error GoTo GoLastError PrimaryCLS.MoveLast
mbDataChanged = False Exit SubGoLastError:
MsgBox Err.Description
End SubPrivate Sub cmdNext_Click()
On Error GoTo GoNextError PrimaryCLS.MoveNext
Exit Sub
GoNextError:
MsgBox Err.Description
End SubPrivate Sub cmdPrevious_Click()
On Error GoTo GoPrevError PrimaryCLS.MovePrevious
Exit SubGoPrevError:
MsgBox Err.Description
End SubPrivate Sub SetButtons(bVal As Boolean)
cmdAdd.Visible = bVal
cmdUpdate.Visible = Not bVal
cmdCancel.Visible = Not bVal
cmdDelete.Visible = bVal
cmdClose.Visible = bVal
cmdRefresh.Visible = bVal
cmdNext.Enabled = bVal
cmdFirst.Enabled = bVal
cmdLast.Enabled = bVal
cmdPrevious.Enabled = bVal
End Sub类模块为:
Option ExplicitDim WithEvents adoPrimaryRS As Recordset
Private DoingRequery As Boolean
Public Event MoveComplete()Private Sub Class_Initialize()
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDASQL;driver={SQL Server};server=asd;uid=sa;pwd=sa;database=rental;" Set adoPrimaryRS = New Recordset
adoPrimaryRS.Open "select BookId,Description,Price,Rental,TotalCopies,AvailableCopies from Book", db, adOpenStatic, adLockOptimistic DataMembers.Add "Primary"
End SubPrivate Sub Class_GetDataMember(DataMember As String, Data As Object)
Select Case DataMember
Case "Primary"
Set Data = adoPrimaryRS
End Select
End SubPrivate Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
RaiseEvent MoveComplete
End SubPrivate Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean
Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select If bCancel Then adStatus = adStatusCancel
End SubPublic Property Get EditingRecord() As Boolean
EditingRecord = (adoPrimaryRS.EditMode <> adEditNone)
End PropertyPublic Property Get AbsolutePosition() As Long
AbsolutePosition = adoPrimaryRS.AbsolutePosition
End PropertyPublic Sub AddNew()
adoPrimaryRS.AddNew
End SubPublic Sub Delete()
adoPrimaryRS.Delete
MoveNext
End SubPublic Sub Requery()
adoPrimaryRS.Requery
DataMemberChanged "Primary"
End SubPublic Sub Update()
With adoPrimaryRS
.UpdateBatch adAffectAll
If .EditMode = adEditAdd Then
MoveLast
End If
End With
End SubPublic Sub Cancel()
With adoPrimaryRS
.CancelUpdate
If .EditMode = adEditAdd Then
MoveFirst
End If
End With
End SubPublic Sub MoveFirst()
adoPrimaryRS.MoveFirst
End SubPublic Sub MoveLast()
adoPrimaryRS.MoveLast
End SubPublic Sub MoveNext()
If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveLast
End If
End SubPublic Sub MovePrevious()
If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious
If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveFirst
End If
End Sub