你看看是不是你把记录集的光标移到了记录集的首尾位置了试试在你添加记录之前 if not adodc1.recordset.eof and not adodc1.recordset.bof adodc1.addnew ...... adodc1.update end if
我有将记录移到最后然后再在datagrid中添加记录。 帮我看看吧,我的这段程序是其他地方抄袭过来的,我有些看不懂。 主要是下面的三个方法 1.Adodc1_WillChangeRecord 2.cmdAdd 3.cmdDelete 希望越详细越好!! Private Sub Form_Load() Cnstring = "DRIVER={MySQL ODBC 3.51 Driver};" _ & "SERVER=143.116.229.201;" _ & " DATABASE=cable;" _ & "UID=root;PWD=; OPTION=35" '使用MySQL数据库 condition = "select * from usermng " rs.Open condition, Cnstring, adOpenKeyset, 2 Adodc1.ConnectionString = Cnstring Adodc1.CommandType = adCmdUnknown Adodc1.RecordSource = condition Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 DataGrid1.ReBind DataGrid1.Refresh End SubPrivate Sub Adodc1_Movecomplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) Adodc1.Caption = "Record: " & CStr(Adodc1.Recordset.AbsolutePosition) End SubPrivate Sub Form_Unload(Cancel As Integer) Screen.MousePointer = vbDefault rs.Close Set rs = Nothing Unload Me End SubPrivate Sub Adodc1_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean) '错误处理程序代码置于此处 '想要忽略错误,注释掉下一行 '想要捕获它们,在此添加代码以处理它们 MsgBox "Data error event hit err:" & Description End Sub Private Sub Adodc1_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) '验证代码置于此处 '下列动作发生时该事件被调用 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 Sub Private Sub cmdAdd_Click() On Error GoTo AddErr Adodc1.Recordset.MoveLast 'Adodc1的记录移到最后,在最后面加一条记录 Adodc1.Recordset.AddNew DataGrid1.SetFocus SendKeys "{down}" Adodc1.Recordset.Update Exit Sub AddErr: MsgBox Err.Description End Sub Private Sub cmdDelete_Click() On Error GoTo DeleteErr Dim Msg, Style, Title, Help, Ctxt, Response, MyString Msg = "This Action will delete current record,Do you want to continue ?" ' 定义信息。 Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定义按钮。 Title = "MsgBox Demonstration" ' 定义标题。 Help = "DEMO.HLP" ' 定义帮助文件。 Ctxt = 1000 ' 定义标题 ' 上下文。 ' 显示信息。 Response = MsgBox(Msg, Style, Title, Help, Ctxt) If Response = vbYes Then ' 用户按下“是”。 With Adodc1.Recordset .Delete .MoveNext If .EOF Then .MoveLast End With End If Exit Sub DeleteErr: MsgBox Err.Description End Sub Private Sub cmdRefresh_Click() '只有多用户应用程序需要 On Error GoTo RefreshErr Adodc1.Refresh '刷新Adodc1的记录 Exit Sub RefreshErr: MsgBox Err.Description End Sub Private Sub cmdUpdate_Click() On Error GoTo UpdateErr Adodc1.Recordset.UpdateBatch adAffectAll '更新所有的记录 Exit Sub UpdateErr: MsgBox Err.Description End Sub Private Sub cmdClose_Click() Unload Me End Sub
if not adodc1.recordset.eof and not adodc1.recordset.bof
adodc1.addnew
......
adodc1.update
end if
帮我看看吧,我的这段程序是其他地方抄袭过来的,我有些看不懂。
主要是下面的三个方法
1.Adodc1_WillChangeRecord
2.cmdAdd
3.cmdDelete
希望越详细越好!!
Private Sub Form_Load()
Cnstring = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=143.116.229.201;" _
& " DATABASE=cable;" _
& "UID=root;PWD=; OPTION=35" '使用MySQL数据库
condition = "select * from usermng "
rs.Open condition, Cnstring, adOpenKeyset, 2
Adodc1.ConnectionString = Cnstring
Adodc1.CommandType = adCmdUnknown
Adodc1.RecordSource = condition
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.ReBind
DataGrid1.Refresh
End SubPrivate Sub Adodc1_Movecomplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
Adodc1.Caption = "Record: " & CStr(Adodc1.Recordset.AbsolutePosition)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
rs.Close
Set rs = Nothing
Unload Me
End SubPrivate Sub Adodc1_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)
'错误处理程序代码置于此处
'想要忽略错误,注释掉下一行
'想要捕获它们,在此添加代码以处理它们
MsgBox "Data error event hit err:" & Description
End Sub
Private Sub Adodc1_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'验证代码置于此处
'下列动作发生时该事件被调用
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 Sub
Private Sub cmdAdd_Click()
On Error GoTo AddErr
Adodc1.Recordset.MoveLast 'Adodc1的记录移到最后,在最后面加一条记录
Adodc1.Recordset.AddNew
DataGrid1.SetFocus
SendKeys "{down}"
Adodc1.Recordset.Update
Exit Sub
AddErr:
MsgBox Err.Description
End Sub
Private Sub cmdDelete_Click()
On Error GoTo DeleteErr
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "This Action will delete current record,Do you want to continue ?" ' 定义信息。
Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定义按钮。
Title = "MsgBox Demonstration" ' 定义标题。
Help = "DEMO.HLP" ' 定义帮助文件。
Ctxt = 1000 ' 定义标题
' 上下文。
' 显示信息。
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then ' 用户按下“是”。
With Adodc1.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
End If
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub
Private Sub cmdRefresh_Click()
'只有多用户应用程序需要
On Error GoTo RefreshErr
Adodc1.Refresh '刷新Adodc1的记录
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub
Private Sub cmdUpdate_Click()
On Error GoTo UpdateErr
Adodc1.Recordset.UpdateBatch adAffectAll '更新所有的记录
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
我的错误在我添加时发生:
"BOF 或EOF中有一个“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。"
这个问题我已经通过手动添加记录已经解决了.
但是现在发现我的数据源好像有些问题,它没有记录结束的符号"*"、而且最后的一条记录也不是空记录,所以当我添加记录时系统指向的是我有用的一条记录,似乎是要我更改记录.
SoHo_Andy(冰):
我想问一下数据库的实际记录的情况是怎样!我怎样才能添加一条空记录到数据库里!谢谢了!