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

HyperFileSQL Discussion :

Mise à jour d'une table .fic à partir d'une requete access


Sujet :

HyperFileSQL

  1. #1
    Membre à l'essai
    Profil pro
    Débutant
    Inscrit en
    Août 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Débutant

    Informations forums :
    Inscription : Août 2010
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Mise à jour d'une table .fic à partir d'une requete access
    Bonjour à tous,

    Il y a quelques temps j'avais fait appel à vous (avec succès!) pour créer une liaison ODBC entre une base HyperFileSQL et une base Access.

    Pour rappeler l'historique, j'ai une appli développée sous Windev (je ne suis pas le développeur et je n'ai pas de licence Windev et je n'ai jamais développé sous Windev). J'ai accès, via un centre de controle HyperfileSQL, à toutes les tables de mon projet (droit d'ecriture, de suppression, etc..).

    Pour traiter mes données (et aller au-delà des traitements qui avaient été imaginés dans le projet Windev), j'ai créé une liaison ODBC pour "jouer" avec les données des tables.fic

    Le sens HyperfileSQL -> Access se passe très bien et j'importe tout ce que je veux.
    Par contre, j'ai des soucis lorsque, à partir d'une requete Access, je souhaite mettre à jour des enregistrements.

    Prenons un exemple concret:
    Dans access, j'ai une table "Engagement" qui comporte les champs suivants: "IDEngagement" et "RefEngagement".
    Le champ IDEngagement est un champ numérique, le champ "RefEngagement", un champ texte.
    Dans HyperfileSQL, j'ai une table "INFO" qui comporte les champs "IDINFO" (numérique) et "Libelle" (texte).

    J'ai 500 nouveaux enregistrements à créer dans la table INFO.fic, correspondants à mes 500 différents engagements.
    Comme je n'arrivais pas à faire une requete-ajout directe (depusi Access), j'ai créé 500 nouveaux enregistrements. J'ai récupéré les IDInfo des nouveaux enregistrements (numéro d'ordre allant de 1200 à 1700, par exemple) et j'ai imposé cette suite de numéros d'ordre à mes enregistrements de la table "Engagement", sur le champ "IDEngagement".

    J'ai donc ensuite cherché à effectuer une requete mise à jour sous access, permettant, à chaque fois que Engagement.IDEngagement = Info.IdInfo, de mettre à jour le champ INfo.Libelle et disant Info.Libelle = Engagement.RefEngagement.
    Cette requête n'aboutit pas et l'erreur renvoyée par le serveur est
    initialisation de la requete impossible.
    Rubrique AEBP1119 [mot correspondant à la valeur de RefEngagement de la première ligne de ma table Engagement] inconnue dans le fichier. Vérifiez que la requête est en phase avec la description des fichiers.
    Informations de débogage:
    IEWDSQLSrv=1.12
    Module =<WDSQLSrv>
    Version=<16.0.21.0>.
    Code SQL de la requete:
    UPDATE "INFO" SET "LIBELLE"=AEBP1119 WHERE "IDINFO"=1200 (#0)
    Si je fixe une valeur unique dans ma requete mise à jour, la mise à jour fonctionne, par contre ce qui est bizarre, c'est que :
    - si j'impose que tous les champs "libelle" de ma table INFO prennent la valeur "toto", ça ne fonctionne pas (or mon champ est bien un champ texte)
    - si j'impose que tous les champs "libelle" de ma table INFO prennent la valeur "1", ça fonctionne...

    Auriez-vous des billes pour m'aider à avancer?
    Ce que je veux faire, c'est bien créer 500 nouveaux enregistrements, à la suite des enregistrements déjà existants de ma table INFO, prenant les valeurs Libelle, du type AEBP1119, AEBP1120, AEBP1121, ...

    NB: j'ai aussi essayé de faire la requete UPDATE a partir du centre de controle Hyperfile SQL, mais je n'arrive pas à lui dire d'aller chercher ma table access ou un tableau excel situé à une adresse précise de mon ordi...

    Je vous remercie infiniment pour votre aide !
    Céline

  2. #2
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    A voir comme cela, je dirais que ta requête est tout simplement 'mal formée'.
    Ton champ 'LIBELLE' étant de type texte, il attend une chaîne de caractère, donc la valeur que tu veux lui donner doit être entre simple quote.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE INFO SET LIBELLE='AEBP1119' WHERE IDINFO=1200
    Maintenant, le fait que ça fonctionne avec la valeur 1 est certainement du au cast implicite que fait le serveur.

    Bonne continuation.

  3. #3
    Membre à l'essai
    Profil pro
    Débutant
    Inscrit en
    Août 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Débutant

    Informations forums :
    Inscription : Août 2010
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Bonjour Kyroon et merci pour ta réponse.
    J'ai l'impression que ça fait avancer le schmil-blic

    Dans ma requête Access, j'ai modifié le code SQL, pour faire un test de mise à jour avec une valeur textuelle
    UPDATE ENGAGEMENT LEFT JOIN INFO ON ENGAGEMENT.IDEngagement = INFO.IDINFO SET INFO.LIBELLE2 = "' AEBP1119 '";
    Ca, ça fonctionne! Bien vu kyroon !

    Par contre, mon problème est maintenant d'expliquer à Access, dans le SQL de ma requête, que je veux ajouter du texte, mais le texte qui est dans ma table liée.
    J'ai essayé le code suivant:
    UPDATE ENGAGEMENT LEFT JOIN INFO ON ENGAGEMENT.IDEngagement = INFO.IDINFO SET INFO.LIBELLE2 = "' ENGAGEMENT.RefEngagement '";
    Et le resultat est que mon champ Libelle est assorti de la valeur textuelle "ENGAGEMENT.RefEngagement" partout!!!
    Evidemment...
    Oui, mais comment je peux expliquer que la valeur à ajouter est du texte, dans mon SQL???
    NB: je précise que mon champ RefEngagement de la table ENGAGEMENT est bien au format texte!

    Merci pour votre aide
    Céline

  4. #4
    Membre à l'essai
    Profil pro
    Débutant
    Inscrit en
    Août 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Débutant

    Informations forums :
    Inscription : Août 2010
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Bonjour à tous.
    Suite à la réponse de kyroon, j'ai réussi à solutionner mon problème et je vous fait donc part de la solution...
    Il fallait donc, dans la requete Access forcer la reconnaissance du format texte pour mon champ RefEngagement.

    Et donc, il s'agissait tout bêtement d'ajouter des chr(39) de part et d'autre du champ, ce qui donne, en mode création, dans la ligne "mise à jour":
    Car(39)+ExtracChaîne(ENGAGEMENT!RefEngagement;1;10)+Car(39)
    Et voilà!
    Merci!
    Céline

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2010, 03h18
  2. Réponses: 4
    Dernier message: 01/04/2010, 12h06
  3. [MySQL] Créer une table actuelle à partir d'une table historique
    Par cleminute dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/10/2009, 14h35
  4. Réponses: 1
    Dernier message: 02/07/2009, 14h42
  5. Mise a jour d'une table a partir d'une autre
    Par aliboubou dans le forum Access
    Réponses: 3
    Dernier message: 01/02/2007, 15h05

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