2013-01-20 37 views
0

我正在使用Vb6和Access 2007.我将记录添加到来自vb6的访问表名称“subjectcode”中。主题代码表的细节如下。如何避免从vb6访问重复条目?

Subjectcode表:标题(学位,分公司,YEAR1,YEAR2,学期,Subjectcode,主旨名称,Theory_Practical,Major_Allied_Elective)值(BSC,computerscience,2001,2004,1,RACS1,VB6程序,理论专业)

注:在上表中的主键是度,科,YEAR1,YEAR2,学期Subjectcode 和我经常条目添加到从VB6访问表中的代码如下:

If degree = "" Or branch1 = "" Or year1 = "" Or year2 = "" Or semester = "" Or subcode.Text = "" Or subname.Text = "" Or theory.Text = "" Or major.Text = "" Then 
    MsgBox "Fields can't be empty ! All are mandatory!" 
    Else 
    rs.Open "select * from subjectcode", con, 1, 3 
    rs.AddNew 
    rs!degree = degree 
    rs!branch = branch1 
    rs!year1 = year1 
    rs!year2 = year2 
    rs!semester = semester 
    rs!Subjectcode = subcode.Text 
    rs!Subjectname = subname.Text 
    rs!Theory_Practical = theory.Text 
    rs!Major_Allied_Elective = major.Text 
    rs.Update 
    MsgBox "Successfully Saved !", vbOKOnly + vbInformation, "info" 
    rs.Close 
    End If 

而该添加窗体的vb6的屏幕截图如下:http://tinypic.com/r/w7c7if/6 该记录已添加当相同的条目不存在时。如果记录已经存在,应该说“记录已存在”,我不知道该怎么做。请你给我想法。

回答

3

编写保存方法以保存您的记录,以及在保存数据之前查询数据库并检查现有记录的方法。

Public Sub SaveSubjectCode(ByVal vDegree As String, ByVal vBranch As String, ByVal vYear1 As Integer, ByVal vYear2 As Integer, ByVal vSemester As Integer, ByVal Subjectcode...) 

    If (DoesRecordExist(vDegree, vBranch, vYear1, vYear2, vSemester, vSubjectcode) = True Then 
     ' Warn the user 
     MessageBox("I'm sorry Dave I can't do that. The record already exists.") 
    Else 
     ' Save the record 
    End If 

End Sub 

Private Function DoesRecordExist(ByVal vDegree as String, ByVal vBranch As String, ByVal vYear1 As Integer, ByVal vYear2 As Long, ByVal vSemester As Integer, ByVal vSubjectcode As String) As Boolean 

    RecordSet = query 'Query the database for the existing record 
    If RecordSet.BOF And RecordSet.EOF Then 
     DoesRecordExist = False 
    Else 
     DoesRecordExist = True 
    End If 

End Function 

此外,要避免选择*查询选择每一条记录,除非你真的需要它,因为它很可能是缓慢的,并获得尽可能的记录数增长较慢。如果你想获得一个记录集只是为了添加一条新记录,你可以包含一个不返回任何记录的Where子句"select * from subjectcode WHERE 1 = 2, con, adOpenKeyset, adLockOptimistic

+0

非常感谢你更年轻的朋友...是的肯定的朋友,我会避免选择*再次感谢朋友:)查询n –

2

当你在表中创建一个字段时,你指定是否允许重复。然后,有问题的添加或更新引发异常。

的SQL DML的样子:

ALTER TABLE tblCustomers 
    ADD CONSTRAINT CustomerNames UNIQUE 
    ([Last Name], [First Name]) 

还有其他强大的功能,如检查约束,以及:

约束
ALTER TABLE tblInvoices 
    ADD CONSTRAINT CheckAmount 
    CHECK (Amount > 0) 

一个优点是,你的数据库的完整性没有被挟持由可能无法做出健谈的资格预审查询(或无法正确实施)的流氓应用程序。另一个优点是性能提高超过了聊天技术,并且当存在多个更新时,数据库可以在预先查询和更新之间进行更改。

+0

我也使用这种方法以及SQL数据库,但不确定如果Access支持它。尽管我在检查重复项时仍然使用查询方法,所以我不必翻译数据库错误,如果需要,我可以向用户提供有关现有记录的反馈。 – jac

+0

谢谢鲍勃朋友的回复。它也工作过,再次非常感谢你的朋友! –

+0

有时这些事情是情境。例如,一个数据库可能允许某个字段上的dups,但是* not *表示某个程序或某个活动。所以他们都有自己的位置,尽管我认为“探测 - 后 - 帖”是冒险的,除非你使用正确的锁定。 – Bob77