Làm thế nào để lấy lại và Cập Nhật một lĩnh vực văn bản SQL Server sử dụng ADO

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

180368
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TÓM TẮT
Bài viết này chứng tỏ làm thế nào để truy cập và cập nhật các trường văn bản lớn(Nhị phân lớn các đối tượng/BLOBS) bằng cách sử dụng ActiveX Data Objects (ADO). Điều này được thực hiện bằng cách sử dụng các GetChunkAppendChunk phương pháp của một RecordSet ADODB lĩnh vực đối tượng.
THÔNG TIN THÊM

Dự án mẫu từng bước

  1. Mở một dự án mới. Form1 được tạo ra theo mặc định.
  2. Từ các Dự án trình đơn, nhấp vào Tham khảo, và đặt một tham chiếu đến Microsoft ActiveX Data Objects thư viện.
  3. Thêm một mô-đun tiêu chuẩn mới cho dự án của bạn, và dán sau đâyMã số:
       Global cn As ADODB.Connection   Global cmd1 As ADODB.Command   Global rsset As ADODB.Recordset   Const BLOCKSIZE As Long = 4096   Public Sub ColumnToFile(Col As ADODB.Field, DiskFile As String)    'Retrieves data from the database and puts it into a temp file on    'the hard drive.    'The size of the chunk is in the variable BLOCKSIZE (4096).   Dim NumBlocks As Long  'Holds the number of chunks.   Dim LeftOver As Long   '# of chars left over after last whole chunk.   Dim strData As String   Dim DestFileNum As Long   Dim I As Long   Dim ColSize As Long   'Make sure that you aren't in an empty recordset.    If Not rsset.EOF And Not rsset.BOF Then    ColSize = Col.ActualSize   'If filelength > 0, then it is soiled:   ' throw away contents.    If Len(Dir$(DiskFile)) > 0 Then      Kill DiskFile    End If    DestFileNum = FreeFile    Open DiskFile For Binary As DestFileNum    NumBlocks = ColSize \ BLOCKSIZE    LeftOver = ColSize Mod BLOCKSIZE    'Now Write data to the file in chunks.     For I = 1 To NumBlocks     strData = String(BLOCKSIZE, 0)     strData = Col.GetChunk(BLOCKSIZE)     Put DestFileNum, , strData     Next I     strData = String(LeftOver, 0)     strData = Col.GetChunk(LeftOver)     Put DestFileNum, , strData     Close DestFileNum     End If      End Sub     Sub FileToColumn(Col As ADODB.Field, DiskFile As String)     'Takes data from the temp file and saves it to the database.       Dim strData As String       Dim NumBlocks As Long       Dim FileLength As Long       Dim LeftOver As Long       Dim SourceFile As Long       Dim I As Long       SourceFile = FreeFile       Open DiskFile For Binary Access Read As SourceFile       FileLength = LOF(SourceFile)       If FileLength = 0 Then        Close SourceFile        MsgBox DiskFile & " Empty or Not Found."       Else        NumBlocks = FileLength \ BLOCKSIZE        LeftOver = FileLength Mod BLOCKSIZE        Col.AppendChunk Null        strData = String(BLOCKSIZE, 0)        For I = 1 To NumBlocks         Get SourceFile, , strData         Col.AppendChunk strData        Next I        strData = String(LeftOver, 0)        Get SourceFile, , strData        Col.AppendChunk strData        rsset.Update        Close SourceFile       End If      End Sub      Public Sub FileToForm(DiskFile As String, SomeControl As Control)       'Retrieves data from the temp file and puts it onto the control.       Dim SourceFile As Long       Dim FileLength As Long       Dim strData As String       SourceFile = FreeFile       Open DiskFile For Binary Access Read As SourceFile       FileLength = LOF(SourceFile)       If FileLength = 0 Then        Close SourceFile        MsgBox DiskFile & " Empty or Not Found."       Else        strData = String(FileLength, 0)        Get SourceFile, , strData        SomeControl.Text = strData        Close SourceFile       End If      End Sub      Sub FormToFile(DiskFile As String, SomeControl As Control)       'Saves data from the form into a temp file on the local hard drive.       Dim DestinationFile As Long       Dim FileLength As Long       Dim strData As String       If Len(Dir$(DiskFile)) > 0 Then        Kill DiskFile       End If       DestinationFile = FreeFile       Open DiskFile For Binary As DestinationFile       strData = SomeControl.Text       Put DestinationFile, , strData       Close DestinationFile      End Sub
  4. Bằng cách sử dụng mặc định Form1:
    1. Thêm một RichTextBox kiểm soát, và thiết lập của nó Tên bất động sản để "rtbText."
    2. Thêm một CommandButton kiểm soát, và thiết lập của nó Tên bất động sản để "cmdPrev" và các Chú thích bất động sản để "Prev."
    3. Thêm một CommandButton kiểm soát, và thiết lập của nó Tên bất động sản để "cmdNext" và các Chú thích bất động sản để "Tiếp."
    4. Thêm một CommandButton kiểm soát, và thiết lập của nó Tên bất động sản để "cmdSave" và của nó Chú thích bất động sản để "Cập Nhật".
  5. Dán đoạn mã sau vào các hình thức:
       Option Explicit   Dim DiskFile As String      Private Sub cmdNext_Click()       If (rsset.RecordCount > 0) And (Not rsset.EOF) Then        rsset.MoveNext        If Not rsset.EOF Then         rtbText.Text = ""         ColumnToFile rsset.Fields("pr_info"), DiskFile         FileToForm DiskFile, rtbText        Else         rsset.MoveLast        End If       End If      End Sub      Private Sub cmdPrev_Click()       If (rsset.RecordCount > 0) And (Not rsset.BOF) Then        rsset.MovePrevious        If Not rsset.BOF Then         rtbText.Text = ""         ColumnToFile rsset.Fields("pr_info"), DiskFile         FileToForm DiskFile, rtbText        Else         rsset.MoveFirst        End If       End If      End Sub      Private Sub cmdSave_Click()       FormToFile DiskFile, rtbText       FileToColumn rsset.Fields("pr_info"), DiskFile      End Sub      Private Sub Form_Activate()       rtbText.Text = ""       If rsset.RecordCount > 0 Then        rsset.MoveFirst        ColumnToFile rsset.Fields("pr_info"), DiskFile        FileToForm DiskFile, rtbText       End If      End Sub      Private Sub Form_Load()       Dim ConnectString As String       Dim anerror As ADODB.Error       Dim Sql As String       On Error GoTo handler       DiskFile = App.Path & "\BLOB.txt"       'Set the connect string to use pubs on your SQL server.       ConnectString = _       "Driver={SQL SERVER};Server=<yourserver>;Database=pubs;UID=sa;pwd=;"       Sql = "SELECT pr_info FROM pub_info;"       Set cn = New ADODB.Connection       cn.ConnectionString = ConnectString       cn.Open       Set rsset = New ADODB.Recordset       rsset.Open Sql, cn, adOpenKeyset, adLockOptimistic, adCmdText      Exit Sub      handler:       For Each anerror In cn.Errors        Debug.Print anerror.Number & ":  " & anerror.Description & _        " - " & anerror.SQLState       Next anerror      End Sub
  6. ServerName trong connectstring để thay đổi tên máy chủ của bạn.
  7. Chạy các dự án mẫu. Các RichTextBox sẽ chứa các ghi chép đầu tiên về recordset.
  8. Nhấp vào Tiếp theo. Nhận thấy rằng nội dung của cácRichTextBox để thay đổi các bản ghi tiếp theo cho đến khi bạn đạt kỷ lục cuối.Các Tiếp theo nút gọi recordset MoveNext phương pháp và sau đó là các cuộc gọi các ColumnToFileFileToForm phương pháp.
  9. Nhấp vào Trước. Nhận thấy rằng nội dung của cácRichTextBox thay đổi để kỷ lục trước đó cho đến khi bạn đạt được là người đầu tiênkỷ lục. Các Trước nút gọi recordset MovePreviousphương pháp và sau đó là các cuộc gọi các ColumnToFileFileToForm phương pháp.
  10. Nhập một cái gì đó mới vào hộp văn bản và bấm Cập nhật để sửa đổi các lĩnh vực văn bản trong bất cứ điều gì ghi lại bạn đang ở trên. Các Cập nhật nút gọi cácFormToFileFileToColumn phương pháp, mà lần lượt trong các cuộc gọi của recordset Cập nhật phương pháp. Các dữ liệu mới nên nhận được Cập Nhật trong cơ sở dữ liệu.
đoạn BLOB tiếp nhau

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 180368 - Xem lại Lần cuối: 02/21/2014 00:28:47 - Bản sửa đổi: 2.0

  • Microsoft ActiveX Data Objects 2.7
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Office 97 Professional Edition
  • kbnosurvey kbarchive kbdatabase kbhowto kbmt KB180368 KbMtvi
Phản hồi