Je travaille sur le réaménagement d'un système basé sur l'accès à C # .NET, cependant, lorsque MS est passé d'Office 2003 à Office 2007, ils ont supprimé l'éditeur de photos dans l'accès - ce qui signifiait que des images stockées précédemment ne s'affichent plus dans le système. Les gars de la société ont fait un piratage qui a essentiellement sauvé les images avec VBA avec Excel à l'aide de l'arrière-plan (je peux obtenir plus d'informations si vous en avez besoin) mais cela signifiait que les commandes d'image d'accès peuvent toujours être utilisées (cadres liés à l'objet).
Cependant, j'ai maintenant le problème d'essayer de les afficher dans les applications .NET et, après d'innombrables jours d'essayer différentes manières de manipuler le réseau d'octets, je suis proche de l'abandon. J'ai essayé au moins 8 solutions suggérées différentes et chacune se termine par un "paramètre non reconnu" d'une exception lors de l'image.fromstream (). Vous trouverez ci-dessous le code qui m'a reçu le plus proche jusqu'à présent: p> Ce code a été adapté de ICI , je n'avais pas besoin de l'identification des différents doctypes, car je ne traite que des images, mais le type d'image pourrait être n'importe quel Nombre de choses - JPG, BMP, GIF, PNG, etc. P> J'ai également essayé d'enregistrer le tableau d'octets sortidé, mais je n'ai pas eu de chance qui n'a pas été de la chance. Mais lorsque je pointe l'accès à la base de données et faites-le à la voir, tout va bien. De plus, le concepteur de rapports de cristal .NET est capable d'obtenir ces images comment - ils doivent donc être là quelque part ... p> a des idées? P> Marlon P > p>
5 Réponses :
Essayer de récupérer un champ d'image OLE d'accès MS-Access à partir de .NET est beaucoup plus mal à la tête qu'elle ne vaut. Il y a une bonne discussion et des informations sur ce sujet dans Ce message < / a>. p>
En fin de compte, votre meilleure solution, et la solution la plus simple et la plus facile à réussir consiste à utiliser votre méthode de visualisation de travail pour enregistrer ces images en tant que fichiers distincts, puis importer ces fichiers dans la base de données en tant que champs Blob, plutôt que des champs d'image. Ensuite, vous pouvez facilement les lire dans .NET. P>
Essayez ce kb http://support.microsoft.com/kb/317701 article de Microsoft. Il contient des informations sur la manière d'accéder à l'image BLOB à partir de l'accès et d'afficher l'application WinForms. P>
Merci pour les informations mais je pense que vous comprenez malgré le problème. Cet article explique simplement comment stocker un fichier image dans une base de données. Pas comment convertir un objet OLE déjà stocké à une image. Apparemment, ole est juste magique ...
Ce n'est pas le code C # mais voici un Exemple Delphi d'un moyen de résoudre ce problème. P>
Il utilise le ioleObject pour dessiner Tout ce qui est stocké au lieu d'essayer de lire les données brutes. Étapes: P>
Dans mon cas, la fonction suivante a fonctionné. Les données sont stockées par une application VB6.
public static byte[] ConvertOleBytesToRawBytes(byte[] oleBytes) { // The default encoding is in my case - Western European (Windows), Code Page 1252 return Encoding.Convert(Encoding.Unicode, Encoding.Default, (byte[])oleBytes); }
Je devais faire exactement la même chose pour quelque 1 1600 objet de différents types d'extension. Dans mon cas, c'était une base de données héritée qui avait été littéralement utilisée depuis des décennies. Au fil des années, de nombreux types de fichiers ont été ajoutés via un cadre d'objet OLE. Certains des articles qui ressemblaient à des "images" se sont avérés sur des documents Word avec une image intégrée ... NON avoir dit quels autres types de fichiers étaient là? Tout ce que je sais, c'est que j'ai étudié et essayé différentes méthodes d'extraction pendant plus d'une semaine. Même tous Outils d'extraction Steven Leban tels que OLETODISK, A2KEXPORTOLETOJPEG et SauvedOutObitMap. Chacun d'entre eux extraire des images ... Mais leur taille n'était pas une taille unique qui convient à tous ... c'était un gâchis! À la fin, j'ai fini par effectuer une prise d'écran automatisée de chaque image via VBA en utilisant la méthode ci-dessous. Bien que cela n'ait pas été le plus idéal, il fonctionnait pour chaque type de fichier. Cependant, la méthode de prise d'écran capture une prise d'écran de l'écran complet. Une fois que tous les autres ont été extraits, j'ai ensuite dû utiliser Photoshop pour faire un autre processus automatisé à la récolte de lots toutes les photos. Pas idéal mais cela a fonctionné! P> Private Sub CaptureAllImages()
On Error Resume Next
Me.RecordsetClone.MoveFirst
Do While Not Me.RecordsetClone.EOF
Me.Bookmark = Me.RecordsetClone.Bookmark
Call Pause(2)
Call SaveClip2Bit("C:\Users\agriggs\Desktop\Parts Images\MasterPart_" & Me.MasterPartNumber & ".bmp")
Me.RecordsetClone.MoveNext
Loop
End Sub
Public Function Pause(NumberOfSeconds As Variant)
On Error GoTo Error_GoTo
Dim PauseTime As Variant
Dim start As Variant
Dim Elapsed As Variant
PauseTime = NumberOfSeconds
start = Timer
Elapsed = 0
Do While Timer < start + PauseTime
Elapsed = Elapsed + 1
If Timer = 0 Then
' Crossing midnight
PauseTime = PauseTime - Elapsed
start = 0
Elapsed = 0
End If
DoEvents
Loop
Exit_GoTo:
On Error GoTo 0
Exit Function
Error_GoTo:
Debug.Print Err.Number, Err.Description, Erl
GoTo Exit_GoTo
End Function