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

 Firebird Discussion :

[DEBUTANT]Inserer des fichiers dans des champs blob


Sujet :

Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut [DEBUTANT]Inserer des fichiers dans des champs blob
    Salut à tous,

    J'aimerai savoir comment faire pour inserer et récupérer des fichiers dans un champ blob.

    Est il possible de faire une simple requete, ou faut-il faire autre chose ?


    D'avance merci.


  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 70
    Points
    70
    Par défaut
    Salut,

    Citation Envoyé par tripper.dim
    J'aimerai savoir comment faire pour inserer et récupérer des fichiers dans un champ blob.
    Cool, un sujet à polémique qui va finir en troll ;-) C'est pô bien de mettre des fichiers dans un champ blob. C'est très faisable, moi même je le fais et j'ai un copaing belge qui rempli des bases de 2To avec des fichiers dans des champs blob pour une base de gestion documentaire.

    Avantage : Quand on déplace la base on déplace les fichiers avec, on peut gérer les droits d'accès aux blobs au même endroit que les droits d'accès au reste de la base de données et avec des blob filters (des sortes d'UDF qui agissent comme des filtres sur les blobs) on peut même, par exemple, les compresser ou/et les crypter à la volée presque de manière transparente.

    Inconvénient : C'est moins rapide et moins performant (ephémisme ?) que le système d'exploitation qui est fait pour ça, ca fait grossir les bases, et si la base est cassée, on risque de perdre les fichiers.

    Citation Envoyé par tripper.dim
    Est il possible de faire une simple requete, ou faut-il faire autre chose ?
    Presque, ca dépend des composants/librairies que tu utilises pour accéder à Firebird. Un exemple avec UIB :

    Code : 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
    24
    25
    26
    27
    28
     
    procedure WriteToDatabase(const FileName: String);
    var
      T: TJvUIBTransaction;
      F: TFileStream;
    begin
      T := TJvUIBTransaction.Create(nil);
      T.Database := JvUIBDatabase1;
     
      with TJvUIBQuery.Create(nil) do
      begin
        Transaction := T;
        SQL.Add('insert into T_FICHIERS(NOM, CONTENU) values (?,?)');
        try
          F := TFileStream.Create(FileName);
          try
            Params.AsString[0] := FileName;
            ParamsSetBlob(1,F);
            Execute;
          finally
            F.Free;
          end;
          Close(etmCommit);
        finally
          Free;
          T.Free;
        end;
    end;
    En fait, du point de vue de l'API de Firebird, les blobs sont envoyés à la base en utilisant d'autres fonctions que isc_execute... il faut créer un "objet" blob, l'API renvoie son ID, envoyer les données en utilisant cet ID et finalement se servir de l'ID dans une requête pour que le champ de la table fasse référence au blob par son ID, c'est ce que font les composants quand on utiliser AsBlob() (IBX ?) ou ParamsSetBlob()... (UIB)

    Pour les relire, c'est pareil, techniquement le select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select NOM, CONTENU from T_FICHIERS
    ne renvoie que l'ID du blob et il faut utiliser les fonctions de l'API (ou avoir des composants qui le font pour toi) pour lire le blob séparément du reste des données renvoyées par le SELECT. (ReadBlob() dans UIB)

    @+

    Pierre

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/04/2015, 17h37
  2. [Lazarus] Insérer des octets dans un champ BLOB
    Par ChPr dans le forum Lazarus
    Réponses: 33
    Dernier message: 14/11/2014, 16h51
  3. [2.x] Upload des fichiers dans plusieurs champs dans le même formulaire
    Par aitiahcene dans le forum Symfony
    Réponses: 1
    Dernier message: 15/06/2012, 11h53
  4. Réponses: 9
    Dernier message: 25/09/2005, 16h33
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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