Récupérer image de la BDD [Résolu]

atar64 5 Messages postés dimanche 20 mars 2005Date d'inscription 26 février 2008 Dernière intervention - 16 janv. 2008 à 09:55 - Dernière réponse : atar64 5 Messages postés dimanche 20 mars 2005Date d'inscription 26 février 2008 Dernière intervention
- 26 févr. 2008 à 17:50
Bonjour,

Ayant récupérer un existant projet sous foxpro, je cherche à extraire des fichiers bmp de la base foxpro. Mais je n'y arrive pas pouvez vous m'indiquez une source ou une procédure à mettre en place.

Merci par avance
Afficher la suite 

Votre réponse

8 réponses

atar64 5 Messages postés dimanche 20 mars 2005Date d'inscription 26 février 2008 Dernière intervention - 26 févr. 2008 à 17:50
+3
Utile
Problème résolu.
J'ai utilisé OLEDB/.Net et méthode de porc équivalent à la soluce du lien microsoft.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de atar64
Mike Gagnon 381 Messages postés vendredi 15 octobre 2004Date d'inscription 24 octobre 2013 Dernière intervention - 16 janv. 2008 à 13:18
0
Utile
Est-ce que ces images sont dans un champ General? Ou Blob?

Mike Gagnon
Commenter la réponse de Mike Gagnon
Mike Gagnon 381 Messages postés vendredi 15 octobre 2004Date d'inscription 24 octobre 2013 Dernière intervention - 16 janv. 2008 à 13:30
0
Utile
Si les images sont dans un champs General voici le concept.
1. Faire un select sur la table pour créer une table temporaire qui contient seulement le record qui te préoccupe.
2. L'image est contenue dans le fichier fpt, donc pas besoin des deux autres fichier (dbf et cdx)
3. Utiliser FILETOSTR() sur ton fichier fpt pour en faire une chaine charactère.
4. L'image techniquement commence a peu près au 599 ième charactère (ce qui est avant est l'information de l'association du fichier image avec le programme qui va ouvrir l'image sur ton ordinateur. Donc utilise la fonction RIGHT() pour enlever les premiers 599 charactere.
5. Ce qui te reste est ton image, utilise STRTOFILE () pour créer un fichier image

Mike Gagnon
Commenter la réponse de Mike Gagnon
atar64 5 Messages postés dimanche 20 mars 2005Date d'inscription 26 février 2008 Dernière intervention - 1 févr. 2008 à 15:53
0
Utile
Et t'on obliger de faire un select avec un seul record.

J'utilise un autre langage(.Net), j'accède à la base via ODBC. Puis je retirer les 599 caractères du champ qui est en général.

Merci
Dsl pour avoir mis autant de temps à répondre.
Commenter la réponse de atar64
Mike Gagnon 381 Messages postés vendredi 15 octobre 2004Date d'inscription 24 octobre 2013 Dernière intervention - 1 févr. 2008 à 22:06
0
Utile
>>>Et t'on obliger de faire un select avec un seul record.

Pour y retirer une seule image, oui .    Tu dois savoir utilise SELECT from.....en .net?

>>>J'utilise un autre langage(.Net), j'accède à la base via ODBC. Puis je retirer les 599 caractères du champ qui est en général.

Alors tu pose la question dans le mauvais forum. Je ne connais pas l'équivalent de FILETOSTR() en .net (qui n'est pas un language en soi), mais peut-etre poser la question sur un forum .net

Mike Gagnon
Commenter la réponse de Mike Gagnon
atar64 5 Messages postés dimanche 20 mars 2005Date d'inscription 26 février 2008 Dernière intervention - 2 févr. 2008 à 00:33
0
Utile
>>>> Pour y retirer une seule image, oui .    Tu dois savoir utilise SELECT from.....en .net?

L'entête n'est donc pas lié au champs même, mais à un ensemble de résultat? Sinon je pourai les parcourir un par un avec un SELECT général, non ?
Oui je sais utiliser un select, j'ai déjà récuperer toutes les info en dehors de l'image qui est contenu dans un champs général.

>>>> Alors tu pose la question dans le mauvais forum
Non car la bdd est Foxpro, et le problème tient à l'encapsulation de l'image dans la bdd Foxpro (A ma connaissance il y a pas de forum spécifique à la bdd, d'ou l'utilisation de ce forum).

>>>> .net (qui n'est pas un language en soi)
Oui, mais je maitrise C# et vb.Net donc n'importe quel exemple est compréhensible, de plus les méthodes sont identiques dans tout le framework donc pas spécifique à un langage.

Résumé :
1. Je fais un SELECT sur un enregistrement particulier
2. J'optiens une chaine de charactère, à la quelle j'ote les 598 premiers caractères.
3. J'optiens un fichier image.

C'est sa?

Merci d'avance pour le temps que tu m'accorde.
Commenter la réponse de atar64
Mike Gagnon 381 Messages postés vendredi 15 octobre 2004Date d'inscription 24 octobre 2013 Dernière intervention - 2 févr. 2008 à 14:06
0
Utile
Je ne sais pas vraiment si la technique fonctionne en C# ou VB.net mais voici comment on fait en VFP, avec des fonctions de bas-niveau
COPY TO temp FIELDS photo NEXT 1 && Copier le champs que l'on désire dans une table

handlein = FOPEN(temp.fpt) && ouvrir le fichier fpt qui contient l'image
handleout = FCREATE(temp.bmp) && créer un fichier bmp temporaire
gnEnd = FSEEK(handlein,0,2) && trouver la fin du fichier
gnTop = FSEEK(handlein,0) && commencer au début du fichier
str1 = FREAD(handlein, gnEnd) && rammasser l'information binaire d'image
stop=AT('BM',str1) && trouver le début de l'image, normallement au 599 charctère
str2 = RIGHT(str1, LEN(str1)-stop+1) && retirer le restant des charactèresx FWRITE(handleout, str2) && copier ce qui reste dans le fichier BMPFCLOSE(handlein) && fermer le fichier
=FCLOSE(handleout)

Mike Gagnon
Commenter la réponse de Mike Gagnon
atar64 5 Messages postés dimanche 20 mars 2005Date d'inscription 26 février 2008 Dernière intervention - 25 févr. 2008 à 17:58
0
Utile
Je suis toujours sur mon probleme.
Je souhaite passer d'une base foxpro à une SQL Server 2005.
La table ressemble à ceci :
+-------+--------+--------+
|   Nom  | Prenom | Photo   |
+-------+--------+--------+
| Dupont | Albert  |              |

L'image est dans un champs général.
J'arrive très bien à extraite les données que ce soit en ODBC, OLEDB, ...sauf les images. Je n'arrive à les extraire qu'en utilisant cet exemple : http://support.microsoft.com/kb/894819/fr
(J'ai également réussi en utilisant OLEDB mais j'ai un  gros tot de perte (30%) pour une raison qui m'échape)

Cependant maintenant je n'arrive pas a relier les 2 parties de l'information (Nom et Photo) car sur des tables volumineuses, un décalage se créer (Du au fait que certaines fiches n'ont pas de photos)

Et t'il possible de rajouter un numero auto à la table. Puis de nommer les images, par ce numero?

Merci
[auteur/MIKEGAGNON/360415.aspx Mike Gagnon]mais vu que tu part sur le .fpt je ne pense pas pouvoir relier le tout.

J'ai beaucoup de mal, à trouver une doc complête, si il n'est pas possible de répondre à ma question, pouvez vous m'indiequer vos sources.

Merci d'avance, un développeut qui galère bcp.
Commenter la réponse de atar64

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.