Abrufen und Aktualisieren einer SQL Server-Textfeld mit ADO

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

180368
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Zusammenfassung
Dieser Artikel veranschaulicht die zugreifen und große Textfelder (Binary Large Objects/BLOBS) mithilfe von ActiveX Data Objects (ADO) zu aktualisieren. Dies geschieht mithilfe der Methoden GetChunk und AppendChunk des Field-Objekts ein ADODB-RecordSet.
Weitere Informationen

Schritt für Schritt Beispielprojekt

  1. Öffnen Sie ein neues Projekt. Form1 wird standardmäßig erstellt.
  2. Im Menü Projekt klicken Sie auf Verweise , und legen Sie einen Verweis auf Microsoft ActiveX Data Objects Library fest.
  3. Das Projekt ein neues Standardmodul hinzu, und fügen Sie folgenden Code:
       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. Unter Verwendung der Standardeinstellung Form1:
    1. Fügen Sie ein RichTextBox -Steuerelement, und legen Sie seine Name -Eigenschaft auf "RtbText".
    2. Fügen Sie ein Befehlsschaltfläche -Steuerelement, und legen Sie seine Name -Eigenschaft auf "CmdPrev" und die Caption -Eigenschaft zu vorherigen "."
    3. Fügen Sie ein Befehlsschaltfläche -Steuerelement, und legen Sie seine Name -Eigenschaft auf "CmdNext" und die Caption -Eigenschaft auf "Weiter".
    4. Fügen Sie ein Befehlsschaltfläche -Steuerelement, und legen Sie seine Name -Eigenschaft auf "CmdSave" und dessen Beschriftung -Eigenschaft auf "Update".
  5. Fügen Sie folgenden Code in das Formular:
       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. Ändern Sie den Servernamen in der Zeichenfolge auf den Namen des Servers.
  7. Führen Sie das Beispielprojekt. RTF wird ersten Datensatz der Datensatzgruppe enthalten.
  8. Klicken Sie auf Weiter . Beachten Sie, dass der Inhalt des RichTextBox zum nächsten Datensatz, ändern bis zu den letzten Datensatz. Die Schaltfläche Weiter ruft MoveNext -Methode des Recordsets und ruft dann die Methoden ColumnToFile und FileToForm .
  9. Klicken Sie auf Vorheriger . Beachten Sie, dass der Inhalt des RichTextBox zum vorherigen Datensatz, ändern bis zu den ersten Datensatz. Die vorherige Schaltfläche ruft MovePrevious -Methode des Recordsets und ruft dann die Methoden ColumnToFile und FileToForm .
  10. Geben Sie etwas Neues in das Textfeld ein, und klicken Sie auf Aktualisieren , um das Textfeld in den Datensatz zu ändern, Sie. Die Schaltfläche Update Ruft die Methoden FormToFile und FileToColumn , die die Update -Methode des Recordsets wiederum ruft. Die neuen Daten sollten in der Datenbank aktualisiert erhalten.
Abschnitt BLOB verketten

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 180368 – Letzte Überarbeitung: 02/22/2014 06:57:42 – Revision: 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 KbMtde
Feedback