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 :

[MySQL] Insertion impossible avec id auto-increment


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut [MySQL] Insertion impossible avec id auto-increment
    Bonjour,

    Comme le dit le titre, il m'est toujours impossible de réaliser un UPDATE ou un INSERT quand, dans ma table MySQL, j'ai un champ auto-incrémenté.
    Si je le supprime ça fonctionne nickel.

    Voici une partie de code qui pose problème :
    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
    procedure TfrmIcones.dbiIconeDblClick(Sender: TObject);
    var
      img_id : string;
    begin
      if OpenPictureDialog.Execute then
      begin
        with qryIcones do
        begin
          img_id := FieldByName('idimage').AsString;
          Close;
          SQL.Clear;
          SQL.Add('UPDATE icones SET image = :myimg WHERE idimage = ' + img_id);
          ParamCheck := True;
          Parameters.ParamByName('myimg').LoadFromFile(OpenPictureDialog.FileName, ftBlob);
          try
            ExecSql;
            Active := False;
            SQL.Clear;
            SQL.Add('SELECT * FROM icones ORDER BY application');
            Active := True;
            Locate(img_id, 'idimage', []);
          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;
      end;
    end;
    Delphi me retourne l'erreur :

    "Le projet a déclenché la classe d'exception EOleException avec le message 'Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres'."

    Sur le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Add('UPDATE icones SET image = :myimg WHERE idimage = ' + img_id);
    Pour info j'utilise Delphi 2010 et je me connecte en ADO sur ma DB MySQL.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    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 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Tu es sur d'avoir correctement analysé le problème ?
    Beaucoup d'assistant d'administration de MySQL ajoute un AutoInc systématique à la création de table, très utile pour les jointures !
    J'ai utilisé MySQL via ADO (Delphi 7) par curiosité, je n'avais QUE des AutoInc !

    Tu as vraiment l'erreur sur cette ligne ?
    As-tu essayé de stocker le SQL dans une variable String (ou même une AnsiString) et de passer la variable en paramètre au Add ?

    Sinon, tu peux éviter les paramètre, qu'il suffit d'encoder le Stream Image en Base64 directement en chaine dans le SQL, il faut ajouter 0x devant ... ou mettre h à la fin, j'ai maintenu MySQL et PostreSQL, donc je mélange les deux !

    Avec MyDAC de Devart CoreLab, l'utilisation de Paramètre pour l'écriture dans un BLOB est la plus efficace, comme tu l'as écrit pour ADO !

    Pense à augmenter la taille de buffer SQL maximum, souvent un SQL est limité à 32Ko !

    Pourquoi ne pas être rigoureux et utiliser systématiquement les paramètres ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var
      img_id : Integer;
    ...
    img_id := FieldByName('idimage').AsInteger;
    SQL.Text := 'UPDATE icones SET image = :myimg WHERE idimage = :img_id';
    ParamCheck := True;
    Parameters.ParamByName('myimg').LoadFromFile(OpenPictureDialog.FileName, ftBlob);
    Parameters.ParamByName('img_id').AsInteger := img_id;
    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Bonjour ShaiLeTroll,

    Tout d'abord merci.
    Suite à ta réponse j'ai réalisé plusieurs tests avec un nouveau ADOQuery lié à une table bidon avec un champ auto-incrémenté.
    J'ai alimenté cette table et cela fonctionnait sans problème.

    Le souci provenait donc d'un de mes composant.
    Après comparaison j'ai remarqué que mon type de curseur avait changé.
    Je l'ai remis en ctKeyset et maintenant ça refonctionne.

    Encore merci à toi

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

Discussions similaires

  1. [DERBY] Insert avec un auto-increment sur la table
    Par cashmoney dans le forum JDBC
    Réponses: 3
    Dernier message: 15/09/2009, 15h11
  2. [TRIGGER] insertion avec clef auto-increment dupliquer
    Par TheBlackReverand dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 27/03/2009, 12h06
  3. insert impossible avec MySQLdb
    Par nicdes dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 31/10/2008, 19h46
  4. probleme avec une auto-incremente
    Par tchimou dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2007, 14h28
  5. insert et récupérer valeur auto increment
    Par carelha dans le forum Langage
    Réponses: 4
    Dernier message: 27/09/2006, 17h02

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