Domanda

Ho una tabella in una tabella di access che contiene voci di Prodotto, una delle colonne ha una immagine jpg memorizzato come un Oggetto OLE.Sto cercando di importare questa tabella di MySQL, ma nulla sembra funzionare.Ho provato MySQL migration tool, ma che è un problema noto, con Accesso a Oggetti OLE.(Il problema sta non funziona e lascia il campo vuoto) ho provato anche il suggerimento sulla questo sito e mentre i dati vengono importati sembra come se l'immagine è danneggiata nel trasferimento.Quando si tenta di visualizzare in anteprima l'immagine per ottenere un binario di vista, se devo salvarlo sul disco come immagine jpg e tenta di aprirlo mi appare un errore che indica che l'immagine è corrotta.

Le immagini di Accesso sono belle e possono essere visualizzati in anteprima.L'accesso è memorizzare i dati come un Oggetto OLE e quando ho importare in MySql viene salvato in un MediumBlob campo.

Qualcuno ha avuto questo problema prima e come hanno fatto a risolvere il problema ?

È stato utile?

Soluzione 2

Ok, quindi nell'interesse di aerare il mio sporco codice in pubblico, ecco cosa mi è venuta.
Nota :questo è un hack progettato per essere utilizzato una sola volta e poi gettato via.

Questo Metodo prende in datarowview contenente 1 riga di dati dalla tabella di access.Le Immagini sono avvolti in OLE serializzazione, im non del tutto familiare con come funziona, ma la sua come Microsoft apps consentire a qualsiasi oggetto per essere incorporato in qualcosa d'altro.(ad es. immagini nelle Celle di Excel).Ho bisogno di rimuovere la serializzazione spazzatura intorno all'immagine, così ho caricato l'intero campo come un array di Byte e cercato attraverso di esso per 3 voci simultanee (FF D8 FF) che rappresentano l'inizio di dati di immagine all'interno del campo.

    Private Function GetImageFromRow(ByRef row As DataRowView, ByVal columnName As String) As Bitmap
    Dim oImage As Bitmap = New Bitmap("c:\default.jpg")
    Try
        If Not IsDBNull(row(columnName)) Then
            If row(columnName) IsNot Nothing Then
                Dim mStream As New System.IO.MemoryStream(CType(row(columnName), Byte()))
                If mStream.Length > 0 Then

                    Dim b(Convert.ToInt32(mStream.Length - 1)) As Byte
                    mStream.Read(b, 0, Convert.ToInt32(mStream.Length - 1))

                    Dim position As Integer = 0

                    For index As Integer = 0 To b.Length - 3
                        If b(index) = &HFF And b(index + 1) = &HD8 And b(index + 2) = &HFF Then
                            position = index
                            Exit For
                        End If
                    Next

                    If position > 0 Then
                        Dim jpgStream As New System.IO.MemoryStream(b, position, b.Length - position)
                        oImage = New Bitmap(jpgStream)
                    End If
                End If
            End If
        End If
    Catch ex As Exception
        Throw New ApplicationException(ex.Message, ex)
    End Try
    Return oImage
End Function

Quindi è una questione di tirare fuori questi dati in un'immagine bitmap.Così, per ogni riga della tabella di access ho estratto l'immagine bitmap e quindi aggiornare il corrispondente MySQL voce.
Ha funzionato bene, ma im indovinando che ho potuto avere rimosso la messa in serie cose in un modo migliore, forse c'è un'API per farlo.

Altri suggerimenti

Per quanto mi ricordo, la Microsoft "SQL Server Migration Assistant per l'Accesso"correttamente la migrazione OLE Immagini, ma questo è solo per l'Accesso->SQLServer.Tuttavia, ciò che si può fare è usare questo per la migrazione a Sql server Express (scarica gratis) e quindi eseguire la migrazione da Sql server a MySQL.

C'è anche olefield - Modulo Python per estrarre i dati dei campi oggetto OLE in Access.Ho estratto i file BMP con esso.Si potrebbe forse lavorare con le immagini in jpeg, ma non l'ho ancora provato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top