0

Access データベースに挿入しようとしていますが、挿入は成功します (データベースを開くとデータが存在します) が、次のエラーが表示されます。インデックス、主キー、またはリレーションシップの値。重複データを含むフィールドのデータを変更するか、インデックスを削除するか、重複エントリを許可するようにインデックスを再定義してから、やり直してください。」

これは本当に私を混乱させます。何を挿入しても、同じエラーが発生します。また、機能しているのにエラーが発生する理由がわかりません。これが私のコードビハインドです:

Protected Sub Wizard1_FinishButtonClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) Handles Wizard1.FinishButtonClick
    'Collect Data
    Dim myDept = txtDept.Text
    Dim myFirst = txtFirstName.Text
    Dim myLast = txtLastName.Text
    Dim myPrefix = txtCoursePrefix.Text
    Dim myNum = txtCourseNum.Text

    'Define Connection
    Dim myConn As New OleDbConnection
    myConn.ConnectionString = AccessDataSource1.ConnectionString

    'Create commands
    Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, ?, ?, ?, ?)", myConn)

    myIns1.Parameters.AddWithValue("@myDept", myDept)
    myIns1.Parameters.AddWithValue("@myFirst", myFirst)
    myIns1.Parameters.AddWithValue("@myLast", myLast)
    myIns1.Parameters.AddWithValue("@myPrefix", myPrefix)
    myIns1.Parameters.AddWithValue("@myNum", myNum)

    'Execute the commands
    myConn.Open()
    myIns1.ExecuteNonQuery()
End Sub
4

3 に答える 3

0

DBでテストしないとわかりませんが、この行は

Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, ?, ?, ?, ?)", myConn)

次のようにするとよいようです。

Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, '?', '?', '?', ?)", myConn)

つまり、文字列は一重引用符で囲み、数字は引用符なしで送信する必要があります。

それを超えると、この特定の挿入は機能するはずですが、tableCourseと別のテーブルの間に関係があり、参照整合性が関連するテーブルからエラーを生成している可能性があります。

言い換えれば、あなたの「関係」を見てください。

于 2011-01-15T04:17:34.807 に答える
0

MS の指示に従ってテーブルを再シードしてもうまくいきませんでした。古い一意のインデックスを数値フィールドに変更し、まったく新しい一意のインデックスを追加する必要がありました。幸いなことに、そのインデックスは他のテーブルにリンクしていませんでした。そうであれば、大規模なクラスターになっていたでしょう。フィールドに値をインポートしてから、そのフィールドを自動採番に変換して簡単に自動インデックスを作成することはできないからです。

于 2011-08-07T19:39:50.057 に答える
0

私はAccessに慣れていないので、最初はコメントとして投稿しただけです。しかし、この KB 記事は妥当に聞こえます。autonumber フィールドを現在の最大値 +1 に設定する必要があります。

ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1); 

それは試みに値します。とにかくなぜそれが機能するのかわかりません。

于 2011-01-15T01:07:39.313 に答える