Comment faire pour récupérer et mettre à jour d'un champ de texte SQL Server à l'aide d'ADO

Traductions disponibles Traductions disponibles
Numéro d'article: 180368 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article montre comment accéder et mettre à jour des champs de texte volumineux (Binary Large Objects/BLOBS) à l'aide de ActiveX Data Objects (ADO). Pour cela, à l'aide des méthodes GetChunk et AppendChunk de l'objet du champ d'un RecordSet ADODB.

Plus d'informations

Étape par étape de l'exemple de projet

  1. Ouvrez un nouveau projet. Form1 est créé par défaut.
  2. Dans le menu projet, cliquez sur références et définir une référence à la bibliothèque Microsoft ActiveX Data Objects.
  3. Ajouter un nouveau module standard à votre projet et collez le code suivant :
       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. À l'aide de la valeur par défaut Form1 :
    1. Ajouter un contrôle RichTextBox et définissez sa propriété Name pour «rtbText.»
    2. Ajoutez un contrôle CommandButton et définissez sa propriété Name pour «cmdPrev» et de la propriété Caption pour «précédente».
    3. Ajoutez un contrôle CommandButton et définissez sa propriété Name pour «cmdNext» et la propriété Caption "Suivant".
    4. Ajoutez un contrôle CommandButton et définissez sa propriété Name «cmdSave» et à sa propriété Caption la valeur «Update».
  5. Collez le code suivant dans le formulaire :
       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. Remplacez le nom de votre serveur nom_serveur dans le connectstring.
  7. Exécutez l'exemple de projet. RichTextBox contiendra le premier enregistrement du jeu d'enregistrements.
  8. Cliquez sur suivant. Notez que le contenu de RichTextBox change à l'enregistrement suivant jusqu'à ce que vous atteigniez le dernier enregistrement. Le bouton suivant appelle la méthode du jeu d'enregistrements MoveNext, puis appelle les méthodes ColumnToFile et FileToForm.
  9. Cliquez sur précédent. Notez que le contenu de RichTextBox change à l'enregistrement précédent jusqu'à ce que le premier enregistrement. Le bouton précédent appelle la méthode du jeu d'enregistrements MovePrevious, puis appelle les méthodes ColumnToFile et FileToForm.
  10. Tapez quelque chose de nouveau dans la zone de texte, puis cliquez sur Update pour modifier le champ de texte dans n'importe quelle enregistrement vous êtes connecté à. Le bouton mettre à jour appelle les méthodes FormToFile et FileToColumn, qui appelle à son tour la méthode de mise à jour du jeu d'enregistrements. Les nouvelles données doivent obtenir les mises à jour dans la base de données.

Propriétés

Numéro d'article: 180368 - Dernière mise à jour: samedi 22 février 2014 - Version: 1.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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 Édition professionnelle sur le système suivant
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
  • Microsoft Visual Basic 6.0 Édition professionnelle sur le système suivant
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
  • Microsoft Visual Basic 5.0 Édition Entreprise sur le système suivant
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0 sur le système suivant
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
  • Microsoft Office 97 Professional sur le système suivant
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
Mots-clés : 
kbnosurvey kbarchive kbmt kbdatabase kbhowto KB180368 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 180368
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com