2009-04-22 26 views
7

Tiếp cận thêm một kiểu dữ liệu mới trong phiên bản 2007 - loại tập tin đính kèm. Chúng tôi hiện đang làm việc trên một ứng dụng WinForms với .NET 3.5 (C#) sử dụng cơ sở dữ liệu Access 2007. Chúng tôi muốn có thể thêm tệp đính kèm mới thông qua giao diện WinForms. Tôi không thể định vị bất kỳ thông tin nào về cách chèn hoặc chọn dữ liệu đính kèm với .NET. Tôi đã thử sử dụng DAO (phiên bản 12) nhưng dường như không có phương thức SaveToFile hoặc LoadFromFile được thảo luận ở đây: http://msdn.microsoft.com/en-us/library/bb258184.aspxquản lý lập trình Microsoft Access lĩnh vực đính kèm, đánh máy với NET

Vì vậy, làm cách nào để lấy các tệp đính kèm với .NET?

Trả lời

1

Thú vị câu hỏi. Tôi không sử dụng A2007, nhưng đã cài đặt thời gian chạy, vì vậy tôi đã sử dụng trình duyệt đối tượng Access để xem có gì trong đó. Tôi phát hiện ra điều gì đó thật kỳ quặc - có hai đối tượng FIELD, Field và Field2. Các hàm đính kèm là các thành viên của Field2 nhưng không phải là Field. Vì vậy, đề nghị của tôi sẽ được rằng có lẽ những gì bạn cần làm là chuyển đổi này:

Recordset.Fields("FileData").LoadFromFile(<filename>) 

một cái gì đó như thế này:

Dim rs As DAO.Recordset 
Dim fld2 As DAO.Field2 

Set rs = CurrentDb.OpenRecordset("[SQL]") 
Set fld2 = Recordset.Fields("FileData") 
fld2.LoadFromFile(<filename>) 

rs.Close 
Set fld2=Nothing 

Bây giờ, tôi không biết nếu điều đó sẽ khắc phục sự cố cho bạn, nhưng có vẻ như với tôi rằng với hai đối tượng Field với các thuộc tính/phương thức/thành viên khác nhau, bạn cần phải rõ ràng về đối tượng Field mà bạn đang sử dụng. Đoạn mã ví dụ bạn trích dẫn là đặc biệt để sử dụng trong truy cập và có thể truy cập làm điều gì đó để tự động giải quyết những khác biệt giữa các đối tượng hai (có lẽ nó sử dụng các đối tượng Dòng theo mặc định cho cơ sở dữ liệu phi ACCDB và đối tượng Field2 cho các tập tin ACCDB).

0

Nhìn vào điều này viết lên trên Access team blog Về cơ bản những gì David đang gợi ý với một chút xoắn. Nó đặt đối tượng kiểu Recordset2 bằng giá trị của trường đính kèm. Sau đó gắn thêm một bản ghi vào recordset đó để đặt nội dung tệp vào bản ghi mới đó.

0

Tôi đã đấu tranh để cố gắng và làm điều tương tự. Có một tham chiếu bạn có thể bao gồm trong dự án của bạn vào "Microsoft.Office.Interop.Access.Dao" sẽ giúp bạn có được giao diện Recordset2 và Field2, nhưng không có các lớp thực hiện.

Đó là về như xa như tôi đã nhận được, tôi sẽ đăng một lần nữa/nếu tôi tìm nó ra ...

tôi đã không thể làm việc này trong C#, vì vậy tôi chuyển sang một giải pháp khác. Tôi rất muốn biết làm thế nào để làm điều này mặc dù nếu ai đó con số nó ra.

+0

Hãy thử đủ điều kiện mỗi trường hợp như thế này: --- DAO.DBEngine db = new DAO.DBEngine(); – MasterOfStupidQuestions

5

Cuối cùng tôi đã làm việc này trong C# sử dụng một tham chiếu đến Microsoft.Office.Interop.Access.Dao.

DBEngine dbe = new DBEngine(); 
Database db = dbe.OpenDatabase("C:\\SomeDatabase.accdb", false, false, ""); 
Recordset rs = db.OpenRecordset("SELECT * FROM TableWithAttachmentField", RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic); 
rs.MoveFirst(); 
rs.Edit(); 
Recordset2 rs2 = (Recordset2)rs.Fields["AttachmentFieldName"].Value; 
rs2.AddNew(); 

Field2 f2 = (Field2)rs2.Fields["FileData"]; 

f2.LoadFromFile("C:\\test.docx"); 
rs2._30_Update(); 
rs2.Close(); 

rs._30_Update(); 
rs.Close(); 

Điều này sẽ thêm test.docx vào trường Tệp đính kèm "AttachmentFieldName" trong bảng "TableWithAttachmentField". Một điều cần lưu ý là cố gắng thêm cùng một tệp hai lần sẽ gây ra lỗi.

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