2009-06-05 37 views
6

Tôi đang chiến đấu với một nhà thiết kế VS2008 DataSet ngoan cố, có vẻ như vậy. Tôi đã cố gắng làm những gì có vẻ là một giải pháp tập dữ liệu 2 bảng đơn giản, trong đó một bảng đơn giản là ý nghĩa văn bản cho một giá trị số nguyên được lưu trữ trong bảng khác. thiết kế dữ liệu cơ bản 101.Điều gì đã xảy ra với các lệnh Cập nhật và Xóa của TableAdapter?

Table1 
CharField1 
CharField2 
IntForeignKeyField1 
etc 

Table2 
IntPrimaryKey1 
ValueForKeyField 

Điều đó không thực sự ảnh hưởng đến vấn đề tôi đang gặp khó, tôi không tin, vì tôi không muốn làm bất cứ điều gì nhưng đọc các giá trị từ bảng thứ hai vì vậy tôi có thể chọn chúng trong một DataGridViewComboBoxColumn trong máy khách - Tôi sẽ không bao giờ chỉnh sửa chúng trên máy khách. Nhưng tôi lạc đề.

Vì điều này sống trong dịch vụ web và tôi muốn có tập dữ liệu được nhập mạnh cho khách hàng của dịch vụ web này, tôi quyết định sử dụng Trình thiết kế dữ liệu để xây dựng TableAdapters và tất cả hệ thống ống nước. làm việc và dễ bảo trì hơn.

Vì vậy, tôi đã tạo các hộp đẹp và chỉnh sửa các câu lệnh chọn, hướng dẫn người thiết kế tạo tất cả các lệnh Chèn, Cập nhật và Xóa cho bộ điều hợp bảng để sử dụng. Nó vui vẻ bắt buộc, thông báo với tôi rằng mọi thứ đã được thực hiện như tôi đã hỏi.

Khi tôi cố gắng sử dụng câu lệnh Cập nhật, tuy nhiên, tôi gặp lỗi khi không có câu lệnh Cập nhật hợp lệ! Sau khi một số tìm kiếm không có lợi cho những người có những tai ương tương tự trên web, tôi đã đào sâu vào XML cho tập dữ liệu. Chắc chắn, không có tuyên bố Cập nhật và không có tuyên bố Xóa.

Tôi đã thử xóa hoàn toàn và tạo lại DataSet từ dự án, với cùng kết quả. Không có báo cáo Cập nhật hoặc Xóa nào được tạo, mặc dù nó đã được báo cáo là xong.

Tôi đã kết thúc việc tạo báo cáo XML cập nhật bằng tay, bằng cách kiểm tra một tập dữ liệu được thiết kế khác từ một dự án khác, do đó, dịch vụ web hiện đang hoạt động. Tuy nhiên, tôi không có niềm tin gì về những thay đổi của tôi sẽ kéo dài thông qua một bản chỉnh sửa được khởi xướng từ nhà thiết kế, và tôi băn khoăn là tại sao nó không hoạt động. Ý tưởng nào?

Thanks cho bất kỳ thông tin phản hồi, Dave

+1

Từ tổng số nhận xét, tôi lấy nó điều này đã không xảy ra với bất cứ ai khác, vì vậy tôi có một lỗi thực sự hoặc trục trặc trong việc thực hiện VS2008 của tôi. Tuyệt quá. Và tôi cũng nhận được huy hiệu tumbleweed 'frickin' cho đặc quyền này. – DaveN59

Trả lời

13

nó có thể là không có khóa chính độc đáo được định nghĩa cho bảng?

+0

Doh! Cảm ơn bạn đã chỉ ra điều hiển nhiên ... – DaveN59

+0

