Tác giả: truongphu
Cấp độ bài viết: Căn bản
Tóm tắt: Hướng dẫn về sử dụng Class ADODB.STREAMHướng dẫn về sử dụng Class ADODB.STREAM
Khai báo Class ADODB.STREAM sẽ tạo ra một OBJECT có thể đọc, viết dữ liệu nhị phân hay text
Sau khi Reference có kiểm MS ActiveX Object Library (phiên bản nào cũng được, vd 2.8), ta khai báo:
- Mã: Chọn tất cả
Dim Anh As New ADODB.Stream
Chú ý có từ 'New' thay cho việc Set Object
Cũng như các biến khác, biến Object Adodb.Stream có thể khai báo toàn cục hay khai báo địa phương.
A- Load và Save với file nhị phân
* Đối tượng file nhị phân là tất cả các file bất kể định dạng nào: file ảnh, file text, file thi hành, file dữ liệu ...
* Làm việc nầy, Object Adodb.Stream hoạt động khá đơn giản với 2 hàm LoadFromFile và SaveToFile
* Trước khi dùng, ta phải khai Type cho Adodb.Stream và cho Adodb.Stream Open, đương nhiên xong việc ta nhớ Close
Code như sau:
Using vb Syntax Highlighting
Private Sub Command1_Click()
Dim Anh As New ADODB.Stream
Anh.Type = adTypeBinary
Anh.Open
Anh.LoadFromFile App.Path & ("\Kho\vet.jpg")
Anh.SaveToFile App.Path & "\Temp.jpg"
Anh.Close
MsgBox "Ðã Xong"
End Sub
Dim Anh As New ADODB.Stream
Anh.Type = adTypeBinary
Anh.Open
Anh.LoadFromFile App.Path & ("\Kho\vet.jpg")
Anh.SaveToFile App.Path & "\Temp.jpg"
Anh.Close
MsgBox "Ðã Xong"
End Sub
Parsed in 0.003 seconds, using GeSHi 1.0.8.4
Với các động tác trên, có lẽ bạn đọc sẽ bảo thừa, chỉ cần lệnh copy và rename là đủ!
Không, đấy không phải là nội dung cần trình bày, mà chỉ giới thiệu ban đầu cho thấy Adodb.Stream sẽ làm
việc "vô tư" với tất cả định dạng file!
B- Load và Save với file text
* Đối tượng là file text, có nội dung định dạng ANSI, Unicode hay UTF-8
(Riêng tên file Unicode, vì VB6 không hỗ trợ, ta có thể dùng một biến để tải path unicode từ commondialog hay Shell.BrowseForFolder)
Code tương tự trên, chỉ khác là phần khai Type
Using vb Syntax Highlighting
Private Sub Command2_Click()
Anh.Type = adTypeText
Anh.Open
Anh.LoadFromFile App.Path & ("\Kho\Tây Tiê'n.txt")
Anh.SaveToFile App.Path & "\Test.txt"
Anh.Close
MsgBox "Ðã Xong"
End Sub
Anh.Type = adTypeText
Anh.Open
Anh.LoadFromFile App.Path & ("\Kho\Tây Tiê'n.txt")
Anh.SaveToFile App.Path & "\Test.txt"
Anh.Close
MsgBox "Ðã Xong"
End Sub
Parsed in 0.003 seconds, using GeSHi 1.0.8.4
C- Ghi dữ liệu nhị phân từ file Access
Đây là nội dung chính mà bài viết muốn trình bày: Access được ghi dữ liệu nhị phân từ các file bất kỳ: ảnh, file RTF, Word... vv mà thời gian qua các bạn đã có dịp làm quen
Có 2 hàm cần dùng cho Adodb.Stream thao tác với Access là Read và Write. Code sau đây trình bày cách ghi nhị phân vào file Access từ hàm Adodb.Stream.Read
* Khai báo ADODB.Connection và ADODB.Recordset và cho chúng kết nối:
Using vb Syntax Highlighting
Dim Con As New ADODB.Connection
Dim Rec As New ADODB.Recordset
Con.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\db1.mdb"
Rec.Open "Select * From Table1", Con, 3, 3
Dim Rec As New ADODB.Recordset
Con.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\db1.mdb"
Rec.Open "Select * From Table1", Con, 3, 3
Parsed in 0.003 seconds, using GeSHi 1.0.8.4
* Ghi vào DB1, Table1, field "Data" lần lượt là một file EXE và một file hình
Using vb Syntax Highlighting
Anh.Type = adTypeBinary
Anh.Open
Rec.MoveFirst
Anh.LoadFromFile App.Path & ("\Kho\Happy New Year.EXE")
Rec.Fields("STT").Value = 1
Rec.Fields("Data").Value = Anh.Read
Rec.Update
Rec.AddNew
Anh.LoadFromFile App.Path & ("\Kho\Vet.jpg")
Rec.Fields("STT").Value = 2
Rec.Fields("Data").Value = Anh.Read
Rec.Update
Anh.Close
MsgBox "Ðã Xong"
Anh.Open
Rec.MoveFirst
Anh.LoadFromFile App.Path & ("\Kho\Happy New Year.EXE")
Rec.Fields("STT").Value = 1
Rec.Fields("Data").Value = Anh.Read
Rec.Update
Rec.AddNew
Anh.LoadFromFile App.Path & ("\Kho\Vet.jpg")
Rec.Fields("STT").Value = 2
Rec.Fields("Data").Value = Anh.Read
Rec.Update
Anh.Close
MsgBox "Ðã Xong"
Parsed in 0.004 seconds, using GeSHi 1.0.8.4
D- Đọc dữ liệu nhị phân từ file Access từ hàm Adodb.Stream.Write
* Code đầu tiên đọc nhị phân từ file Access, sau đó lưu ra thành EXE, cho chạy
* Code sau, Control Image1 load dữ liệu trực tiếp từ ADODB.Recordset, không cần nhờ ADODB.Stream
Using vb Syntax Highlighting
Private Sub Command4_Click()
Anh.Type = adTypeBinary
Anh.Open
Rec.MoveFirst
Anh.Write Rec.Fields("Data").Value
Anh.SaveToFile App.Path & "\Temp.exe", adSaveCreateOverWrite
Anh.Close
Shell App.Path & "\Temp.exe", vbNormalFocus
Rec.MoveNext
Set Image1.DataSource = Rec
Image1.DataField = "Data"
MsgBox "Ðã Xong"
End Sub
Anh.Type = adTypeBinary
Anh.Open
Rec.MoveFirst
Anh.Write Rec.Fields("Data").Value
Anh.SaveToFile App.Path & "\Temp.exe", adSaveCreateOverWrite
Anh.Close
Shell App.Path & "\Temp.exe", vbNormalFocus
Rec.MoveNext
Set Image1.DataSource = Rec
Image1.DataField = "Data"
MsgBox "Ðã Xong"
End Sub
Parsed in 0.003 seconds, using GeSHi 1.0.8.4
Nhắc lại: với 2 câu code, có thể khai (một lần) từ Form_Load, hình ảnh hay file RTF, Word đã có thể tải nhanh lên control tương ứng. Ở đây, Image1 tải file jpg:
- Mã: Chọn tất cả
Set Image1.DataSource = Rec
Image1.DataField = "Data"
Project tham khảo:

