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

Composants VCL Delphi Discussion :

Afficher une image complète dans un DBimage


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Par défaut Afficher une image complète dans un DBimage
    Bonsoir
    j'ai utilisé une table paradox pour sauvegarder des photos dans un champs de type blob

    tout marche bien, et pour l'affichage j'utilise un DBimage, qui m'affiche l'image de chaque enregistrement

    Mon problème est que des fois l'image est grand et donc je ne vois qu'une partie d'elle dans ce DBimage, n'y a-t-il pas un moyen de mettre un scroll dans le DBimage ou bien redimensionner l'image avant sa sauvegarde ou avant son affichage?

    merci

  2. #2
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    le composant DBImage, n'a-t-il pas une propriété Stretch comme le TImage normal?

    Si tu veux modifier la taille de l'image avant son insertion dans la base de données, je pense que c'est à toi de faire le traitement. Le web regorge de fonctions qui redimensionne des Images.

    Autrement, tu peux mettre ton DBImage dans un conteneur (Panel, Frame, ...) et gérer toi même les ScrollBar sur ce composant (je crois que TFrame le fait tout seul, Pour TPanel je crois que c'est à toi de les gérer "à la main").

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    EDIT : lol, j'ai quitté quelques minutes mon ordi, et RBH, a posté exactement la même réponse ^_^, le temps que je vienne finir et valider

    soit tu active le Strech, soit tu force la Taille du TDBImage en fonction de la taille son TDBImage.Picture et te le met dans un scrollbox, ...

    un problème du TDBImage, c'est que tu lis le blob quoi qu'il arrive, alors qu'une lecture explicite via un TImage serait plus judicieux et permettrait la compression du fichier stream image ...

    tient un sujet qui devrait t'interresser, sa suite

    sinon stocker des images dans une table Paradox, quel courage, dans les bases de données client server, où le server n'est pas accessible en tant que server de fichier, cela est justifié (d'ailleurs autant zip le document avant l'insertion dans le blob), et puis Oracle, SQL Server, MySQL ... c'est assez robuste malgré le volume

    mais en paradox, j'avais toujours eu comme avis que c'était peu recommandé, le répertoire de la base de données, est connue via l'Alias du BDE, ce que je faisais, quand j'ai du géré des documents (word, jpeg ...), j'ajoutais un répertoire Doc dans le Répertoire Data, et je ne stockais que le nom du fichier (un numéro de la forme ID_OBJET-TYPE_OBJET-COMPTEUR), en fait la table ne stockait que le nom d'origine du fichier, quelques dates, et accélérait la recherche (FindFirst/FindNext sur un dossier de 100000 fichiers, ouch ... une table paradox de 1Go, je ne préfère pas y penser), j'ai d'ailleurs, un jour, fait une migration transformant le nom de fichier en série de sous répertoire ... l'avantage, la table est morte, tu as tous les fichiers, le nommage te conserve tes liens vers tes objets ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre confirmé Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Par défaut
    salut et merci pour vos réponses

    tu ne peux pas me passer le code de ta sauvegarde dans répertoire, et surtout l'affichage des images à partir de ton répertoire

    la solution du blob est momentanée.

    merci

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    je ne l'ai plus, c'est vieux, ...

    bon, ta table actuelle, ne change pas bcp, c'est juste le blob qui devient une string de 255, pour stocker le nom du fichier, ensuite, la première chose, c'est comment connaitre le chemin de la DB, soit tu le gère en direct donc tu le connais, soit tu utilise un alias BDE

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    function GetPathAlias(const AliasName: string): string;
    var
       AliasList, ParamList :TStringList;
       i, j : Integer;
    begin
         Result := '';
         AliasList:= TStringList.Create();
         try
            try
               Session.Open();
               Session.GetAliasNames(AliasList);
               for i := 0 to AliasList.Count - 1 do begin
                   if AliasList[i] = AliasName then begin
                      ParamList:= TStringList.Create();
                      try
                         Session.GetAliasParams(AliasList[i], ParamList);
                         for j := 0 to ParamList.Count - 1 do begin
                             if ParamList.Names[j] = 'PATH' then begin
                                if DirectoryExists(ParamList.Values['PATH']) then begin
                                   Result := ParamList.Values['PATH'];
                                   Break;
                                end;
                             end;
                         end;
                      finally
                             ParamList.Free();
                      end;
                      Break;
                   end;
               end;
               Session.Close();
            except
                  Result :=  '';
            end;
         finally
                AliasList.Free();
         end;
    end;
    bon, tu as maintenant, le dossier de ta base de données, ... moi, j'avais soit la base en local, soit le chemin était un simple disque réseau partagé qui pointait sur le serveur (windows 98 ou NT4 ^_^, j'avais dit que c'était vieux)

    ensuite, pour la sauvegarde fichier, rien de plus simple, ...

    tu fais un CopyFile du fichier local vers le stockage central, à toi de voir le nommage, de voir comment tu veux organisé tes fichiers (c'est de la GED) ... et dans la table, tu stocke dans le champ FileName, le nom de la copie, en fait c'est le nom de la copie qui est le plus dur à trouver ... le plus simple, c'est de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DestFileName := FormatDateTime('YYYYDDMMHHNNSSZZZ', Now() + ExtractFileName(SourceFileName)
    CopyFile(PChar(SourceFileName), PChar(DestFileName), False);
    ensuite, pour la lecture, facile, je te tape un pseudo code, à toi de corriger les fautes

    Image est un simple TImage , placé dans un ScrollBox ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Image.Picture.LoadFromFile(IncludeTrailingPathDelimiter(GetPathAlias(TableImage.Database.AliasName)) +  TableImage.FieldByName('FileName').AsString)
    Image.Width := Image.Picture.Bitmap.Width;
    Image.Height := Image.Picture.Bitmap.Height;
    rien de compliquer ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre confirmé Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Par défaut


    merci c'est très gentil de ta part
    je l'essaierai demain et je te donnerais la réponse ou d 'autres questions

    ciao et à +

  7. #7
    Membre confirmé Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Par défaut
    çA MARCHE PAS, car il me dit
    error: identificateur non déclaré DirectoryExists


  8. #8
    Membre confirmé Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Par défaut
    j'ai trouvé la solution à ce petit problème: c'est l'unité Filectrl et non SysUtils

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

Discussions similaires

  1. [MySQL] Afficher une image stockée dans une base de données
    Par LuckySoft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2006, 12h57
  2. [.NET][CR] Comment afficher une image blob dans un état ?
    Par moucrack dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/06/2005, 13h49
  3. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  4. Afficher une image stockée dans interbase
    Par NicolasR dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/06/2004, 10h00
  5. [VB.NET] afficher une image stockée dans une table
    Par matonfire dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/03/2004, 11h21

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