Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 16h47   #1
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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 :
Citation:
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 :
Citation:
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 :

Citation:
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
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 18h06   #2
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
je suis entrain de tenter le coup avec une PS, je posterai le code si jamais ça va
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 18h44   #3
Membre éprouvé
 
Avatar de JustMe
 
Inscription : juillet 2002
Messages : 432
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 432
Points : 441
Points : 441
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é**
http://www.mobile-tactile.com/
JustMe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 12h43   #4
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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 :
Citation:
D:\DOSSIER\VAGUE 2\FOTO FEKESSE 04-08-10\Photo 001.jpg
Obténir:
Citation:
Photo 001.jpg
En sachant que la taille peut varier
pffff !
je vais faire le tour des fonctions de traitement de chaine de firebird
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h03   #5
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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.
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h54   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Code :
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/02/2012, 19h06   #7
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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 :
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 :
Citation:
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
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 15h04   #8
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
j'ai beau cherché mais je ne trouve pas !
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 16h15   #9
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 17h19   #10
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
Merci
je viens de tester avec ce code :
Code :
1
2
3
4
 
SELECT REVERSE(LEFT(REVERSE(PHOTO),
MAXVALUE(POSITION('\' IN REVERSE(PHOTO))-1)),0)
FROM MESINFORMATIONS;
et voici le code d'erreur :
Citation:
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.
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 17h44   #11
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 17h50   #12
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
Pour m'en sortir j'ai tout simplement exclu les champs sans "\" voici le code :
Citation:
SELECT reverse(LEFT(reverse(PHOTO),
position('\' IN reverse(PHOTO))-1))
FROM MESINFORMATIONS
WHERE PHOTO CONTAINING '\';
Merçi
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h34.


 
 
 
 
Partenaires

Hébergement Web