当我尝试使用VB6更新Access表记录时,我收到重复值

时间:2014-05-29 08:10:37

标签: vb6

我仍然是vb6 id的初学者,喜欢学习和提高,iv一直试图解决这个问题。任何建议或帮助将不胜感激。谢谢。

我的代码是为了做三件事。首先是检查表是否具有空值并创建一个主记录为EnrolmentID的新记录,其次是当它与先前记录主键匹配时更新该值。最后,如果主键与任何当前记录不匹配,则创建新记录。

好的就是,当我添加新值时,会创建新记录(很好),但是当我尝试更新当前记录时。它只更新表中的FIRST记录,而不更新它下面的第二个记录或任何其他记录。如果我在第一个之后更新任何记录 它重复记录。

我知道这是因为我一直收到这个错误:

您向表格请求的更改未成功,因为它们会在索引,字段...

中创建重复值

当我从表中删除自动增量字段时,它开始出现 使EnrolmentID成为主键。我这样做是因为它一直显示重复 记录。

这是我的代码:

'Checks of the table has a null value then adds a new record

If Combo1.Text = "Boarding Fee Term One" And Text33.Text <> "0.00" Then

If lol.RecordCount = 0 Then                                        
lol.AddNew                                                      
    lol.Fields("EnrolmentID") = frmStudentFees.AcctNo           
    lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
    lol.Fields("TransDate") = Date
    lol.Fields("CashierCompletename") = CurrentUser.FullName
    lol.Fields("TermOne") = Text33.Text
    sumBOne = (boardingfee) - (Text33.Text)
    lol.Fields("BalanceOne") = sumBOne
lol.Update
Else

'Checks if ID matches any of the existing records and updates                                                                                                                                                                       
If lol.Fields("EnrolmentID") = frmStudentFees.AcctNo Then

    If IsNull(lol.Fields("TermOne")) Then
    GetBOne = 0
    Else
    GetBOne = lol.Fields("TermOne")
    End If

    SumOf1 = (GetBOne) + (Text33.Text)
    sumBOne = (boardingfee) - (SumOf1)

    lol.Fields("EnrolmentID") = frmStudentFees.AcctNo
    lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
    lol.Fields("TransDate") = Date
    lol.Fields("CashierCompletename") = CurrentUser.FullName
    lol.Fields("TermOne") = SumOf1

    lol.Fields("BalanceOne") = sumBOne
    lol.Update

'Checks if there are any existing records that match the ID nun are available creates
'a new record.
ElseIf Not lol.Fields("EnrolmentID") = frmStudentFees.AcctNo Then

lol.addnew
    lol.Fields("EnrolmentID") = frmStudentFees.AcctNo            
    lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
    lol.Fields("TransDate") = Date
    lol.Fields("CashierCompletename") = CurrentUser.FullName
    lol.Fields("TermOne") = Text33.Text
    sumBOne = boardingfee - Text33
    lol.Fields("BalanceOne") = sumBOne
lol.Update

 End If

 End If
End If

3 个答案:

答案 0 :(得分:0)

您需要使用&#39; select&#39; sql查询用于选择表中包含您感兴趣的学生ID的记录&#39; frmStudentFees.AcctNo&#39;

dim s1 as string 
s1 = "select from tablename where enrolmentid = '" & frmStudentFees.AcctNo & "'"
dim rs as recordset 
set rs = db.openrecordset(s1)
if rs.bof <> true or myrec.eof <> true then
   rs.movefirst
   rs.edit

      lol.Fields("TermOne") = SumOf1
      'etc

   rs.update

else
   rs.addnew

      lol.Fields("TermOne") = SumOf1
      'etc

   rs.update
end if

答案 1 :(得分:0)

Dim db As DAO.Database
Dim rs As Recordset

strTwo = "Select * From tblPayedAmount"

strOne = "Select * From tblPayedAmount where enrolmentid = '" & frmStudentFees.AcctNo &"'"

lol.Open strTwo, con, 2, 3

Set rs = db.OpenRecordset(strOne) '<<------THE ERROR HIGHLIGNTS THIS LINE

If Combo1.Text = "Boarding Fee Term One" And Text33.Text <> "0.00" Then

If lol.RecordCount = 0 Then                    
lol.AddNew                                                      
    lol.Fields("EnrolmentID") = frmStudentFees.AcctNo          
    lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
    lol.Fields("TransDate") = Date
    lol.Fields("CashierCompletename") = CurrentUser.FullName
    lol.Fields("TermOne") = Text33.Text
    sumBOne = (boardingfee) - (Text33.Text)
    lol.Fields("BalanceOne") = sumBOne
lol.Update
Else

If rs.BOF <> True Or lol.EOF <> True Then

   rs.MoveFirst
   rs.Edit

    If IsNull(lol.Fields("TermOne")) Then
    GetBOne = 0
    Else
    GetBOne = lol.Fields("TermOne")
    End If

    SumOf1 = (GetBOne) + Val(Text33.Text)
    sumBOne = (boardingfee) - (SumOf1)


    lol.Fields("EnrolmentID") = frmStudentFees.AcctNo
    lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
    lol.Fields("TransDate") = Date
    lol.Fields("CashierCompletename") = CurrentUser.FullName
    lol.Fields("TermOne") = SumOf1

    lol.Fields("BalanceOne") = sumBOne

    rs.Update


Else

    rs.AddNew

    lol.Fields("EnrolmentID") = frmStudentFees.AcctNo             '   new field in the table.
    lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
    lol.Fields("TransDate") = Date
    lol.Fields("CashierCompletename") = CurrentUser.FullName
    lol.Fields("TermOne") = Text33.Text
    sumBOne = boardingfee - Text33
    lol.Fields("BalanceOne") = sumBOne

    rs.Update

  End If

 End If
End If

答案 2 :(得分:0)

strOne = "Select * From tblPayedAmount Where enrolmentid = '" & frmStudentFees.AcctNo &"'"

lol.Open strOne, con, 2, 3 

If Combo1.Text = "Boarding Fee Term One" And Text33.Text <> "0.00" Then

If lol.RecordCount = 0 Then 

lol.AddNew                                                      
lol.Fields("EnrolmentID") = frmStudentFees.AcctNo          
lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
lol.Fields("TransDate") = Date
lol.Fields("CashierCompletename") = CurrentUser.FullName
lol.Fields("TermOne") = Text33.Text
sumBOne = (boardingfee) - (Text33.Text)
lol.Fields("BalanceOne") = sumBOne
lol.Update

Else

If lol.BOF <> True Or lol.EOF <> True Then

lol.MoveFirst


If IsNull(lol.Fields("TermOne")) Then
GetBOne = 0
Else
GetBOne = lol.Fields("TermOne")
End If

SumOf1 = (GetBOne) + Val(Text33.Text)
sumBOne = (boardingfee) - (SumOf1)


lol.Fields("EnrolmentID") = frmStudentFees.AcctNo
lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
lol.Fields("TransDate") = Date
lol.Fields("CashierCompletename") = CurrentUser.FullName
lol.Fields("TermOne") = SumOf1

lol.Fields("BalanceOne") = sumBOne

lol.Update


Else

lol.AddNew

lol.Fields("EnrolmentID") = frmStudentFees.AcctNo             'new field in the table.
lol.Fields("StudentID") = frmStudentFees.txtstudID.Text
lol.Fields("TransDate") = Date
lol.Fields("CashierCompletename") = CurrentUser.FullName
lol.Fields("TermOne") = Text33.Text
sumBOne = boardingfee - Text33
lol.Fields("BalanceOne") = sumBOne

lol.Update

End If

End If
End If