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 :

[ACCESS] [JET] [ADO] Erreur 3000 lors d'un update


Sujet :

Bases de données Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut [ACCESS] [JET] [ADO] Erreur 3000 lors d'un update
    bonjour,

    j'utilise une une base de données ACCESS 2000 sous MSJET via ADO.

    Mon projet fait appel à un grand nombre de requête allant de la plus simple à des requêtes relativement complexes.

    Alors que tout fonctionne bien au niveau des requêtes complexes, deux requêtes (update et insert) on ne peut plus simple refusent de fonctionner.

    Delphi renvoie : 'EOleException : erreur de syntaxe dans l'instruction UPDATE'
    JET renvoie comme erreur : '3000 erreur de syntaxe dans l'instruction UPDATE'
    En regardant dans le fichier d'aide JETERR40.CHM, le descriptif de l'erreur est : Erreur réservée <élément> ; aucun message n'est assigné à cette erreur. (Erreur 3000)

    J'ai une table Utilisateur qui comprend les champs:
    UtilisateurID incrémentAuto
    Pseudo Text 20
    Password Text 20
    OnLine Octet


    et ce code (modification du mot de passe):
    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
     
      sSql := 'UPDATE Utilisateur SET Password='''+EditNewPass1.Text+
              ''' WHERE UtilisateurID='+IntToStr(fidUtil);
     
      try
        with DM.Query1 do
        begin
          SQL.Clear;
     
          SQL.Add(sSql);
     
          ExecSQL;
     
          Close;
        end;
      except
        on E:Exception do begin
          if (DM.CheckLevelJETErreur(E.Message)) then BtokClick(Sender);
          Exit;
        end;
      end;
    Le code me semble normal et devrait fonctionner.
    et pourtant ...
    (la requete fonctionne lorsqu'elle est lancée via ACCESS)

    Quelqu'un a-t-il eu le même problème ?

    Comment solutionner ce problème ?

    merci
    CV :
    - LinkedIn
    - Viadeo

  2. #2
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    Peut-tu essayer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSql := 'UPDATE Utilisateur SET Password='+ QuotedStr(EditNewPass1.Text)+ ' WHERE UtilisateurID=' + (fidUtil);
    A+
    Cyril

  3. #3
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Points : 185
    Points
    185
    Par défaut
    J'ai été trop vite il faut enlever les parenthéses de ta variable fidUtil.
    Ton UtilisateurID est de type numéric et tu essais de le comparer avec
    fidUtil que tu transforme en String.

    A+
    Cyril

  4. #4
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Citation Envoyé par cyril
    Ton UtilisateurID est de type numéric et tu essais de le comparer avec
    fidUtil que tu transforme en String
    Je me trompe peut être mais cela ne peu pas marcher :
    sSql est de type string, il faut donc que ma requete soit une chaine de caractères.
    Dans ma requète, il faut que les chaines de caractère soient entre simples cotes (ce qui nous oblige à en mettre deux pour delphi), les chiffres sont afficher à l'état brut.

    par exemple, sous ACCESS :
    UPDATE Utilisateur SET Password='MotDePasse' WHERE UtilisateurID=1
    cela fonctionne.

    sous delphi pour obtenir cette chaine de caractères qui constitue ma requete, en statique :
    sSql := 'UPDATE Utilisateur SET Password=''MotDePasse'' WHERE UtilisateurID=1';
    Là ça ne fonctionne pas ... erreur 3000...

    PS : les '' sont deux quotes simples (et non une double).

    Le plus curieux, c'est que des requetes beaucoup plus complexes avec sous-requetes et liaisons (meme avec UPDATE) fonctionnent très bien...

    Je ne suis pas sur d'avoir bien compris ce que tu voulais dire.
    CV :
    - LinkedIn
    - Viadeo

  5. #5
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Après plusieurs vérification, j'ai constaté que seul la table Utilisateur pose des problèmes en modification.
    Cependant elle ne semble pas avoir de différence au niveau des options vis a vis des autres (sauf le fait de ne posséder aucune liaison avec d'autre table).

    D'ou peut venir ce problème ?

    J'approche à grands pas de la date de fin du projet et malheureusement je préfèrerais éviter de supprimer le système de loggin (pour une application multi-poste, ca ne ferait pas très sérieux...).

    merci
    CV :
    - LinkedIn
    - Viadeo

  6. #6
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Ca y est le problème est résolu...

    J'ai changé le champs 'password' par 'pass' et comme par hasard tout fonctionne ...

    Password est peut etre mal interprété par le moteur JET (sait-on jamais).

    J'espère que cela pourra servir à d'autres...
    a bientot,

    PS : A force de , je vais me chercher un aspirine (sacré microsoft)
    CV :
    - LinkedIn
    - Viadeo

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

Discussions similaires

  1. [AC-2010] Message d'erreur 7711 lors d'une Macro Access
    Par BABETH77 dans le forum IHM
    Réponses: 1
    Dernier message: 06/03/2019, 17h49
  2. Erreur lors de l'update (Ado.Net)
    Par dsolheid dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/03/2008, 22h21
  3. Réponses: 2
    Dernier message: 05/05/2007, 10h05
  4. Erreur de syntaxe - Access et Ado.net
    Par tibblou dans le forum Accès aux données
    Réponses: 6
    Dernier message: 25/01/2007, 19h26
  5. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 09h37

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