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

SQL Firebird Discussion :

Requête de Mise a jour complexe


Sujet :

SQL Firebird

  1. #1
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut Requête de Mise a jour complexe
    Bonjour a tous

    j'ai une table ou j'ai plusieurs chaines de caractères représentant l’accès a des images voici un extrait :
    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 001.jpg
    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 002.jpg
    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 03.jpg
    C:\EVOLIS\PHOTOS\FOTO PATRON ASSI 23 08 11\Photo 007.jpg
    D:\DOSSIER \VAGUE 2\FOTO FEKESSE 04-08-10\Photo 005.jpg
    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 006.jpg
    Actuellement voici ce que je fais pour prendre le contenu d'un champ code pour le remplacer par le nom de la photo:
    1/ J'Extrait de ma base vers un fichier Excel le code de la photo et le chemin de la photo.
    2/ Je récupère par programmation le nom du fichier contenu dans le chemin que je renomme avec le code.
    3/je créer un script update que j’exécute sur ma base de donnée.
    donc par exemple pour :
    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 001.jpg
    Si j'ai le code=x25846 alors après ma mise a jour je dois avoir :

    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\x25846.jpg
    très fastidieux !

    je cherche donc à le faire directement dans la base à partir d'une requête SQL
    La difficulté ici est de récupérer le nom du fichier contenu dans le chemin a cause du caractère variable de ce nom de fichier.
    j'ai donc besoin d'aide.

    merci a tous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    je suis entrain de tenter le coup avec une PS, je posterai le code si jamais ça va

  3. #3
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Les UDF tu en as pensé?
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  4. #4
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    j'avoue n'avoir pas penser aux UDF parce que étant moins documenté sur le sujet.
    mon soucis actuellement est de trouver un moyen de récupérer le nom du fichier, en utilisant une requête SQL, pour le reste on pourra se débrouiller !
    De :
    D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 001.jpg
    Obténir:
    Photo 001.jpg
    En sachant que la taille peut varier
    pffff !
    je vais faire le tour des fonctions de traitement de chaine de firebird

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    j'ai passé en revu toutes fonctions Fib 2.5
    http://www.firebirdsql.org/refdocs/l...5-intfunc.html
    Mais pas eu d'issu je vais voir du coté des UDFs.
    je dois encore chercher comment le faire avec windev ! bref je continu de chercher.

  6. #6
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select reverse(left(reverse('D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 001.jpg'),position('\' IN reverse('D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 001.jpg'))-1)) from rdb$database;
     
    REVERSE                                                
    ====================================================== 
    Photo 001.jpg
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  7. #7
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    waou!!! wiwi ! justement ce qu'il me fallait, dans mon cas ici j'adapte de la manière suivante en remplaçant mes chaines par le champ qui les contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT reverse(LEFT(reverse(LAPHOTO),
    position('\' IN reverse(LAPHOTO))-1))
    FROM MESINFORMATIONS;
    Je test mais il donne un message d'erreur avant d'afficher le resultat qui est correcte :
    voici le message d'erreur :
    Undefined Name
    Invalid lenght Parameter -1 to SUBSTRING
    Negative integer are not allowed
    Moi j'utilise sql manager 2005, je ne sais plus si le logiciel, ou si ça vient de la base de donnée, tout est il que quand je clique sur ok du message, j'ai mon résultat qui s'affiche.

    jevais fouiller encore voir en tout cas merci

  8. #8
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    j'ai beau cherché mais je ne trouve pas !

  9. #9
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    soit c'est ton outil qui est bizzare (dans ce cas là tester avec isql) soit tu as au moins une valeur dans laquelle il n'y a pas de "\"
    il suffit de gérer ce cas là

    mettre par exemple au lieu de :
    position('\' IN reverse(LAPHOTO))-1)

    MAXVALUE(position('\' IN reverse(LAPHOTO))-1),0)

    enfin qq chose de ce genre
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  10. #10
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Merci
    je viens de tester avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT REVERSE(LEFT(REVERSE(PHOTO),
    MAXVALUE(POSITION('\' IN REVERSE(PHOTO))-1)),0)
    FROM MESINFORMATIONS;
    et voici le code d'erreur :
    Invalid data type, length, or value.
    Function REVERSE could not be matched.
    je vais vérifier voir si un champ qui n'a pas de '\'.
    j'ai près de 70 milles lignes.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Citation Envoyé par makowski Voir le message
    soit tu as au moins une valeur dans laquelle il n'y a pas de "\".
    Effectivement ya des champs qui ne contiennent pas de "\"

    Citation Envoyé par makowski Voir le message
    il suffit de gérer ce cas là
    mettre par exemple au lieu de :
    position('\' IN reverse(LAPHOTO))-1)
    MAXVALUE(position('\' IN reverse(LAPHOTO))-1),0)
    Je vais chercher dans ce sens

    merci

  12. #12
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Pour m'en sortir j'ai tout simplement exclu les champs sans "\" voici le code :
    SELECT reverse(LEFT(reverse(PHOTO),
    position('\' IN reverse(PHOTO))-1))
    FROM MESINFORMATIONS
    WHERE PHOTO CONTAINING '\';
    Merçi

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

Discussions similaires

  1. syntaxe de requête de mise a jour
    Par devalender dans le forum SQL
    Réponses: 5
    Dernier message: 30/01/2012, 08h27
  2. PL/SQL mise a jour complexe
    Par pierre2008 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/10/2011, 18h10
  3. Requête de mise a jour qui ne fonctionne pas
    Par niamo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/06/2010, 18h50
  4. requéte de mise a jour
    Par Lebleu dans le forum JDBC
    Réponses: 2
    Dernier message: 30/03/2008, 13h49
  5. [ORACLE 9] Mise à jour complexe ?
    Par Matzke.claudio dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2006, 11h58

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