Bonjour,
je m'adresse aux 2 listes car la question vaut pour les 2 suites. Puisque l'on parle beaucoup de Base ces temps-ci j'aurai une question. Un ami me demande de lui venir en aide. Il a développé, à l'aide du cours que j'ai fait sur Base, une base de données de son arbre généalogique. Sa question : il veut rechercher une personne identifiée par un champ qu'il a appelé No SOSA : Hélas il l'a défini en type "Numérique". je dis hélas car lorsque qu'il a voulu créer une requête paramétrée, dont l'élément à chercher est un No SOSA (LIKE : Recherche) il a constaté que ceci ne s'appliquait qu'à des champs de type texte. Juste en passant ... il est possible de faire une requête paramétrée sur un Numérique avec ACCESS (Comme [Formulaires]![TABLE1]![No SOSA].
On peut noter cependant que l'on ne peut baser une requête sur un formulaire dans OOo Base (ou LiBo)
Mon collègue craint devoir tout refaire (à juste titre) s'il change le type de No SOSA de numérique en Texte [VARCHAR]. y aurait t'il une possibilité d'écrire cette requête en SQL ?
merci
Bonjour Claude,
Mon collègue craint devoir tout refaire (à juste titre) s'il change le
type de No SOSA de numérique en Texte [VARCHAR]. y aurait t'il une
possibilité d'écrire cette requête en SQL ?
Il peut toujours essayer avec LIKE CAST('No SOSA' as VARCHAR) ou LIKE
CONVERT('No SOSA', VARCHAR), mais je n'ai pas testé.
Alex
Re,
Merci Alex,
Peut-être n'ai je pas été assez clair, mais la question est de sortir l'enregistrement _et lui seul_ (avec tous les champs disponibles) correspondant au critère : No SOSA en l'occurence. Effectivement ton code fonctionne pour une série de valeurs répondant au critère imposé dans la requête %3% dans ton exemple.
Claude
Rebonjour Claude,
Merci Alex,
Peut-être n'ai je pas été assez clair, mais la question est de sortir
l'enregistrement _et lui seul_ (avec tous les champs disponibles)
correspondant au critère : No SOSA en l'occurence. Effectivement ton
code fonctionne pour une série de valeurs répondant au critère imposé
dans la requête %3% dans ton exemple.
Euh, j'ai du mal comprendre, je repars du début :
Soit un champ, de type NUMERICAL, appelé "No SOSA"
Ton utilisateur cherche tous les enregistrements dont le champ "No SOSA"
contiendrait la valeur 'No SOSA' ?
Comment-a-t-il pu alors à l'origine saisir 'No SOSA' comme valeur dans
le champ de type NUMERICAL, qui ne devrait accepter que des valeurs
"nombres" ? Normalement ce n'est pas possible.
Ou alors, je n'ai vraiment rien pigé 
Alex
Alex,
Je n'ai pas vu sa base mais je pense que mon collègue a un champ No SOSA numérique , et différent pour chaque individu de son arbre. (ce pourrait sa clé primaire ...) il veut sortir la fiche correspondante à l' individu dont le No SOSa est : 1234 (par exemple) .Effectivement et étant donné que ce champ est numérique il ne peut écrire dans sa Requête : comme critère LIKE: Recherche.
A+
Claude
Bonjour
Je ne comprends pas non plus...
fricard Claude wrote:
il veut sortir la fiche correspondante à l' individu dont le No SOSa est :
1234 (par exemple) .
Effectivement et étant donné que ce champ est numérique il ne peut écrire
dans sa Requête comme critère LIKE:
Si on recherche un seul individu dont le numéro est par exemple 1234 on
n'utilise pas LIKE on utilise comme critère 1234.
Si on veut rechercher au contraire, et par exemple, tous les individus dont
le numéro commence par 12, Alex a donné la réponse. On utilise par exemple :
SELECT CAST ( "RéfClient" AS "VARCHAR" ) AS "CleTexte", "ClientsNumeric".*
FROM "ClientsNumeric" WHERE "CleTexte" LIKE '12%'
Alex,
Je n'ai pas vu sa base mais je pense que mon collègue a un champ No
SOSA numérique , et différent pour chaque individu de son arbre. (ce
pourrait sa clé primaire ...) il veut sortir la fiche correspondante à
l' individu dont le No SOSa est : 1234 (par exemple) .Effectivement et
étant donné que ce champ est numérique il ne peut écrire dans sa
Requête : comme critère LIKE: Recherche.
Hmm, je ne vois que la solution classique de comparaison de nombres :
Premier paramètre :
= :Limite_Inf
Deuxième paramètre :
<= :Limite_Sup
Sinon, changer la définition de son champ NUMERICAL en VARCHAR, a priori
ça marche sans trop de dégâts. Pour être certain, créer un nouveau champ
VARCHAR, dans lequel on copierait toutes les valeurs du champ NUMERICAL,
puis refaire la requête paramètrée.
Alex
De fait il reste comme solution de créer un champ No SOSA_bis de type VARCHAR dans lequel on copierait les valeurs de No SOSA . y aurait-il un moyen de faire cette copie avec une requête ?
Quant à Pierre-henri il aura compris qu'il s'agissait bien d'une requête dans lequel on donne en paramètre le No SOSA
merci à vous deux
Claude
fricard Claude wrote:
De fait il reste comme solution de créer un champ No SOSA_bis de type
VARCHAR
Cela ne me semble toujours pas nécessaire...
En effet, si toutefois je suis le Pierre-henri évoqué ici :
fricard Claude wrote:
Quant à Pierre-henri il aura compris qu'il s'agissait bien d'une requête
dans lequel on donne en paramètre le No SOSA
Oui, j'ai compris qu'il s'agissait d'une requête paramétrée mais cela ne
change rien à la syntaxe pour le LIKE
Pour éviter de "parler dans le vide", ci-joint une base. Lancer la requête
et à l'invite de saisie du paramètre saisir 1234 pour ne sélectionner que...
le n° 1234, saisir 12% pour obtenir les n° 12, 123, 1234
http://nabble.documentfoundation.org/file/n3200861/ReqLikeNum.odb
ReqLikeNum.odb
Cordialement
Pierre-Yves
Pierre-Yves,
Ton exemple répond complétement à la question je vais appliquer cela avant de proposer ta solution à mon collègue. Je ne suis pas très au fait des commandes SQL ...
Merci et A+
Claude
Apparemment il suffit d'écrire*:Recherche* comme critère colonne NO SOSA, ça fonctionne y compris avec un type numérique...étonnant non ?
la commande SQL générée :
SELECT "ID" AS "ID", "NOM" AS "NOM", "Prénom" AS "Prénom", "No SOSA" AS "No SOSA" FROM "Table1" WHERE "No SOSA" = :Recherche
Claude
Bonjour,
Je n'ai pas essayé, mais je crois que tu peux écrire :Recherche, ou :Search, ou :Find, ou :Trouve, ou :Tintin, :Toto, :Tutu ou même :Anticonstitutionnellement, ça marche de la même façon ; ce qui est important dans l'histoire, c'est beaucoup moins le ":qquechose" que le "=" ; c'est vrai que pour vérifier l'égalité entre deux nombres, mettre le signe égal, il fallait y penser (perso, j'avoue que c'est plutôt avec le like, que j'ai eu du mal au début ; comme quoi, tout le monde n'est pas fait pareil)
Donc, en gros, on utilise "=" lorsque l'on veut vérifier une égalité entre deux nombres, et on utilise "like", lorsque l'on veut vérifier une égalité entre deux valeurs non numériques.
A+
Doc,
Effectivement quelque soit le mot écrit après " : " ça fonctionne , et tu as résumé la situation.
On apprend, ou on découvre tous les jours...
A+
Claude
Bonjour
Claude FRICARD wrote:
Apparemment il suffit d'écrire*:Recherche* comme critère colonne NO
SOSA, ça fonctionne y compris avec un type numérique...étonnant non ?
Je doute que cela fonctionne si tu entres en mode ébauche *:Recherche*
(avec les *). Ceci devrait être refusé.
En revanche la syntaxe :
Claude FRICARD wrote:
la commande SQL générée :
SELECT "ID" AS "ID", "NOM" AS "NOM", "Prénom" AS "Prénom", "No SOSA"
AS "No SOSA" FROM "Table1" WHERE "No SOSA" = :Recherche
Serait celle que tu aurais si tu entres dans le mode ébauche le critère
:Recherche
Le signe = n'est absolument pas nécessaire (il est d'ailleurs supprimé en
mode ébauche).
Il n'est indispensable qu'en mode SQL.
J'ajoute que j'indiquais déjà dans ma première réponse qu'il n'était pas
nécessaire d'utiliser quelque mot clé que ce soit si on fait une recherche
"exacte".
Tout ceci est détaillé dans la FAQ :
http://wiki.documentfoundation.org/FR/FAQ/Base/115
Docgranville wrote:
je crois que tu peux écrire :Recherche, ou :Search, ou :Find, ou :Trouve,
ou :Tintin, :Toto, :Tutu ou même
:Anticonstitutionnellement, ça marche de la même façon ; ce qui est
important dans l'histoire, c'est beaucoup moins le ":qquechose" que le "="
Tu fais erreur, cf. ci-dessus le = n'est pas utile en mode ébauche et ce
sont bien les ":" qui indique que l'on utilise un paramètre à saisir lors de
l'exécution.
Attention, il ne faut pas confondre le type de recherche (exacte ou
approchée, "égal" ou "comme", = ou LIKE) avec le déclenchement de la boite
de dialogue de saisie de paramètre.
J'ajoute pour terminer (c'est précisé dans la FAQ) qu'on ne peut pas mettre
"n'importe quoi" derrière les ":" (l'espace, en particulier est interdit).
Cordialement
Pierre-Yves
Je doute que cela fonctionne si tu entres en mode ébauche *:Recherche*
(avec les *). Ceci devrait être refusé.
Bonjour,
Je crois que les mots encadrés par * *
correspondent à ceux qui ont été mis en gras dans le courriel et réinterprété de cette manière par le serveur de courriels.
J.M
Bonjour Jean-Michel
Message du 27/07/11 13:52
De : "Jean Michel PIERRE"
Bonjour, Je crois que les mots encadrés par * * correspondent à ceux qui
ont été mis en gras dans le courriel et réinterprété de cette manière par
le serveur de courriels.
Ah ben oui... où avais-je la tête ? 
Merci
Pierre-Yves
Une messagerie gratuite, garantie à vie et des services en plus, ça vous tente ?
Je crée ma boîte mail www.laposte.net
Merci à vous qui avez apporté vos lumières sur cette question - Pourvu que Base soit maintenu dans l'avenir :ce sera ma conclusion.
PS:Il est vrai que les mots écrits en gras donnent lieu à des confusions 
Claude
Bien qu'un peu tardivement pour cause de vacances, je reviens sur ce message étonnant.
Je fais du SQL au travail tous les jours et lorsque je recherche un client dans la base, j'écris par exemple : select * from identite where nom = 'MARTIN' and prenom = 'JEAN'. J'utilise donc bien = pour comparer deux valeurs non numériques.
Il est bien entendu vrai qu'utiliser LIKE dans ce contexte donnerait le même résultat. Toutefois, l'utilisation de LIKE la plus courante porte sur la correspondance de motifs, donc rechercher des données dont la structure répond à un modèle. Exemple : je veux tous les codes commençant par deux lettres suivies de 3 chiffres puis d'autres caractères et ne se terminant pas par 0. Ou plus simplement, je veux tous les employés dont le nom commence par MAR et le prénom par J.
RR