IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Ecriture d'une image dans un fichier


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut Ecriture d'une image dans un fichier
    Salut

    J'ai cherché dans le forum mais je n'ai pas trouvé de réponse satisfaisante. Je voudrais écrire une image, stockée en base, dans un fichier. Pour lire l'image, j'utilise la fonction READTEXT qui me renvoie le code binaire de l'image, de la forme 0x1245.... etc. A présent, je souhaiterais écrire tout ça dans un fichier. J'avais pensé à utiliser qque chose du genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      DECLARE @fs int
      DECLARE @fileid int  
     
      EXEC sp_OACreate 'Scripting.FileSystemObject', @fs OUT
      EXEC sp_OAMethod @fs, 'OpenTextFile', @FileID OUT, @filename, 8, 1
      EXEC sp_OAMethod @fileid, 'WriteLine', Null, @text
      EXEC sp_OADestroy @fileid
      EXEC sp_OADestroy @fs

    Le problème est que le contenu est interprêté comme du texte. Logique : j'ai utilisé la méthode : 'OpenTextFile'
    Je pense que le problème se situe ici. Il faudrait peut être le remplacer par qque chose du genre 'OpenBinaryFile'. Je ne trouve pas de listes des valeurs possibles pour ce paramètre...

    Si qqu'un a un idée ou à déjà eu le problème, merci de m'en faire part...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    SQL Server n'est pas fait pour faire ce genre de choses. Prévoyez de le faire au niveau du client à l'aide de readtext ou bien changez votre stratégie en stockant vos images dans des fichiers plutôt que dans la base.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Le problème, c'est que je n'ai pas de client justement... ce travail doit être effectué par une stored proc... Sans te manquer de respect, je reste sceptique. Je pense que c'est faisable. Je vais continuer à chercher

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    J'AI TROUVÉ !!!

    On peut donc écrire des fichiers en mode 'binaire' directement à partir de SQL Server. Voici le code :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
      -- Chemin du fichier a ecrire
      DECLARE @baseDir varchar(800)
      EXEC tsu__private_getBaseDir @baseDir OUTPUT
      SELECT @baseDir = 'chemin de mon fichier'
     
      -- Le fichier binaire
      DECLARE @s varbinary(2048)
      SET @s = 0x47494...code hexa du fichier
     
      DECLARE @o int
      DECLARE @r int
      EXEC sp_oacreate 'adodb.stream', @o output
      EXEC sp_oasetproperty @o, 'type', 2
      EXEC sp_oamethod @o, 'open'
      EXEC sp_oamethod @o, 'writetext', null, @s
     
      EXEC sp_oacreate 'adodb.stream', @r output
      EXEC sp_oasetproperty @r, 'type', 1
      EXEC sp_oamethod @r, 'open'
      EXEC sp_oasetproperty @o, 'position', 2
      EXEC sp_oamethod @o, 'copyto', null, @r
      EXEC sp_oamethod @r, 'savetofile', null, @basedir, 2

    Voilà, il fallait y penser J'espère que ça pourra aider quelqu'un !
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecriture d'une list() dans un fichier Pb d'optimisation
    Par sebastien2222 dans le forum Langage
    Réponses: 11
    Dernier message: 13/06/2006, 16h53
  2. Enregistrer une image dans un fichier XML
    Par MiJack dans le forum Delphi
    Réponses: 12
    Dernier message: 24/05/2006, 10h24
  3. Insérer une image dans un fichier exe
    Par RenaudB dans le forum Delphi
    Réponses: 22
    Dernier message: 18/05/2006, 10h53
  4. Récupérer la taille d'une image dans un fichier (GIF/JPEG)
    Par SheikYerbouti dans le forum Multimédia
    Réponses: 4
    Dernier message: 12/05/2005, 14h17
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo