ACC: Ανάγνωσης, αποθήκευση & γραφής δυαδικά μεγάλα αντικείμενα (BLOBs)

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 103257 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Για προχωρημένους: Απαιτεί ειδικό κωδικοποίησης, διαλειτουργικότητας και ικανότητες πολλών χρηστών.

Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Μπορείτε να αποθηκεύσετε αντικείμενα μεγάλων δεδομένων (όπως τα δεδομένα ήχου, βίντεο ή γραφικών) σε ένα πεδίο με τύπο δεδομένων "αντικείμενο OLE" σε έναν πίνακα της Microsoft Access. Ορισμένα αντικείμενα μεγάλα δυαδικά δεδομένα δεν μπορούν να αναπαρασταθούν, ωστόσο, εάν δεν έχετε ένα διακομιστή OLE που κατανοεί τα δεδομένα που αποθηκεύονται. Επίσης, μπορείτε να αποθηκεύσετε αντίγραφα των αρχείων, εκτελέσιμο πρόγραμμα ή άλλα δεδομένα που δεν είναι OLE σε έναν πίνακα της Microsoft Access. Αυτός ο τύπος δεδομένων είναι γνωστή ως ένα δυαδικό μεγάλο αντικείμενο bitmap (BLOB).

Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη Visual Basic for Applications και με τη δημιουργία εφαρμογών Microsoft Access χρησιμοποιώντας τα εργαλεία προγραμματισμού που παρέχεται με τη Microsoft Access. Για περισσότερες πληροφορίες σχετικά με τη Visual Basic for Applications, ανατρέξτε τη δική σας έκδοση του εγχειριδίου "Δόμηση εφαρμογών με Microsoft Access".

ΣΗΜΕΙΩΣΗ: Visual Basic for Applications ονομάζεται Access Basic στη Microsoft Access εκδόσεις 1.x και 2.0. Για περισσότερες πληροφορίες σχετικά με την Access Basic, ανατρέξτε στο εγχειρίδιο "Εισαγωγή σε προγραμματισμού" στη Microsoft Access έκδοση 1.x ή το εγχειρίδιο "Δόμηση εφαρμογών" της Microsoft Access έκδοση 2.0.

Περισσότερες πληροφορίες

Το ακόλουθο παράδειγμα περιέχει δύο δείγματα από το χρήστη συναρτήσεις που μπορείτε να χρησιμοποιήσετε για τη διαχείριση μεγάλων ποσοτήτων δυαδικών δεδομένων σε ένα πεδίο με τύπο δεδομένων αντικειμένου OLE. Οι συναρτήσεις που ορίζονται από το χρήστη είναι ReadBLOB() και WriteBLOB().

  • Η συνάρτηση ReadBLOB() διαβάζει ένα αρχείο στο δίσκο δυαδικό και αποθηκεύονται σε ένα πεδίο αντικειμένου OLE.
  • Οι εγγραφές της συνάρτησης WriteBLOB() δυαδικά δεδομένα που είναι αποθηκευμένα σε ένα αντικείμενο OLE πεδίων σε ένα αρχείο στο δίσκο.
