0

Vb6 と Access 2007 を使用しています。vb6 からアクセス テーブル名「subjectcode」にレコードを追加しています。件名コード表の詳細は以下の通りです。

Subjectcode table : 見出し(Degree,Branch,Year1,Year2,Semester,Subjectcode,Subjectname,Theory_Practical, Major_Allied_Elective)値(Bsc,computerscience,2001,2004,1,RACS1,Vb6プログラミング,Theory,Major)

注:上記の表の主キーはDegree、Branch、Year1、Year2、Semester、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 の Add フォームのスクリーンショットは次のとおりです。http://tinypic.com/r/w7c7if/6 同じエントリが存在しない場合にレコードが追加されます。レコードが既に存在する場合は、「レコードは既に存在します」と表示され、その方法がわかりません。アイデアを教えてください。

4

2 に答える 2

3

レコードを保存する save メソッドと、データを保存する前にデータベースにクエリを実行して既存のレコードを確認するメソッドを記述します。

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

また、本当に必要な場合を除き、すべてのレコードを選択する Select * クエリは使用しないでください。処理が遅くなる可能性があり、レコード数が増えると遅くなります。新しいレコードを追加するためだけにレコードセットを取得したい場合は、レコードを返さない Where 句を含めることができます"select * from subjectcode WHERE 1 = 2, con, adOpenKeyset, adLockOptimistic

于 2013-01-20T04:40:58.357 に答える
2

テーブルにフィールドを作成するときは、重複を許可するかどうかを指定します。次に、問題のある追加または更新によって例外が発生します。

SQL DML は次のようになります。

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

また、チェック制約など、他にも強力な機能があります。

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

制約の利点の 1 つは、おしゃべりな事前修飾クエリを実行できない (または適切に実装できない) 不正なアプリケーションによって、データベースの整合性が人質に取られないことです。もう1つは、おしゃべりな手法に対するパフォーマンスの向上と、複数のアップデーターがある場合、データベースが事前修飾クエリと更新の間で変更される可能性があるという事実です。

于 2013-01-21T05:14:26.960 に答える