Concaténation fonction VB et requête SQL

Signaler
Messages postés
166
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
25 octobre 2011
-
Messages postés
166
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
25 octobre 2011
-
Bonjour,
J'ai défini sous vb6 une fonction "Fct_St(ch as string) as string" et je veux l'utiliser dans la clause where d'une requête sql dans mon code VB6, mais le problème ce que la chaîne à envoyer comme paramètre de ma fonction et un champ à selectionner par SQL. je veux savoir comment peut on faire une concaténation? Aidez moi SVP.




Ma requête est comme suit:


req="select Client.Nom, Client.Prenom, Client.Adresse, Client.CodePostal, Client.Ville, Client.Telephone FROM Client LEFT JOIN Cp ON Client.Ville = Cp.Ville WHERE (" & Fct_St( & "Cp.Ville" & ) & " Is Not Null);"

.

8 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
Je ne comprends pas trop ce que tu veux faire.
Si tu paramètres une requète SQL, le texte que tu vas insérer ne pourra être qu'un nom de champ.
Or, tu l'as déjà ce nom : Cp.Ville
Pourquoi sort-il d'une fonction ?
Que te renvoie ta fonction ? donne un exemple, stp

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
PS
Non, tu ne pourras pas demander au SQL d'aller exécuter ta fonction pour chaque valeur qu'il rencontrera.
Une requète peut-être paramétrée, mais elle restera figée pendant toute la durée de son utilisation.

Explique mieux ce que tu veux faire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
166
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
25 octobre 2011

Ma fonction est comme suit:

*******************************************
Private function fct_st(ch as string) as string


ch = ucase(replace ( ch, "Saint", "st" ))


fct_st = ch

End function

********************************************

je veux faire appel à cette fonction lors de la selection du nom de ville par la requête sql.

Merci pour votre attention.

.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Ok
Mais tu veux modifier quoi ?
La requète ou le résultat de la requète ?

Une requète SQL est une "Input"
Elle ne peut pas interagir avec le VB pour modifier son résultat.
Il faut donc lancer ta requète normalement et si tu as besoin de modifier le contenu ensuite, une fois que tu l'auras reçu.

Est-ce que le not "Saint" est dans un champ de ta DB ou est-il dans une TextBox de ton application afin de faire la recherche ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
166
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
25 octobre 2011

Il s'agit d'une comparaison entre une ligne de textbox et le résultat d'une requête.

Par exemple:

Saint Francisco = Saint Francisco  
 
                       ou
 Saint Francisco St Francisco> Les deux résultats sont équivaux
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Ok
Je ne comprends pas trop pourquoi tu compares le Cp.Ville à Null ?
Comment s'appelle la TextBox dans laquelle se trouve le texte à rechercher ?

Il faut donc que tu écrive en toute lettre les combinaisons possibles dans ta requètes.
Il faut traiter tous les cas.
Coup de chance, "Saint" et "St" commencent et finissent pas les mêmes lettres
Par chance encore, SQL compare les chaines qu'elles soient en minuscule ou en majuscule --> Pas la peine de se torturer avec le text.
Exemple :
   Dim maVille As String
   maVille = maTextBox.Text
   If maVille Like "Saint*" Then
      maVille = Replace(maVille, "Saint", "S%t")
   End If
   req="select Client.Nom, " & _
       "       Client.Prenom, " & _
       "       Client.Adresse, " & _
       "       Client.CodePostal, é & _
       "       Client.Ville, " & _
       "       Client.Telephone " & _
       "  FROM Client " & _
       "LEFT JOIN Cp ON Client.Ville = Cp.Ville " & _
       " WHERE Cp.Ville Like '" & maVille & "'"

Tu remarqueras que le Like se traite différemment en VB6 qu'en SQL :
   VB6 : On compare avec une étoile *
   SQL : On compare avec un pourcent %

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
PS : Je ne connais pas la syntaxe avec les "JOIN" : cet exemple ne fait que reprendre ta syntaxe.
Messages postés
166
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
25 octobre 2011

Merci jack, c trés gentille.

.