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

Bases de données Delphi Discussion :

Comment sauvegarder bitmap ds champ image MDB


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Comment sauvegarder bitmap ds champ image MDB
    Bonjour

    Ma table a été crée avec un champ image tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      ' NOMINAL_IMAGE IMAGE NOT NULL, ' +
      ' NOMINAL_WIDTH INTEGER DEFAULT 640, '+
      ' NOMINAL_HEIGTH INTEGER DEFAULT 480, '+
    Je dois maintenant écrire la procédure qui doit sauvegarder un bitmap 640x480 dans le champ "NOMINAL_IMAGE "

    Un exemple de code ADO serait bienvenu

    Bonne journée à tous

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu devrais avoir la réponse dans la

    notamment ici
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut J'ai un peu modifié le code exemple
    Le code exemple est
    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
    if OpenDialog.execute then
      With AdoQuery do
      begin
        Close;
        SQL.Clear;
        SQL.add('insert into MaTable(Nom,Fichier)');
        SQL.Add('Values(:PNom,:PFichier)');
        ParamCheck := True;
        Parameters.ParamByName('PNom').Value := ExtractFileName(OpenDialog.Filename);
        Parameters.ParamByName('PFichier').LoadFromFile(OpenDialog.Filename, ftBlob);
      try
        ExecSQL;
      Except on E:Exception do
        begin
          Showmessage('Erreur lors de l''insertion de l''image dans la base de données : ' + 
           E.Message);
        end;
      end; 
    end;
    Le mien devient pour la partie image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Parameters.ParamByName('Rec.Image').Assign(Rec.Image);
        try
          ExecSQL;
        Except on E:Exception do
          begin
            Showmessage('Erreur lors de l''insertion de l''image dans la base de données : ' +
            E.Message);
          end;
        end;
    J'obtiens cependant le message "Erreur lors.....données : Aucune valeur donnée pour un ou plusieurs paramètres requis"

    J'ai vérifié dans un listbox tous les paramètres sont initialisés

    D'où peut provenir cette erreur ?

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je crois qu'il y a une erreur dans ton ParamByName, je pense que c'est autre chose que Rec.Image
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    'Rec.Image' quel étrange nom pour un paramètre !
    Cela supporte ???
    Pourquoi ne pas avoir conserver ":PFichier" ?

    Rec.Image est un TImage ? TBitmap ? TPicture ?
    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 habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut voila l'explication
    les champs de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        SQL.Clear;
        SQL.Add('insert into NOMINAL(NOMINAL_NO,NOMINAL_OPERATION_NO,');
        SQL.Add('NOMINAL_SEGMENTATION_NO,NOMINAL_NAME,');
        SQL.Add('NOMINAL_IMAGE,NOMINAL_WIDTH,NOMINAL_HEIGHT,NOMINAL_DELTA_E_TYPE,');
    // Il y a 17 champs ...
    Le champ Image se trouive le premier de la quatrième ligne il est déclaré dans la création de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ' NOMINAL_IMAGE IMAGE NOT NULL, ' +
    Puis dans les valeurs passées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        SQL.Add('Values(NominalNo,OperationNo,Rec.SegCfg_No,Rec.Name,:Rec.Image,');
        SQL.Add('Rec.Img_Width,Rec.Img_Height,Rec.DeltaE_Type,Rec.DeltaE_Max,');
    // toujours 17 champs
    explication : Rec est une structure que recoit la procédure d'enregistrement dans la table et image le champ de la structure qui porte l'image au format BMP ce qui fait RecImage

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Rec est une structure Delphi ou une struture de la base de données ?

    A mon avis, je pense que tu n'as pas compris comment fonctionne les paramètres dans les requêtes.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Comme le dit Rayek, c'est flou dans ta tête !

    Cela devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        SQL.Add('Values(NominalNo,OperationNo, :Rec_SegCfg_No, :Rec_Name, :Rec_Image,');
        SQL.Add(':Rec_Img_Width, :Rec_Img_Height, :Rec_DeltaE_Type, :Rec_DeltaE_Max,');
    Note les : systèmatique indiquant que la valeur EST un paramètre, c'est juste CheckParam qui substitue les Paramètres nommées de la forme :Param sous la forme générique ?
    Note le _ qui ne risque pas de nuire à la requête, le . devrait être réservé pour NomTable.NomChamp ou NomDB.NomTable.NomChamp !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Parameters.ParamByName('Rec_SegCfg_No').AsInteger := Rec.SegCfg_No;
    ...
    Parameters.ParamByName('Rec_Image').Assign(Rec.Image);
    Parameters.ParamByName('Rec_Img_Width').AsInteger := Rec.Img_Width;
    Parameters.ParamByName('Rec_Img_Height').AsInteger := Rec.Img_Height;
    ...
    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

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut réponses
    pour Rayek : c'est une structure Delphi

    pour ShaiLeTroll : J'ai transformé le code comme indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        SQL.Add('Values(NominalNo,OperationNo,:Rec.SegCfg_No,:Rec.Name,:Rec.Image,');
        SQL.Add(':Rec.Img_Width,:Rec.Img_Height,:Rec.DeltaE_Type,:Rec.DeltaE_Max,');
        SQL.Add(':Rec.DeltaE_Moyen,:Rec.Percent_Max,:Rec.Percent_Moyen,:Rec.Control_Type,');
    mais la seconde partie n'est pas acceptée par le compilateur exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parameters.ParamByName('Rec_SegCfg_No').AsInteger := Rec.SegCfg_No;
    Le compilateur refuse "asInteger" commençant par a il ne connait que .assign()

    Effectivement pour mes débuts en bases de données je n'ai pas compris le mécanisme

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Avec Ado c'est Value qu'il faut mettre, ASInterger & Co n'existe pas, c''est les composants qui se charge de faire le nécessaire pour la traduction vers la base de données.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Attention, le nom des paramètres doit être le même dans le SQL et dans ParamByName !
    J'avais pourtant dit d'éviter le point et d'utiliser underscore !

    Dans ton dernier code, tu mélanges encore ":Rec.SegCfg_No" dans le SQL et "Rec_SegCfg_No" dans ParamByName !
    Soit c'est ":Rec.SegCfg_No" et "Rec.SegCfg_No"
    Soit c'est ":Rec_SegCfg_No" et "Rec_SegCfg_No"
    Un peu de Rigueur !

    Pour ADO, oui, Value est un Variant, c'est vrai, pas de propriété avancé dans le TParameter, il faudra peut-être jouer parfois avec DataType !
    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

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Je me demnde si je vais m'en sortir !!
    pour comprendre voici la totalité du code :
    La création de la table
    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
      //************************************************************ table NOMINAL
      req:= 'CREATE TABLE NOMINAL (' +
      ' NOMINAL_NO COUNTER, ' +
      ' NOMINAL_OPERATION_NO INTEGER NOT NULL, ' +
      ' CONSTRAINT FK_Nominal2Operation FOREIGN KEY (NOMINAL_OPERATION_NO) '+
      ' REFERENCES OPERATION(OPERATION_NO) ON UPDATE CASCADE ON DELETE CASCADE, '+
      ' NOMINAL_SEGMENTATION_NO INTEGER NOT NULL, ' +
      ' CONSTRAINT FK_Nominal2Segmentation FOREIGN KEY (NOMINAL_SEGMENTATION_NO) '+
      ' REFERENCES SEGMENTATION(SEGMENTATION_NO) ON UPDATE CASCADE ON DELETE CASCADE, '+
      ' NOMINAL_NAME VARCHAR(32) NOT NULL, ' +
      ' NOMINAL_IMAGE IMAGE NOT NULL, ' +
      ' NOMINAL_WIDTH INTEGER NOT NULL, '+
      ' NOMINAL_HEIGTH INTEGER NOT NULL, '+
      ' NOMINAL_DELTA_E_TYPE BYTE DEFAULT '+IntToStr(_De2k)+', '+
      ' NOMINAL_DELTA_E_MAX_LIMIT SINGLE, ' +
      ' NOMINAL_DELTA_E_AVERAGE_LIMIT SINGLE, ' +
      ' NOMINAL_DELTA_PERCENT_MAX_LIMIT SINGLE, ' +
      ' NOMINAL_DELTA_PERCENT_AVERAGE_LIMIT SINGLE, ' +
      ' NOMINAL_CONTROL_TYPE BYTE DEFAULT '+IntToStr(ctDeltaE)+', '+
      ' NOMINAL_NUMBER_CALCULED_SEGMENTS INTEGER NOT NULL, '+
      ' NOMINAL_NUMBER_USED_SEGMENTS INTEGER NOT NULL, '+
      ' NOMINAL_NUMBER_DELETED_SEGMENTS INTEGER, '+
      ' NOMINAL_NUMBER_ADDED_SEGMENTS INTEGER, '+
      ' NOMINAL_NUMBER_CONTROL_SEGMENTS INTEGER, '+
      ' NOMINAL_USED BIT DEFAULT -1 '+
      ')';
      ADOCommand1.CommandText := req;
      ADOCommand1.Execute;
      // ==================== Clé primaire
      req := 'ALTER TABLE NOMINAL ADD CONSTRAINT PK_NOMINAL PRIMARY KEY (NOMINAL_NO);';
      ADOCommand1.CommandText := req;
      ADOCommand1.Execute;
    puis la structure delphi adressée par Rec dans la pocédure
    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
      TPeekNominal = record
        Nominal_No    : Integer;// RecNo du nominal
        Operation_No  : Integer;// RecNo de l'opération
        SegCfg_No     : Integer;// RecNo Configuration segmentation
        Name          : string;// nom du nominal
        Img_Width     : Integer;// largeur image nominale
        Img_Height    : Integer;// hauteur image nominale
        DeltaE_Type   : byte;// type de deltaE
        DeltaE_Max    : single;// deltaE maxi acceptable
        DeltaE_Moyen  : single;// deltaE moyeni acceptable
        Percent_Max   : single;// Taux surfacique maximum acceptable
        Percent_Moyen : single;// Taux surfacique moyen acceptable
        Control_Type  : byte;// Type de contrôle (DeltaE, Percent, les deux)
        NbrCalcSeg    : Integer;// nombre de segments calculés
        NbrUsedSeg    : Integer;// nombre de segments utilisés
        NbrDeleted    : Integer;// nombre de segments supprimés
        NbrAdded      : Integer;// nombre de segments ajoutés
        NbrControl    : Integer;// nombre de segments préconisés pour contrôle
        DE_Params     : TPeekDEParams;// Paramètres de calcum delta E
        Image         : TBitmap;// Image nominale
      end;
    Et enfin le scripte d'enregistrement

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut je recommence ma réponsee envoyée inopinément
    pour comprendre voici la totalité du code :
    La création de la table
    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
      //************************************************************ table NOMINAL
      req:= 'CREATE TABLE NOMINAL (' +
      ' NOMINAL_NO COUNTER, ' +
      ' NOMINAL_OPERATION_NO INTEGER NOT NULL, ' +
      ' CONSTRAINT FK_Nominal2Operation FOREIGN KEY (NOMINAL_OPERATION_NO) '+
      ' REFERENCES OPERATION(OPERATION_NO) ON UPDATE CASCADE ON DELETE CASCADE, '+
      ' NOMINAL_SEGMENTATION_NO INTEGER NOT NULL, ' +
      ' CONSTRAINT FK_Nominal2Segmentation FOREIGN KEY (NOMINAL_SEGMENTATION_NO) '+
      ' REFERENCES SEGMENTATION(SEGMENTATION_NO) ON UPDATE CASCADE ON DELETE CASCADE, '+
      ' NOMINAL_NAME VARCHAR(32) NOT NULL, ' +
      ' NOMINAL_IMAGE IMAGE NOT NULL, ' +
      ' NOMINAL_WIDTH INTEGER NOT NULL, '+
      ' NOMINAL_HEIGTH INTEGER NOT NULL, '+
      ' NOMINAL_DELTA_E_TYPE BYTE DEFAULT '+IntToStr(_De2k)+', '+
      ' NOMINAL_DELTA_E_MAX_LIMIT SINGLE, ' +
      ' NOMINAL_DELTA_E_AVERAGE_LIMIT SINGLE, ' +
      ' NOMINAL_DELTA_PERCENT_MAX_LIMIT SINGLE, ' +
      ' NOMINAL_DELTA_PERCENT_AVERAGE_LIMIT SINGLE, ' +
      ' NOMINAL_CONTROL_TYPE BYTE DEFAULT '+IntToStr(ctDeltaE)+', '+
      ' NOMINAL_NUMBER_CALCULED_SEGMENTS INTEGER NOT NULL, '+
      ' NOMINAL_NUMBER_USED_SEGMENTS INTEGER NOT NULL, '+
      ' NOMINAL_NUMBER_DELETED_SEGMENTS INTEGER, '+
      ' NOMINAL_NUMBER_ADDED_SEGMENTS INTEGER, '+
      ' NOMINAL_NUMBER_CONTROL_SEGMENTS INTEGER, '+
      ' NOMINAL_USED BIT DEFAULT -1 '+
      ')';
      ADOCommand1.CommandText := req;
      ADOCommand1.Execute;
      // ==================== Clé primaire
      req := 'ALTER TABLE NOMINAL ADD CONSTRAINT PK_NOMINAL PRIMARY KEY (NOMINAL_NO);';
      ADOCommand1.CommandText := req;
      ADOCommand1.Execute;
    puis la structure delphi initialisée adressée par le peremètre Rec dans la pocédure
    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
      TPeekNominal = record
        Nominal_No    : Integer;// RecNo du nominal
        Operation_No  : Integer;// RecNo de l'opération
        SegCfg_No     : Integer;// RecNo Configuration segmentation
        Name          : string;// nom du nominal
        Img_Width     : Integer;// largeur image nominale
        Img_Height    : Integer;// hauteur image nominale
        DeltaE_Type   : byte;// type de deltaE
        DeltaE_Max    : single;// deltaE maxi acceptable
        DeltaE_Moyen  : single;// deltaE moyeni acceptable
        Percent_Max   : single;// Taux surfacique maximum acceptable
        Percent_Moyen : single;// Taux surfacique moyen acceptable
        Control_Type  : byte;// Type de contrôle (DeltaE, Percent, les deux)
        NbrCalcSeg    : Integer;// nombre de segments calculés
        NbrUsedSeg    : Integer;// nombre de segments utilisés
        NbrDeleted    : Integer;// nombre de segments supprimés
        NbrAdded      : Integer;// nombre de segments ajoutés
        NbrControl    : Integer;// nombre de segments préconisés pour contrôle
        DE_Params     : TPeekDEParams;// Paramètres de calcum delta E
        Image         : TBitmap;// Image nominale
      end; Et enfin le scripte d'enregistrement
    et enfin la requête SQ
    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
      With qry do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='INSERT INTO NOMINAL(NOMINAL_NO,NOMINAL_OPERATION_NO,'+
        'NOMINAL_SEGMENTATION_NO,NOMINAL_NAME,NOMINAL_WIDTH,'+
        'NOMINAL_HEIGTH,NOMINAL_DELTA_E_TYPE,NOMINAL_DELTA_E_MAX_LIMIT,'+
        'NOMINAL_DELTA_E_AVERAGE_LIMIT,NOMINAL_DELTA_PERCENT_MAX_LIMIT,'+
        'NOMINAL_DELTA_PERCENT_AVERAGE_LIMIT,NOMINAL_CONTROL_TYPE,'+
        'NOMINAL_NUMBER_CALCULED_SEGMENTS,NOMINAL_NUMBER_USED_SEGMENTS,'+
        'NOMINAL_NUMBER_DELETED_SEGMENTS,NOMINAL_NUMBER_ADDED_SEGMENTS,'+
        'NOMINAL_NUMBER_CONTROL_SEGMENTS,NOMINAL_IMAGE)'+
        'VALUES(:Rec.Nominal_No,:Rec.Operation_No,:Rec.SegCfg_No,:Rec.Name,'+
        ':Rec.Img_Width,:Rec.Img_Height,:Rec.DeltaE_Type,:Rec.DeltaE_Max,'+
        ':Rec.DeltaE_Moyen,:Rec.Percent_Max,:Rec.Percent_Moyen,:Rec.Control_Type,'+
        ':Rec.NbrCalcSeg,:Rec.NbrUsedSeg,:Rec.NbrDeleted,:Rec.NbrAdded,'+
        ':Rec.NbrControl,:Rec.Image)';
        Parameters.ParamByName('Rec.Nominal_No').Value:= Rec.Nominal_No;
        Parameters.ParamByName('Rec.Operation_No').Value:= Rec.Operation_No;
        Parameters.ParamByName('Rec.SegCfg_No').Value:= Rec.SegCfg_No;
        Parameters.ParamByName('Rec.Name').Value:= Rec.Name;
        Parameters.ParamByName('Rec.Img_Width').Value:= Rec.Img_Width;
        Parameters.ParamByName('Rec.Img_Height').Value:= Rec.Img_Height;
        Parameters.ParamByName('Rec.DeltaE_Type').Value:= Rec.DeltaE_Type;
        Parameters.ParamByName('Rec.DeltaE_Max').Value:= Rec.DeltaE_Max;
        Parameters.ParamByName('Rec.DeltaE_Moyen').Value:= Rec.DeltaE_Moyen;
        Parameters.ParamByName('Rec.Percent_Max').Value:= Rec.Percent_Max;
        Parameters.ParamByName('Rec.Percent_Moyen').Value:= Rec.Percent_Moyen;
        Parameters.ParamByName('Rec.Control_Type').Value:= Rec.Control_Type;
        Parameters.ParamByName('Rec.NbrCalcSeg').Value:= Rec.NbrCalcSeg;
        Parameters.ParamByName('Rec.NbrUsedSeg').Value:= Rec.NbrUsedSeg;
        Parameters.ParamByName('Rec.NbrDeleted').Value:= Rec.NbrDeleted;
        Parameters.ParamByName('Rec.NbrAdded').Value:= Rec.NbrAdded;
        Parameters.ParamByName('Rec.NbrControl').Value:= Rec.NbrControl;
        Parameters.ParamByName('Rec.Image').Assign(Rec.Image);
        try
          ExecSQL;
        Except on E:Exception do
          begin
            Showmessage('Erreur lors de l''insertion de l''image dans la base de données : ' +
            E.Message);
          end;
        end;
    Malgré cela voici le message généré à l'exécution :
    Le projet peekvideo a déclenché la classe d'exception EOleExecution avec le message L'instruction INSERT INTO contient le champ inconnu suivant : NOMINAL_WIDTH. Assurez_vous que vous avez correctement saisi le nom, puis recommencez l'opération

    Or vous pouvez vérifier que ledit champ est correctement écrit

    Comment éviter cette erreur ?

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    As-tu testé une requête en dur comme
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    INSERT INTO NOMINAL(NOMINAL_NO,NOMINAL_OPERATION_NO,
        NOMINAL_SEGMENTATION_NO,NOMINAL_NAME,NOMINAL_WIDTH,
        NOMINAL_HEIGTH,NOMINAL_DELTA_E_TYPE,NOMINAL_DELTA_E_MAX_LIMIT,
        NOMINAL_DELTA_E_AVERAGE_LIMIT,NOMINAL_DELTA_PERCENT_MAX_LIMIT,
        NOMINAL_DELTA_PERCENT_AVERAGE_LIMIT,NOMINAL_CONTROL_TYPE,
        NOMINAL_NUMBER_CALCULED_SEGMENTS,NOMINAL_NUMBER_USED_SEGMENTS,
        NOMINAL_NUMBER_DELETED_SEGMENTS,NOMINAL_NUMBER_ADDED_SEGMENTS,
        NOMINAL_NUMBER_CONTROL_SEGMENTS,NOMINAL_IMAGE)
        VALUES(1,2,3,"4",5,6...

    Sinon Height c'est Height pas HEIGTH !
    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

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Voila ce que j'ai fait
    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
      OperationNo:=  FullScreen.CountFromTable('OPERATION');
      Rec.Nominal_No:= NominalNo;
      Rec.Operation_No:= OperationNo;
      With qry do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='INSERT INTO NOMINAL(NOMINAL_NO,NOMINAL_OPERATION_NO,'+
        'NOMINAL_SEGMENTATION_NO,NOMINAL_NAME,NOMINAL_WIDTH,'+
        'NOMINAL_HEIGTH,NOMINAL_DELTA_E_TYPE,NOMINAL_DELTA_E_MAX_LIMIT,'+
        'NOMINAL_DELTA_E_AVERAGE_LIMIT,NOMINAL_DELTA_PERCENT_MAX_LIMIT,'+
        'NOMINAL_DELTA_PERCENT_AVERAGE_LIMIT,NOMINAL_CONTROL_TYPE,'+
        'NOMINAL_NUMBER_CALCULED_SEGMENTS,NOMINAL_NUMBER_USED_SEGMENTS,'+
        'NOMINAL_NUMBER_DELETED_SEGMENTS,NOMINAL_NUMBER_ADDED_SEGMENTS,'+
        'NOMINAL_NUMBER_CONTROL_SEGMENTS,NOMINAL_IMAGE)'+
        'VALUES(Rec.Nominal_No,Rec.Operation_No,Rec.SegCfg_No,Rec.Name,'+
        'Rec.Img_Width,Rec.Img_Height,Rec.DeltaE_Type,Rec.DeltaE_Max,'+
        'Rec.DeltaE_Moyen,Rec.Percent_Max,Rec.Percent_Moyen,Rec.Control_Type,'+
        'Rec.NbrCalcSeg,Rec.NbrUsedSeg,Rec.NbrDeleted,Rec.NbrAdded,'+
        'Rec.NbrControl,Rec.Image)';
        try
          ExecSQL;
        Except on E:Exception do
          begin
            Showmessage('Erreur lors de l''insertion de l''image dans la base de données : ' +
            E.Message);
          end;
        end;
      end;
    Que veut dire le message "Le paramètre Rec.Nominal_No n'a pas de valeur par défaut"
    Ce paramètre est initialisé.
    Est-ce parce qu'il est déclaré counter ? Le counter de Access ne marche pas correctement, j'ai donc essayé sans l'introduire dans la requête, mais dans ce cas j'obtiens le même message mais à propos du second paramètre Rec.Operation_No qui lui aussi est initialisé mais en revanche est déclaré comme clé secondaire...

    Comment se défaire de ces erreurs ?

  16. #16
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    1- si tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Insert into Table(...)
    Values(:Rec.toto, ...)
    Le paramètre c'est Rec et pas Rec.Toto, dans une requête quand tu mets un . c'est pour indiquer une séparation Base/Table (comme l'a expliquer Shai plus haut)

    2- Sans vouloir te vexer, mais sais tu comment ca fonctionne les string ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Rec.Nominal = 10;
    sTmp := 'test : Rec.Nominal';
    Showmessage(sTmp); // = test : Rec.Nominal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Rec.Nominal = 10;
    sTmp := 'Test : ' + IntToStr(Rec.Nominal);
    Showmessage('sTmp); // = Test :10
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    ColorID, tu n'es pas en PHP, les variables ne sont pas interprétés automatiquement dans les chaines !
    Je te propose de mettre des valeurs en dur, pas de nom de variable, de champ ou autre !
    Effectivement, difficile de t'aider si tu ne comprends nos démarches de débogage !
    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

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Problème résolu
    J'ai résolu le problème en dréant une procédure stockée

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

Discussions similaires

  1. Comment sauvegarder une valeur d'un "champ calculé"?
    Par *Aya* dans le forum Bases de données
    Réponses: 5
    Dernier message: 07/01/2008, 17h00
  2. Treeview liste d'images + champ image : très lent, comment faire ?
    Par Cazaux-Moutou-Philippe dans le forum WinDev
    Réponses: 3
    Dernier message: 01/11/2006, 17h59
  3. Réponses: 4
    Dernier message: 08/07/2006, 06h36
  4. Comment passer dans une Bitmap un champs BLOB ?
    Par colorid dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/01/2006, 08h56
  5. Comment copier un bitmap d'une image à une autre?
    Par gord's dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2003, 13h07

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