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

EDI Delphi Discussion :

Afficher une Image (photo scannée) sur une fiche


Sujet :

EDI Delphi

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut Afficher une Image (photo scannée) sur une fiche
    Bonjour à tous,
    J’ai une base de données en SQL SERVER 2000, Interfaçe DELPHI 7

    Problème :
    Je voudrais récupérer une photo scannée et la mettre dans ma fiche Delphi dans la zone TDBImage (j’ai nommé cette zone : ImgPhoto),
    laquelle zone en relation avec le champ PhotoEtudiant de type Image de ma table tblEtudiant (j’ai nommé ce champ de ma table : ElvPhoto)

    Alors comment faire à ce que :
    1- Je puisse charger chaque photo de chaque ETUDIANT
    2- Quand je vais défiler d’un enregistrement à l’autre, que la photo correspondant à chaque Etudiant s’affiche


    NB : quel est le format idéal pour scanner mes photos (jpeg, bmp, ...) ?
    mes photos scannée seront stockée dans un dossier ou repertoire du genre "C:\mes Documents\BoukakaEric\"

    en réalité, je veux avoir à coté du cadre dans lequel s'affichera la photo, un bouton du genre "Parcourir..." qui me permette d'ouvrir une boite de dialogue pour charger une photo quelconque. comme ça à chaque fois que je vais créer un Nouvel Enregistrement que je puisse charger la photo correspondant à l'Etudiant en cours de création.
    Si je vais défiler les enregistrements, que chaque Etudiant m'affiche sa photo dans cette zone/cadre.

    Merci d’avance de votre aide

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 654
    Points : 5 209
    Points
    5 209
    Par défaut
    Stocker une image prend beaucoup plus de ressource que de stocker l'emplacement où se trouve cette image.

    J'ai déjà effectué la même chose que toi mais pour un club sportif.

    A la création j'utilise un OpenDialog dans lequel je récupère l'adresse de l'image puis je me sers de cette adresse pour la charger la photo. Généralement je copie cette image pour la mettre dans un sous répertoire du chemin de l'appli et je mets l'adresse (du moins la partie qui m'interresse : le nom du fichier pas son chemin.) de cet emplacement en texte brut dans la base de données.

    En consultation, j'ai juste à charger l'image à partir de l'url où elle se trouve.

    Le fait de stocker l'url et non l'image en elle même permet d'utiliser moins de ressource.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    Slt

    Merci d’avoir répondu,

    Etant donné que je ne l’ai jamais fais,
    Est-ce que vous pouvez avoir la gentillesse de me décrire tout le processus pour y arriver
    C'est-à-dire me donner les moindres détails (pas à pas) des composants à placer et du code à écrire !
    Merci d’avance

  4. #4
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    pour stocker les photos :

    JPEG -> peut être bon mais perte de qualité selon le niveau de compression, ecRGB, apparition d'artefacts sur l'image à des taux de compression élévé, plutot réservé au web que pour la photo/scan.


    JPEG XR -> format jpeg amélioré, qui permet la compression sans perte ou avec perte ... ecRGB et ecCMJN peut supporter l'alpha.
    aussi appelé HD Photo/WMP.
    aucune nouvelle sur ce format censé remplacé depuis 2008 le format JPEG.
    n'est pris en charge que par les applications pro.
    n'est pas pris en charge pas tout les scanners/apn.
    un hybride entre le PNG et le JPEG natif... (pourquoi réinventer la roue...)


    BMP -> pas de perte mais trés lourd, une image par 1024x768 fera environ 2.3Mo!, ecRGB, réservé pour les petites images et l'affichage ecran de qualité.


    PNG -> bon compromis entre BMP et JPEG, pas de perte, plus lourd que JPEG mais plus leger que BMP. ecRGB. réservé au web et affichage de qualité, gére l'alpha.


    TIFF -> idéal pour la photo et l'imprimerie, sans perte, ecMC, ecCP, ecRGB, ecCMJN, ecYUV et ecCIELaB, permet le stockage de photo bitmap sur 4go compréssé.
    pratiquement tout les scanner/apn/imprimante etc propose ce format. réservé surtout à l'impression et stockage haute qualité. disponible sur toute les plateformes (win/nux/mac).
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    Citation Envoyé par tleboukaka Voir le message
    Est-ce que vous pouvez avoir la gentillesse de me décrire tout le processus pour y arriver
    C'est-à-dire me donner les moindres détails (pas à pas) des composants à placer et du code à écrire !
    la problématique a été traitée de nombreuse fois :
    inserer un jpeg dans un champ blob
    Enregistrement d'image dans une table
    Affiche une image
    une image complète dans un DBimage
    Même une FAQ Comment insérer et récupérer un fichier dans un champ de type BLOB ?
    Tu as aussi de Démo FishFactory qui peut être une source d'inspiration puisque cela fait exactement cela !

    Bonne Lecture !
    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 régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    slt

    merci bien pour ces éclaircissement
    Honnetement, j'avoue que le problème n'est pas resolu
    Je demande la manière de faire pour que je puisse charger mes photo sur cette fiche Etudiant.

    Merci d'avance

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    Tu regarde un peu ce qu'il se passe sur le Forum ?

    Hier, un débutant a lui même trouver la solution à son problème qui est exactement le même : utilisation d'une image stocker en BD

    Et si tu avais lu tous les liens, tu aurais vu un LoadFromFile sur un TBlobField depuis un JPEG sur le Disque

    Ou encore utiliser un champ chaine pour stocker le nom du fichier au lieu d'utiliser un blob ...

    As-tu chercher, as-tu l'aide de Delphi, as-tu regardé l'Exemple FishFactory, une Démo fourni au moins depuis Delphi 4 et toujours d'actualité puisque encore utilisé par Thierry Laborde dans ses démos Migration Paradox\InterBase de Delphi 2010
    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

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    slt

    Maintenant je parviens à inserer une image de mon repertoire vers la fiche Etudiant
    Mais quand je valide/enregistre l’enregistrement, la photo disparait sur la fiche et la zonne devient vide.
    Du coup la photo/image n’est pas sauvegardée dans la table

    Pouvez vous me dire svp ce que je dois ajouter pour que cela fonctionne !

    Voici mon code sur clic du btnParcourir :

    if odEtuPhoto.Execute then
    begin
    ImgElvPhoto.Picture.LoadFromFile(odElvPhoto.FileName);
    ImgElvPhoto.Picture.SaveToFile(odElvPhoto.FileName);
    end;
    NB : ImgElvPhoto = TDBImage ;
    odElvPhoto = TOpenDialog



    Merci

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    Avec un TDBImage
    Pense qu'il faut faire un Edit et Post sur le DataSet pour que cela modifie la Table !

    Pourquoi un Load et Save en même temps ?
    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

  10. #10
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Voci une petite demo avec paradox j'espère que tu ne tiche pas...
    dbimage.pas
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    unit dbimage;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls, DB, DBTables, Buttons;
     
    type
      TForm1 = class(TForm)
        DBNavigator1: TDBNavigator;
        Table1: TTable;
        DataSource1: TDataSource;
        Table1Student_Id: TAutoIncField;
        Table1Student_First_name: TStringField;
        Table1Student_Name: TStringField;
        Table1Student_Picture: TBlobField;
        SpeedButton1: TSpeedButton;
        Label1: TLabel;
        Label4: TLabel;
        DBEdit1: TDBEdit;
        Label2: TLabel;
        DBEdit2: TDBEdit;
        DBText1: TDBText;
        Panel1: TPanel;
        Image1: TImage;
        procedure FormCreate(Sender: TObject);
        procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
        procedure SpeedButton1Click(Sender: TObject);
        procedure Table1AfterScroll(DataSet: TDataSet);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
    {$R *.dfm}
    uses jpeg;
    const
         TABLE_NAME = 'Students.db';
     
    procedure LoadJPG(const Stream:TStream;AOut:TBitmap);
    var
       ImJPEG : TJPEGImage;
    begin
         if not Assigned(Aout) then Exit;
         if not Assigned(Stream) then Exit;
         ImJPEG := TJPEGImage.Create;
         try
           ImJPEG.LoadFromStream(Stream);
           AOut.Assign(ImJPEG);
         finally
           ImJPEG.Free();
         end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with Table1 do
      begin
        TableType := ttParadox;
        TableName := TABLE_NAME;
        if not Exists then
        begin
             with FieldDefs do
             begin
                  Clear;
                  with AddFieldDef do begin
                    Name := 'Student_Id';
                    DataType := ftAutoInc;
                    Required := True;
                  end;
                  with AddFieldDef do begin
                    Name := 'Student_First_name';
                    DataType := ftString;
                    Required := True;
                  end;
                  with AddFieldDef do begin
                    Name := 'Student_Name';
                    DataType := ftString;
                    Required := True;
                  end;
                  with AddFieldDef do begin
                    Name := 'Student_Picture';
                    DataType := ftBlob;
                  end;
             end;
             CreateTable;
        end;
        Open;
      end;
    end;
     
    procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
     SpeedButton1.Enabled:=Table1.State in[dsEdit,dsInsert];
    end;
     
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var
      S:string;
    begin
     if PromptForfilename(S,'Images jpg|*.jpg','','Choisir une image') then
     begin
        Table1Student_Picture.LoadFromFile(S);
     end;
    end;
     
    procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
    var
      Stream : TStream;
    begin
      with  Table1 do
      Stream :=  CreateBlobStream(Table1Student_Picture, bmRead);
      Stream.Position:=0;
      Image1.Picture.Graphic := nil;
      try
        try
          LoadJPG(Stream,Image1.Picture.Bitmap);
        except
        end;
      finally
        Stream.Free;
      end;
    end;
     
    end.
    dbimage.dfm
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    object Form1: TForm1
      Left = 231
      Top = 184
      Width = 330
      Height = 184
      AutoSize = True
      BorderIcons = [biSystemMenu, biMinimize]
      BorderWidth = 5
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesktopCenter
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object SpeedButton1: TSpeedButton
        Left = 0
        Top = 117
        Width = 105
        Height = 22
        Caption = 'Choisir une image'
        Enabled = False
        OnClick = SpeedButton1Click
      end
      object Label1: TLabel
        Left = 110
        Top = 11
        Width = 49
        Height = 13
        Caption = 'Identifiant '
      end
      object Label4: TLabel
        Left = 112
        Top = 35
        Width = 36
        Height = 13
        Caption = 'Pr'#233'nom'
        FocusControl = DBEdit1
      end
      object Label2: TLabel
        Left = 112
        Top = 59
        Width = 22
        Height = 13
        Caption = 'Nom'
        FocusControl = DBEdit2
      end
      object DBText1: TDBText
        Left = 168
        Top = 8
        Width = 65
        Height = 17
        DataField = 'Student_Id'
        DataSource = DataSource1
      end
      object DBNavigator1: TDBNavigator
        Left = 112
        Top = 115
        Width = 200
        Height = 25
        DataSource = DataSource1
        TabOrder = 0
        OnClick = DBNavigator1Click
      end
      object DBEdit1: TDBEdit
        Left = 152
        Top = 27
        Width = 153
        Height = 21
        DataField = 'Student_First_name'
        DataSource = DataSource1
        TabOrder = 1
      end
      object DBEdit2: TDBEdit
        Left = 152
        Top = 51
        Width = 153
        Height = 21
        DataField = 'Student_Name'
        DataSource = DataSource1
        TabOrder = 2
      end
      object Panel1: TPanel
        Left = 0
        Top = 0
        Width = 105
        Height = 113
        BorderWidth = 2
        BorderStyle = bsSingle
        Caption = 'Panel1'
        TabOrder = 3
        object Image1: TImage
          Left = 3
          Top = 3
          Width = 95
          Height = 103
          Align = alClient
          Stretch = True
        end
      end
      object Table1: TTable
        AfterInsert = Table1AfterScroll
        AfterEdit = Table1AfterScroll
        AfterPost = Table1AfterScroll
        AfterCancel = Table1AfterScroll
        AfterScroll = Table1AfterScroll
        FieldDefs = <
          item
            Name = 'Student_Id'
            Attributes = [faReadonly]
            DataType = ftAutoInc
          end
          item
            Name = 'Student_First_name'
            Attributes = [faRequired]
            DataType = ftString
            Size = 20
          end
          item
            Name = 'Student_Name'
            Attributes = [faRequired]
            DataType = ftString
            Size = 20
          end
          item
            Name = 'Student_Picture'
            DataType = ftBlob
            Size = 1
          end>
        StoreDefs = True
        TableName = 'Students.db'
        object Table1Student_Id: TAutoIncField
          DisplayLabel = 'Identifiant '
          DisplayWidth = 10
          FieldName = 'Student_Id'
          ReadOnly = True
        end
        object Table1Student_First_name: TStringField
          DisplayLabel = 'Pr'#233'nom'
          DisplayWidth = 8
          FieldName = 'Student_First_name'
          Required = True
        end
        object Table1Student_Name: TStringField
          DisplayLabel = 'Nom'
          DisplayWidth = 8
          FieldName = 'Student_Name'
          Required = True
        end
        object Table1Student_Picture: TBlobField
          FieldName = 'Student_Picture'
          Size = 1
        end
      end
      object DataSource1: TDataSource
        DataSet = Table1
        Left = 32
      end
    end

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    bonjour,
    je précise que ma bdd est faite sous SQL SERVER (tables, vues, etc).

    je modifie mon code et le met comme ceci sur clic du btnParcourir :

    if odEtuPhoto.Execute then
    begin
    ImgElvPhoto.Picture.LoadFromFile(odElvPhoto.FileName);
    end;
    NB :
    ImgElvPhoto = TDBImage ;
    odElvPhoto = TOpenDialog


    Mais cela ne marche pas parce que j'y arrive à placer l'image dans la zonne, seulement au moment de valider ou de sauvegarder mon enregistrement, c'est l'image qui disparait !!!

    quelqu'un a t-il une astuce simple, court, claire et compréhensible pour résoudre ce problème qui commence à me prendre une éternité ?

    Merci

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    Faire le LoadFromFile sur le Champ Blob au lieu de le faire sur le TDBImage
    Tu n'as lu aucun lien ? Tu attends la becquée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    OldState := ImgElvPhoto.DataSource.DataSet.State ;
    if not (OldState in [dsEdit, dsInsert]) then
      ImgElvPhoto.DataSource.DataSet.Edit;
     
    ImgElPhoto.Picture.LoadFromFile(odElvPhoto.FileName);
    // TBlobField(ImgElvPhoto.Field).LoadFromFile(odElvPhoto.FileName);
     
    if not (OldState in [dsEdit, dsInsert]) then
      ImgElvPhoto.DataSource.DataSet.Post;
    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

  13. #13
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    Slt

    Tout d'abord merci pour vos réponses, particulièrement à Mr ShaiLeTroll

    Je ne voudrai pas vous faire perdre vote temps :
    mais j'ai besoin de la compréhension;
    j'ai parcouru les liens mais j'ai du mal à les adapter à mon contexte.
    C'est pourquoi sur le code que vous m'envoyez, je pose la question sur le mot OldState que je ne connais pas.
    Est ce une variable qu'il faut déclarer - De quelle type ? Car dans l'IDE ce mot n'est pas reconnu.

    Est ce que je vais placer tout ce code dans le procedure On click de mon bouton btnParcourir ?

    NB :
    TDBImage = ImgElvPhoto ;
    TOpenDialog = odElvPhoto
    TADODataSet = dtsElv
    TDataSource = dsElv
    Merci de me renvoyer le code mis à jour en tenant compte de ce que je cite au NB
    (ImgElvPhoto = TDBImage ; odElvPhoto = TOpenDialog ;dtsElv = TADODataSet ;dsElv = TDataSource)

    Je compte sur vous pour y parvenir
    Encore merci

    Eric

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    Slt,

    Je voudrais apporter une précision :

    Le champs ElvPhoto (type Image) fait parti de quelques champs de ma table.
    La structure de ma table tblEleve dans SQL SERVER
    Matricule : int (AutoIncrément)
    Nom : nvarChar (20)
    Prenoms : nvarChar (30)
    ...
    Photo : Image
    @+

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    Je ne connais pas le Type Image de SQL Server !
    Espérons qu'il ne soit pas particulier ... sinon prévoit un passage vers un type BLOB générique.
    Tu utilise ADO semble-t-il, tu peux facilement adapter le code de Montor en remplaçant l'unité BDE par ADODB et le TTable par un TADOQuery ...

    Questions :
    - Quand fais-tu appelles à dtsElv.Edit ?
    - Quand fais-tu appelles à dtsElv.Post ?

    Sinon, OldState serait une variable locale :

    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
    procedure TForm.btnParcourirClick(Sender: TObject);
    var
      OldState: TDataSetState;
    begin
      if odEtuPhoto.Execute then 
      begin
        OldState := ImgElvPhoto.DataSource.DataSet.State ;
        if not (OldState in [dsEdit, dsInsert]) then
          ImgElvPhoto.DataSource.DataSet.Edit;
     
        ImgElPhoto.Picture.LoadFromFile(odElvPhoto.FileName);
        // Essaye aussi l'autre variante :
        // TBlobField(ImgElvPhoto.Field).LoadFromFile(odElvPhoto.FileName);
     
        if not (OldState in [dsEdit, dsInsert]) then
          ImgElvPhoto.DataSource.DataSet.Post;
      end;
    end;
    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

  16. #16
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    slt

    Questions :
    - Quand fais-tu appelles à dtsElv.Edit ?
    - Quand fais-tu appelles à dtsElv.Post ?
    en fait, je pense utiliser le TDBNavigator, à mon avis plus simple
    Ou encore je peux placer un bouton VALIDER (dtsElv.Post) sur lequel je clique après avoir rempli tous les champs et charger la photo.
    c'est à la fin de la saisie que je clique sur ce btnValider afin de sauver l'enregistrement en cours.
    Pour mon cas j'utilise le composant TDBNavigator...

    J'ai saisi tout le code sur btnParcourirClick
    Déjà dans l'IDE le type TDataSetState n'est pas dispo
    A la fin de tout, je compile : il y a un message d'erreur du genre :


    Identificateur Non Declarée : var OldState: TDataSetState;
    Identificateur Non Declarée : dsEdit;

  17. #17
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    tu es loin pour pouvoir aller jusqu'au bout tout seul

    il y a trois simple modification pour la rendre compatible avec l'ADO
    dans le fichier dbimage.pas
    ajouter ADODB dans les uses
    changer Table1:TTable vers Table1:TADOTable
    supprimer le code dans l'événement TForm1.OnCreate
    dans le fichier dbimage.Dfm
    Table1:TTable vers Table1:TADOTable

    regarder dans la pièce joint

  18. #18
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    slt
    Je n'ai pas pu ouvrir la pièce jointe au format .rar
    Est ce que vous pouvez me le renvoyer au format Zip ou simplement au format .doc (Word) !

    Effectivement je suis très surpris que la manière pour y parvenir demande une longue routine ou long code !!! c'est un peu embarrassant.
    moi qui m'attendais à quelques lignes de code simples, court, précis, mais là ... charger une imager en Delphi est une casse tête (je dois écrire beaucoup de lignes de code !).


    A bientôt

  19. #19
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    j'ai rechargé les fichiers au format zip

  20. #20
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 427
    Points : 24 792
    Points
    24 792
    Par défaut
    Citation Envoyé par tleboukaka Voir le message
    en fait, je pense utiliser le TDBNavigator, à mon avis plus simple
    tu ne réponds pas à la question, est-ce que tu appele Edit et Post ?
    Sur le TDBNavigator
    Insert = +
    Edit = -
    Post = v
    Tu cliques bien sur Insert ou Edit AVANT de charger l'Image ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TBlobField(ImgElvPhoto.Field).LoadFromFile(odElvPhoto.FileName);
    Citation Envoyé par tleboukaka Voir le message
    Ou encore je peux placer un bouton VALIDER (dtsElv.Post) sur lequel je clique après avoir rempli tous les champs et charger la photo.
    le TDBNavigator appele le Post lui même, si tu aimes ce compo, pas besoin d'un autre ...

    Question, tu as bien mis un DataField dans le TDBImage ?

    Citation Envoyé par tleboukaka Voir le message
    A la fin de tout, je compile : il y a un message d'erreur du genre :
    Identificateur Non Declarée : var OldState: TDataSetState;
    Identificateur Non Declarée : dsEdit;
    Comment veux-tu que l'on t'aide, tu n'as même pas fait F1 sur ces deux mots, tu aurais vu qu'il faut l'unité DB !
    Un peu d'effort ...

    EDIT : Je viens de faire un petit programme en ADO sur MySQL (je n'ai pas SQL Server), cela a fonctionner du 1er Coup !
    un TADOQuery
    un TDataSource
    un TDBGrid
    un TDBNavigator
    un TDBImage lié avec un DataSource et avec DataField renseigné
    J'ai fait Insérer sur le TDBNavigator
    J'ai fait DBImage.DblClick
    j'ai fait Valider sur le TDBNavigator
    J'ai une ligne avec mon Blob rempli

    Je l'ai fait une seconde fois, une 3eme, et j'ai mes images qui s'affichent dès que je scroll ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TTestADOForm.DBImageDblClick(Sender: TObject);
    var
      VarFileName: string;
    begin
       VarFileName := ChangeFileExt(ExtractFileName(Application.ExeName), '.BMP');
       if PromptForFileName(VarFileName, 'Fichier BitMap *.BMP|*.BMP', 'BMP', 'Sélectionnez une Image', ExtractFileDir(Application.ExeName), False) then
         if FileExists(VarFileName) then
           TBlobField(DBImage.Field).LoadFromFile(VarFileName);
    end;
    EDIT 2 : Tient je t'ai collé aussi un ZIP !
    Fichiers attachés Fichiers attachés
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher des images en cliquant sur une ligne d'une table
    Par o.abdelmalek13 dans le forum WebDev
    Réponses: 2
    Dernier message: 17/07/2018, 20h26
  2. Effet de redimensionnement (rollover) sur une image (photo)
    Par cleo57 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 09/04/2014, 21h19
  3. Afficher une Image (photo scannée) sur une fiche
    Par tleboukaka dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/12/2009, 18h46
  4. Réponses: 6
    Dernier message: 27/05/2005, 16h43
  5. [FLASH 5]un bouton dans une image pour revenir sur une scene
    Par patato valdes dans le forum Flash
    Réponses: 7
    Dernier message: 28/04/2004, 21h21

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