Đừng cảm thấy điên rồ về nó, tôi chỉ làm điều tương tự: (Thiết lập PK trong DB cố định cùng một vấn đề cho tôi. – sMaN

0

Tôi gặp vấn đề tương tự. TableAdapter không hoạt động đúng khi sử dụng các trường từ nhiều bảng. Tôi đã có thể tạo lại giải pháp từ bài viết sau: "Cập nhật TableAdapter để sử dụng kết nối".

http://www.asp.net/learn/data-access/tutorial-69-vb.aspx

Giải pháp bao gồm việc tạo thủ tục Chọn/Cập nhật/Chèn/Xóa của riêng bạn. Thật không may, trong khi tôi đã có thể làm theo các giải pháp cho một cơ sở dữ liệu sqlserver, tôi vẫn không thể làm cho nó hoạt động cho cơ sở dữ liệu Access cục bộ của tôi. Tất cả các tùy chọn thủ tục lưu trữ được chuyển sang màu xám.

Chúc may mắn!

+0

Cảm ơn bạn đã liên kết đến bài viết. Tất cả những gì tôi phải làm là xác định các khóa chính và mối quan hệ trong nhà thiết kế SQL Studio, và VS thích nó tốt. Tôi không biết dữ liệu của bạn trông như thế nào, nhưng VS có thể nhận được khá nhiều thông tin từ SQL Server - hay không, rõ ràng là – DaveN59

0

Tôi nghĩ tôi đã tìm được giải pháp. 1) Tạo TableAdapter cho bảng chính và sao chép thủ tục TableAdapter UPDATE (được lưu trữ trong cửa sổ thuộc tính TableAdapter) 2) Thay đổi truy vấn SELECT trong "TableAdapter Configuration Wizard Query Builder" để bao gồm các trường từ cả hai bảng và tham gia. 3) Dán thủ tục UPDATE cũ vào thủ tục cập nhật TableAdapter trống bây giờ. 4) Sau khi tạo DataGridView, bạn có thể hiển thị các trường từ cả hai bảng và cập nhật bảng chính. Lặp lại các bước cho các lệnh INSERT & DELETE.

Nếu mục tiêu của bạn là cập nhật cả hai bảng, hãy thử xem thông tin cập nhật TableAdapter Parent/Child trên web. Đây là một liên kết tốt: http://blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx

+0

Quá nhiều công việc! :) Đó chính là những gì tôi đã làm để làm cho nó hoạt động. Tuy nhiên, nó hoạt động trơn tru và sạch hơn, mà không cần thay đổi bất cứ điều gì, khi tôi xác định các khóa chính và quan hệ trong cơ sở dữ liệu - VS2008 đã tìm ra cách thực hiện những gì cần thiết từ thông tin đó, không có sự can thiệp thủ công ... – DaveN59

+0

Bạn có giải pháp này để làm việc cho MS Access? Tôi đang gặp vấn đề chính xác này và tôi đang cố gắng làm cho phương pháp của bạn hoạt động. –

0

Chỉ cần chạy vào cùng một vấn đề cơ bản. Tôi đã nói với nhà thiết kế dữ liệu để tạo tất cả các câu lệnh chèn, cập nhật, xóa. Khi tôi cập nhật một trong các bảng, không có bản cập nhật nào. Cuối cùng tôi đã đi vào tệp .xsd được tạo bởi nhà thiết kế dữ liệu (chỉ cần nhấp đúp để mở nó trong IDE). Sau đó tôi nhấp chuột phải vào thanh tiêu đề của bảng có vấn đề và chọn tùy chọn cấu hình. Từ đó tôi nhấp vào nút 'Tuỳ chọn Nâng cao', sau đó chọn tuỳ chọn 'Tạo Chèn, Cập nhật, Xóa Báo cáo'. Sau khi nhấn OK, tôi đã kiểm tra dự án của mình và bản cập nhật đã có sẵn cho bộ điều hợp bảng.

0

Điều George đề xuất là tuyệt vời. Chúng tôi cần bật tùy chọn 'Tạo Chèn, Cập nhật, Xóa Báo cáo'.

Tuy nhiên trong VS2013, việc sử dụng các vòng loại bảng không cần thiết trong câu lệnh selete có thể làm rối loạn IDE và chỉ tạo ra các câu lệnh SELECT và INSERT. Chỉ cần loại bỏ vòng loại này và nó sẽ ổn thôi. Hãy chắc chắn rằng bạn có một PK duy nhất.

Nếu bạn cần sử dụng điền phức tạp như áp dụng bộ lọc để trả về một số hàng nhất định của bảng, bạn có thể điền bảng dữ liệu bằng câu lệnh chọn cụ thể trong sự kiện tải biểu mẫu. Theo cách đó, các câu lệnh INSERT, UPDATE và DELETE được tạo ra sẽ vẫn hoạt động, bởi vì DELETE và UPDATE hoạt động trên PK.

Các vấn đề liên quan