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.
![]()
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.
![]()
Salut,
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.Envoyé par tripper.dim
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.
Presque, ca dépend des composants/librairies que tu utilises pour accéder à Firebird. Un exemple avec UIB :Envoyé par tripper.dim
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)
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;
Pour les relire, c'est pareil, techniquement le select :
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part select NOM, CONTENU from T_FICHIERS
@+
Pierre
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager