• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

Quach Tan Quang
Bài viết: 3
Ngày tham gia: T.Tư 24/02/2010 8:45 pm

Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi Quach Tan Quang » T.Sáu 06/04/2018 2:29 pm

Mình có 1 file access có đuôi là abc.accdb trong đó có 1 table gồm các field như Maso, Tentailieu là kiểu string, và 1 field FileDinhKem là kiểu Attachment. Mình tạo 1 from trong vb để thêm dữ liệu vào table này nhưng không biết viết như thế nào để thêm được các file đã chọn trong hộp thoại open vào trong field FileDinhKem. Nhờ các anh, chị giúp dùm. Cảm ơn.



Hình đại diện của người dùng
nhatlinh0207
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 428
Ngày tham gia: T.Tư 15/08/2012 7:54 pm
Has thanked: 58 time
Been thanked: 51 time

Re: Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi nhatlinh0207 » T.Sáu 06/04/2018 5:34 pm

Không nên làm FileDinhKem là Attachment. FileDinhKem chỉ nên là string lưu đường dẫn file thôi

Quach Tan Quang
Bài viết: 3
Ngày tham gia: T.Tư 24/02/2010 8:45 pm

Re: Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi Quach Tan Quang » T.Ba 10/04/2018 8:10 am

Lưu đường dẫn nếu lỡ file đó bị xóa thì đâu mở được phải không bạn.

Hình đại diện của người dùng
nhatlinh0207
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 428
Ngày tham gia: T.Tư 15/08/2012 7:54 pm
Has thanked: 58 time
Been thanked: 51 time

Re: Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi nhatlinh0207 » T.Ba 10/04/2018 8:50 am

Bạn phải copy file vào trong thư mục phần mềm của bạn chứ. để link bên ngoài sao đc.

Còn đây chỉ là khuyên vậy thôi để file access đỡ nặng.

FlyingFox
Guru
Guru
Bài viết: 809
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 320 time

Re: Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi FlyingFox » T.Tư 11/04/2018 8:41 am

Muốn vậy phải dùng Ms Access Interop DAO bằng cách add Microsoft.Office.Interop.Access.Dao vào Project's References
1. Tạo một class AdoRecordSet như sau:
  1. Imports Microsoft.Office.Interop.Access.Dao
  2. Public Class AdoRecordSet
  3.     Dim dbEngine As DBEngine
  4.     Dim dbFilePath As String
  5.  
  6.     Public Sub New(filePath As String)
  7.         dbEngine = New DBEngine()
  8.         dbFilePath = filePath
  9.     End Sub
  10.  
  11.     Public Sub SetAttachFile(fieldName As String, sqlQuery As String, attachmentFile As String)
  12.         Dim db = dbEngine.OpenDatabase(dbFilePath)
  13.         Dim rs = db.OpenRecordset(sqlQuery)
  14.         If rs.EOF Then
  15.             rs.AddNew()
  16.         Else
  17.             rs.Edit()
  18.         End If
  19.         Dim rsField As Recordset2 = rs.Fields(fieldName).Value
  20.         If rsField.EOF Then
  21.             rsField.AddNew()
  22.         Else
  23.             rsField.Edit()
  24.         End If
  25.         Dim fldAttach = rsField.Fields("FileData")
  26.         fldAttach.LoadFromFile(attachmentFile)
  27.         rsField.Update()
  28.         rs.Update()
  29.         rs.Close()
  30.         db.Close()
  31.     End Sub
  32.  
  33.     Public Sub SaveToFile(fieldName As String, sqlQuery As String, saveFileName As String)
  34.         Dim db = dbEngine.OpenDatabase(dbFilePath)
  35.         Dim rs = db.OpenRecordset(sqlQuery)
  36.         If Not rs.EOF Then
  37.             Dim rsField As Recordset2 = rs.Fields(fieldName).Value
  38.             If Not rsField.EOF Then
  39.                 Dim fldAttach = rsField.Fields("FileData")
  40.                 fldAttach.SaveToFile(saveFileName)
  41.             End If
  42.             rsField.Close()
  43.         End If
  44.         rs.Close()
  45.         db.Close()
  46.     End Sub
  47. End Class
  48.  

Nếu muốn save file vào attachement vào database thì viết như sau:
  1. Dim ado = New AdoRecordSet("database.accdb")
  2. ado.SetAttachFile("column_name", "select column_name from table where id = 1", "filename1.txt")
  3.  

Nếu muốn save vào file trong máy thì viết như sau:
  1. Dim ado = New AdoRecordSet("database.accdb")
  2. ado.SaveToFile("column_name", "select column_name from table where id = 1", "filename2.txt")

muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 506
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 182 time
Been thanked: 30 time
Liên hệ:

Re: Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi muaphonui_2010 » T.Tư 11/04/2018 7:54 pm

Bạn phải copy file vào trong thư mục phần mềm của bạn chứ. để link bên ngoài sao đc.

Còn đây chỉ là khuyên vậy thôi để file access đỡ nặng.

Trường hợp như cách của bạn chỉ thì giả sử trường hợp ở máy khác (khác mạng lan) muốn mở file đó thì có được không vậy bạn?
Cảm ơn.

Hình đại diện của người dùng
nhatlinh0207
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 428
Ngày tham gia: T.Tư 15/08/2012 7:54 pm
Has thanked: 58 time
Been thanked: 51 time

Re: Cách add những file được chọn từ hộp thoại open vào cơ sở dữ liệu

Gửi bàigửi bởi nhatlinh0207 » T.Năm 03/05/2018 2:44 pm

nếu như vậy thì phải làm dạng máy chủ cho ăn chắc và dễ làm, còn không dùng kiểu share thư mục rồi lưu lại thì mở mạng lan được.


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: dong4 khách