كيفية استرداد وتحديث حقل نصي ملقم SQL باستخدام ADO

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

180368
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
توضح هذه المقالة كيفية الوصول إلى تحديث حقول نص كبير (ثنائي كبير كائنات/BLOBS) باستخدام كائنات بيانات ActiveX (ADO). ويتم تحقيق ذلك باستخدام أساليب GetChunk و AppendChunk مجموعة سجلات ADODB حقل الكائن.
معلومات أخرى

خطوة بخطوة نموذج مشروع

  1. افتح مشروع جديد. يتم إنشاء Form1 بشكل افتراضي.
  2. من القائمة المشروع انقر فوق مراجع ثم قم بتعيين مرجع إلى "مكتبة كائنات Microsoft ActiveX البيانات".
  3. إضافة وحدة نمطية قياسية جديدة إلى المشروع ثم قم بلصق التعليمة البرمجية التالية:
       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. استخدام الافتراضي Form1:
    1. إضافة عنصر تحكم RichTextBox وتعيين خاصية الاسم الخاص به إلى "rtbText."
    2. إضافة عنصر تحكم CommandButton وتعيين خاصية الاسم الخاص به إلى "cmdPrev" والخاصية تسمية توضيحية إلى "Prev."
    3. إضافة عنصر تحكم CommandButton وتعيين خاصية الاسم الخاص به إلى "cmdNext" والخاصية تسمية توضيحية إلى "التالي".
    4. إضافة عنصر تحكم CommandButton وتعيين خاصية الاسم الخاص به إلى "cmdSave" والخاصية التسمية التوضيحية الخاص به إلى "تحديث".
  5. قم بلصق التعليمة البرمجية التالية في النموذج:
       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. تغيير اسم الملقم في connectstring إلى اسم الملقم.
  7. تشغيل مشروع العينة. سيحتوي RichTextBox السجل الأول من مجموعة السجلات.
  8. انقر فوق التالي. لاحظ تغيير محتويات RichTextBox إلى السجل التالي حتى تصل إلى السجل الأخير. زر التالي باستدعاء أسلوب MoveNext مجموعة السجلات ومن ثم باستدعاء أساليب ColumnToFile و FileToForm.
  9. انقر فوق السابق. لاحظ تغيير محتويات RichTextBox إلى السجل السابق حتى تصل إلى السجل الأول. الزر "السابق" باستدعاء أسلوب MovePrevious مجموعة السجلات ومن ثم باستدعاء أساليب ColumnToFile و FileToForm.
  10. اكتب شيء جديد في مربع النص ثم انقر فوق تحديث لتعديل حقل نص في أي سجل الموجودة على. المكالمات الزر تحديث الأساليب FormToFileFileToColumn الذي يستدعي بدوره الأسلوب تحديث مجموعة السجلات. يجب الحصول على تحديث بيانات جديدة في قاعدة البيانات.
لسَلسَلة القطعة BLOB

تحذير: تمت ترجمة هذا المقال تلقائياً

خصائص

رقم الموضوع: 180368 - آخر مراجعة: 02/23/2014 01:08:31 - المراجعة: 1.5

  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • 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 Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Office 97 Professional Edition
  • kbnosurvey kbarchive kbmt kbdatabase kbhowto KB180368 KbMtar
تعليقات