Tuyên bố chèn của tôi là:Tại sao MS Access 2007 không cho phép chèn hàng, nhưng sau đó cho phép chèn vào lần chèn tiếp theo?
INSERT INTO myTable (inst_id,user_id,app_id,type,accessed_on)
VALUES (3264,2580,'MyApp','Renew',Now);
... trong đó tất cả giá trị được định dạng chính xác. Bảng có các trường ở trên và một trường khác, trường khóa tự động gia tăng dài int. Các khóa ngoại là 'inst_id', 'user_id' và 'app_id'.
Tôi nhận được lỗi này từ Access:
... và các lỗi sau từ VS 2005 khi nó lỗi ra:
System.Data.OleDb.OleDbException: Những thay đổi mà bạn yêu cầu vào bảng không thành công vì chúng sẽ tạo các giá trị trùng lặp trong chỉ mục, khóa chính hoặc mối quan hệ. Thay đổi dữ liệu trong trường hoặc trường mà chứa dữ liệu trùng lặp, xóa chỉ mục hoặc xác định lại chỉ mục để cho phép mục trùng lặp và thử lại.
Khi thực hiện truy vấn chèn này, tôi có thể xem xét cơ sở dữ liệu và xem từng giá trị khóa ngoại trong bảng tương ứng và đã trong nhiều tháng (cho ví dụ cụ thể tôi đang sử dụng). Các trường này cũng được đặt để tôi có thể có bản sao, vì vậy đó không phải là vấn đề. Các cuộc gọi có tính chất này trong các bảng khác hoạt động tốt. Tôi không cần phải cung cấp giá trị khóa tự động gia tăng trong truy vấn chèn, nó tự động thêm nó cho tôi (giống như nó nên).
Điều kỳ lạ là nếu tôi làm điều này trong mã của tôi:
try
{
//Execute the query here...
}
catch
{
//Execute the same query again
}
... hoặc nếu tôi chỉ cần cố gắng và thực hiện điều này trong Access hai lần, nó hoạt động.
Có ai đã từng gặp điều này trước đây không? Một lần nữa, kiểu chèn này hoạt động cho các bảng khác, tất cả các khoá ngoại đều có trong các bảng tương ứng, khóa chính của bảng này được đặt là 'Tự động tăng' và tất cả các trường (ngoài trường khóa chính) đặt để cho phép trùng lặp.
Bất kỳ ý tưởng nào?
EDIT: Khóa lớn nhất trước khi chèn: 343085
. Khóa lớn nhất sau khi chèn: 343086
. Định dạng là:
id: AutoNumber (Field Size=Long Interger, New Values=Increment, Indexed=Yes - No Duplicates)
inst_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)
user_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)
app_id: Text (Field Size=255, Required=Yes, Indexed=Yes - Duplicates OK)
type: Text (Field Size=50, Required=Yes, Indexed=No)
accessed_on: Date/Time (Default Value=Now(), Required=Yes, Indexed=No)
Để làm cho liên kết dễ đọc, bạn nên sử dụng đánh dấu SO không phải html để hiển thị liên kết, v.v. – Mark
Tôi không biết về Access cụ thể, nhưng điều này có thể xảy ra trong một số cơ sở dữ liệu nếu bạn có trình kích hoạt chèn hàng bổ sung mỗi chèn với một giá trị rõ ràng cho phím tăng tự động. Điều tra các khả năng như vậy, và đăng cấu trúc của bảng cùng với bất cứ điều gì có liên quan, và chọn khóa chính lớn nhất trước khi chèn và sau khi chèn và dán chúng ở đây quá. –
Điều gì sẽ xảy ra đối với các vụ hành quyết thứ ba/thứ tư? Nó chỉ là lần thực hiện đầu tiên thất bại hay nó là lần thứ hai? – Whatsit