Το παράδειγμα αυτό παρουσιάζει πώς μπορείτε να αντιγράψετε ένα δυαδικό αρχείο σε πεδίο αντικειμένου OLE, και πώς να συντάξετε το πίσω ένα νέο αρχείο στο δίσκο:

  1. Δημιουργήστε μια νέα λειτουργική μονάδα που ονομάζεται BLOB και πληκτρολογήστε τις ακόλουθες γραμμές στην ενότητα δηλώσεις της λειτουργικής μονάδας:
    Option Explicit
    Const BlockSize = 32768
    ΣΗΜΕΙΩΣΗ: Αν εργάζεστε με το Microsoft Access 2.0, θα πρέπει να περιλαμβάνονται οι ακόλουθοι ορισμοί μετά από δύο προηγούμενες αυτά:
          Const dbOpenTable = DB_OPEN_TABLE
          Const acSysCmdInitMeter = SYSCMD_INITMETER
          Const acSysCmdUpdateMeter = SYSCMD_UPDATEMETER
          Const acSysCmdRemoveMeter = SYSCMD_REMOVEMETER
  2. Πληκτρολογήστε τον ακόλουθο κώδικα στη λειτουργική μονάδα.

    ΣΗΜΕΙΩΣΗ: Στο ακόλουθο δείγμα κώδικα, ένα χαρακτήρα υπογράμμισης (_) στο τέλος μιας γραμμής χρησιμοποιείται ως χαρακτήρας συνέχισης γραμμής. Κατάργηση της υπογράμμισης από το τέλος της γραμμής όταν δημιουργήσετε εκ νέου τον κωδικό αυτό σε Access Basic.

    ΣΗΜΕΙΩΣΗ: Η ακόλουθη τεχνική δεν θα λειτουργήσει για 1.x της Microsoft Access. Για 1.x της Microsoft Access, θα χρειαστεί να τροποποιήσετε τον κώδικα έτσι ώστε να χρησιμοποιεί μεταβλητές πίνακα αντί για μεταβλητές Recordset και το άνοιγμα πίνακα συνάρτηση αντί OpenRecordset.
          '**************************************************************
          ' FUNCTION: ReadBLOB()
          '
          ' PURPOSE:
          '   Reads a BLOB from a disk file and stores the contents in the
          '   specified table and field.
          '
          ' PREREQUISITES:
          '   The specified table with the OLE object field to contain the
          '   binary data must be opened in Visual Basic code (Access Basic
          '   code in Microsoft Access 2.0 and earlier) and the correct record
          '   navigated to prior to calling the ReadBLOB() function.
          '
          ' ARGUMENTS:
          '   Source - The path and filename of the binary information
          '            to be read and stored.
          '   T      - The table object to store the data in.
          '   Field  - The OLE object field in table T to store the data in.
          '
          ' RETURN:
          '   The number of bytes read from the Source file.
          '**************************************************************
          Function ReadBLOB(Source As String, T As Recordset, _
          sField As String)
              Dim NumBlocks As Integer, SourceFile As Integer, i As Integer
              Dim FileLength As Long, LeftOver As Long
              Dim FileData As String
              Dim RetVal As Variant
    
              On Error GoTo Err_ReadBLOB
    
              ' Open the source file.
              SourceFile = FreeFile
              Open Source For Binary Access Read As SourceFile
    
              ' Get the length of the file.
              FileLength = LOF(SourceFile)
              If FileLength = 0 Then
                  ReadBLOB = 0
                  Exit Function
              End If
    
              ' Calculate the number of blocks to read and leftover bytes.
              NumBlocks = FileLength \ BlockSize
              LeftOver = FileLength Mod BlockSize
    
              ' SysCmd is used to manipulate status bar meter.
              RetVal = SysCmd(acSysCmdInitMeter, "Reading BLOB", _
                       FileLength \ 1000)
    
              ' Put the record in edit mode.
              T.Edit
    
              ' Read the leftover data, writing it to the table.
              FileData = String$(LeftOver, 32)
              Get SourceFile, , FileData
              T(sField).AppendChunk (FileData)
    
              RetVal = SysCmd(acSysCmdUpdateMeter, LeftOver / 1000)
    
              ' Read the remaining blocks of data, writing them to the table.
              FileData = String$(BlockSize, 32)
              For i = 1 To NumBlocks
                  Get SourceFile, , FileData
                  T(sField).AppendChunk (FileData)
    
                  RetVal = SysCmd(acSysCmdUpdateMeter, BlockSize * i / 1000)
              Next i
    
              ' Update the record and terminate function.
              T.Update
              RetVal = SysCmd(acSysCmdRemoveMeter)
              Close SourceFile
              ReadBLOB = FileLength
              Exit Function
    
          Err_ReadBLOB:
              ReadBLOB = -Err
              Exit Function
    
          End Function
    
          '**************************************************************
          ' FUNCTION: WriteBLOB()
          '
          ' PURPOSE:
          '   Writes BLOB information stored in the specified table and field
          '   to the specified disk file.
          '
          ' PREREQUISITES:
          '   The specified table with the OLE object field containing the
          '   binary data must be opened in Visual Basic code (Access Basic
          '   code in Microsoft Access 2.0 or earlier) and the correct
          '   record navigated to prior to calling the WriteBLOB() function.
          '
          ' ARGUMENTS:
          '   T           - The table object containing the binary information.
          '   sField      - The OLE object field in table T containing the
          '                 binary information to write.
          '   Destination - The path and filename to write the binary
          '                 information to.
          '
          ' RETURN:
          '   The number of bytes written to the destination file.
          '**************************************************************
          Function WriteBLOB(T As Recordset, sField As String, _
          Destination As String)
              Dim NumBlocks As Integer, DestFile As Integer, i As Integer
              Dim FileLength As Long, LeftOver As Long
              Dim FileData As String
              Dim RetVal As Variant
    
              On Error GoTo Err_WriteBLOB
    
              ' Get the size of the field.
              FileLength = T(sField).FieldSize()
              If FileLength = 0 Then
                  WriteBLOB = 0
                  Exit Function
              End If
    
              ' Calculate number of blocks to write and leftover bytes.
              NumBlocks = FileLength \ BlockSize
              LeftOver = FileLength Mod BlockSize
    
              ' Remove any existing destination file.
              DestFile = FreeFile
              Open Destination For Output As DestFile
              Close DestFile
    
              ' Open the destination file.
              Open Destination For Binary As DestFile
    
              ' SysCmd is used to manipulate the status bar meter.
              RetVal = SysCmd(acSysCmdInitMeter, _
              "Writing BLOB", FileLength / 1000)
    
              ' Write the leftover data to the output file.
              FileData = T(sField).GetChunk(0, LeftOver)
              Put DestFile, , FileData
    
              ' Update the status bar meter.
              RetVal = SysCmd(acSysCmdUpdateMeter, LeftOver / 1000)
    
              ' Write the remaining blocks of data to the output file.
              For i = 1 To NumBlocks
                  ' Reads a chunk and writes it to output file.
                  FileData = T(sField).GetChunk((i - 1) * BlockSize _
                     + LeftOver, BlockSize)
                  Put DestFile, , FileData
    
                  RetVal = SysCmd(acSysCmdUpdateMeter, _
                  ((i - 1) * BlockSize + LeftOver) / 1000)
              Next i
    
              ' Terminates function
              RetVal = SysCmd(acSysCmdRemoveMeter)
              Close DestFile
              WriteBLOB = FileLength
              Exit Function
    
          Err_WriteBLOB:
              WriteBLOB = -Err
              Exit Function
    
          End Function
    
          '**************************************************************
          ' SUB: CopyFile
          '
          ' PURPOSE:
          '   Demonstrates how to use ReadBLOB() and WriteBLOB().
          '
          ' PREREQUISITES:
          '   A table called BLOB that contains an OLE Object field called
          '   Blob.
          '
          ' ARGUMENTS:
          '   Source - The path and filename of the information to copy.
          '   Destination - The path and filename of the file to write
          '                 the binary information to.
          '
          ' EXAMPLE:
          '   CopyFile "c:\windows\winfile.hlp", "c:\windows\winfil_1.hlp"
          '**************************************************************
          Sub CopyFile(Source As String, Destination As String)
              Dim BytesRead As Variant, BytesWritten As Variant
              Dim Msg As String
              Dim db As Database
              Dim T As Recordset
    
              ' Open the BLOB table.
              Set db = CurrentDb()
              Set T = db.OpenRecordset("BLOB", dbOpenTable)
    
              ' Create a new record and move to it.
              T.AddNew
              T.Update
              T.MoveLast
    
              BytesRead = ReadBLOB(Source, T, "Blob")
    
              Msg = "Finished reading """ & Source & """"
              Msg = Msg & Chr$(13) & ".. " & BytesRead & " bytes read."
              MsgBox Msg, 64, "Copy File"
    
              BytesWritten = WriteBLOB(T, "Blob", Destination)
    
              Msg = "Finished writing """ & Destination & """"
              Msg = Msg & Chr$(13) & ".. " & BytesWritten & " bytes written."
              MsgBox Msg, 64, "Copy File"
          End Sub
    						
  3. Δημιουργία νέου πίνακα παρακάτω και στη συνέχεια αποθηκεύστε το ως BLOB:
          Table: BLOB
          ------------------------
          Field Name: Blob
             Data Type: OLE Object
  4. Με τη λειτουργική μονάδα αντικειμένων BLOB ανοιχτή σε προβολή σχεδίασης, κάντε κλικ στο παράθυρο "Εντοπισμός σφαλμάτων" (ή παράθυρο άμεσης παρακολούθησης στην Microsoft Access 2.0 ή παλιότερη έκδοση), από το μενού Προβολή.
  5. Πληκτρολογήστε την ακόλουθη γραμμή στο παράθυρο εντοπισμός σφαλμάτων και, στη συνέχεια, πιέστε το πλήκτρο ENTER:
          CopyFile "c:\windows\winfile.hlp", "c:\windows\winfil_1.hlp"
Οι συναρτήσεις ReadBLOB() και WriteBLOB() να αντιγράψετε το αρχείο Βοήθειας των Microsoft Windows στο πεδίο Blob στον πίνακα αντικειμένων BLOB, και από εκεί σε ένα αρχείο του δίσκου που ονομάζεται Winfil_1.hlp

Ιδιότητες

Αναγν. άρθρου: 103257 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Access 1.0 Standard Edition
  • Microsoft Access 1.1 Standard Edition
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 97 Standard Edition
Λέξεις-κλειδιά: 
kbinfo kbprogramming kbmt KB103257 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:103257
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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