Makale numarası: 103257 - Son Gözden Geçirme: 18 Ocak 2007 Perşembe - Gözden geçirme: 2.3

ACC: Okuma, depolama & büyük ikili nesne (BLOB'lar) yazılıyor

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Gelişmiş: Uzman kodlama, birlikte çalışabilirlik ve çok kullanıcılı becerileri gerektirir.

Hepsini aç | Hepsini kapa

Özet

Bir <a0>Microsoft Access</a0> tablosundaki <a1>OLE nesnesi</a1> veri türündeki bir alanda büyük veri nesneleri (örneğin, ses, video veya grafik veri) depolayabilir. Depolanmakta olan verileri anladığı bir OLE sunucusu yoksa, bazı büyük ikili veri nesneleri, ancak gösterilemez. Bir Microsoft Access tablosunda da çalıştırılabilir program dosyalarının bir kopyasını veya diğer olmayan OLE veri depolayabilir. Bu veri türü bir büyük ikili nesne (BLOB) biteşlem anılır.

Bu makalede, Visual Basic for Applications ve programlama Microsoft Access ile sağlanan araçları kullanarak Microsoft Access uygulamaları oluşturma bildiğinizi varsayar. Hakkında daha fazla bilgi için Visual Basic for Applications "Building uygulamaları ile Microsoft Access" el ile sürümü için bkz.

Not: Visual Basic for Applications, Microsoft Access sürüm 1.x Access Basic ve 2.0 olarak adlandırılır. Access Basic hakkında daha fazla bilgi için Microsoft Access sürüm 1.x "için ıntroduction programlama" el ile veya Microsoft Access sürüm 2.0 "Uygulamalar?n?n Kurulmas?" kılavuzda başvurun.

Daha fazla bilgi

Aşağıdaki örnek, OLE nesnesi veri türüne sahip büyük miktarda bir alana ikili veriyi yönetmek için kullanabileceğiniz iki örnek kullanıcı tanımlı işlevler içerir. Kullanıcı tanımlı işlevler ReadBLOB() ve WriteBLOB() ' dir.

  • ReadBLOB() işlevi, ikili disk dosyasını okur ve bir OLE nesnesi alanında depolar.
  • Bir disk dosyasına ikili veri, bir OLE nesnesi içinde depolanan WriteBLOB() işlevi yazma alanı.
Bu örnek, bir OLE nesnesi alanına bir ikili dosya kopyalama ve onu yazma gösterir yeni bir disk dosyasına geri:

  1. BLOB adlı yeni bir modül oluşturun ve bir modülün Tanımlamalar bölümüne aşağıdaki satırı girin:
    Seçenek Belirtik
    Const BlockSize 32768 =
    Not: Microsoft Access 2.0 ile çalışıyorsanız, aşağıdaki tanımlar ve sonra iki önceki olanlar dahil gerekecektir:
          Const dbOpenTable = DB_OPEN_TABLE
          Const acSysCmdInitMeter = SYSCMD_INITMETER
          Const acSysCmdUpdateMeter = SYSCMD_UPDATEMETER
          Const acSysCmdRemoveMeter = SYSCMD_REMOVEMETER
  2. Aşağıdaki kodu modüle girin.

    Not: Aşağıdaki örnek kodda, bir satır devam karakteri olarak bir satır sonunda alt çizgi (_) kullanılır. Bu kodu, Access Basic yeniden açtığınızda, alt çizgi satır sonundan kaldırın.

    Not: Microsoft Access 1.x için aşağıdaki tekniği çalışmaz. Microsoft Access 1.x için Recordset değişkenleri ve TabloAç yerine tablo değişkenleri kullanması kodunu değiştirmek gerekecektir OpenRecordset yerine işlevi.
          '**************************************************************
          ' 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. Aşağıdaki yeni bir tablo oluşturmak ve bu BLOB kaydedin:
          Table: BLOB
          ------------------------
          Field Name: Blob
             Data Type: OLE Object
  4. BLOB modülü Tasarım görünümünde açın, Görünüm menüsünde hata ayıklama pencere (veya Microsoft Access 2.0 veya daha önceki bir komut penceresi) tıklatın.
  5. Hata ayıklama penceresinde aşağıdaki satırı yazın ve ENTER tuşuna basın:
          CopyFile "c:\windows\winfile.hlp", "c:\windows\winfil_1.hlp"
Kabarcık alanı BLOB tablo ve buradan Winfil_1.hlp adlı bir disk dosyasına Microsoft Windows Yardım dosyasında ReadBLOB() ve WriteBLOB() işlevleri kopyalayın

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Access 1.0 Standard Edition
  • Microsoft Access 1.1 Standard Edition
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Anahtar Kelimeler: 
kbmt kbinfo kbprogramming KB103257 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:103257  (http://support.microsoft.com/kb/103257/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.