Requête très compliquée

Product :4D - 4D Server

J’ai une table des tables qui s’appelle [TABLES] (!)
Chaque table y est représentée par un enregistrement dont l’identifiant (LONGINT) est le numéro de cette table.
Parmi elles, la table [PATIENT] a le numéro 1

Le code : QUERY([Tables];[Tables]Identifiant=1) ne trouve pas son enregistrement !
En revanche, en utilisant le dialogue de recherche multi-critères, l’enregistrement [PATIENT] est bien trouvé !
Encore plus bizarre : ce problème n’affecte que certains enregistrements de [TABLES]

J’ai vérifié l’enregistrement, réécrit le champ [Tables]Identifiant, vérifié puis compacté les données, reconstruit l’index… rien n’y fait !
Je crains d’avoir une énormité sous les yeux et de ne pas la voir tellement elle est grosse.

Une piste ?

J’éviterais d’appeler une table “table” avec le sql, mais là, avec le “s” et en plus en langage 4D “classique”, je ne vois pas en quoi ça le dérange. Tu as tenté de la renommer ?

Bonjour
Je commenderais par passer la base au CSM afin de voir si un index n’est pas abimé.

Cordialement
Didier

Je l’ai fait : sans résultat !

Encore plus fort, et peut-être l’amorce d’une piste :

Le code que j’avais posté était exécuté dans une méthode appelée par une ligne d’un menu associé à un formulaire.
Pour essayer d’avancer, j’ai créé une nouvelle méthode TEST :

<code 4D>
QUERY([Tables];[Tables]Identifiant=1)

If (Records in selection([Tables])=0)
ALERT(“Sélection vide”)

Else
ALERT(“Trouvé”)
End if
</code 4D>

Quand je lance cette méthode directement depuis l’éditeur de méthodes (‘Exécuter dans un nouveau process’ ou ‘Exécuter dans le process Application’), j’obtiens l’alerte "“Trouvé”

Quand j’associe cette même méthode TEST (sans aucune modification) à la ligne de menu et que j’appelle cette ligne, j’obtiens l’alerte (“Sélection vide”). !

J’ai alors coché ‘Démarrer un process’ pour cette ligne de menu et là j’obtiens l’alerte "“Trouvé”.

J’en déduis qu’il y a quelque chose qui interfère dans le process (donc le formulaire) depuis lequel le menu est appelé.
Mais qu’est-ce-qui peut bien interférer sur un code aussi simple ? ?

Bonjour…

Je me souviens d’un cas réel rapporté par un client.
La recherche marchait de temps en temps (sic) ou plutot qui ne marchait “pas” de temps en temps.

Il s’agissait en fait d’une recherche programmée, appelée “de temps en temps” qui n’etait pas fermée (une étoile qui trainait donc…) Evidemment, quand on appelait une autre recherche ensuite, c’était “juste” la fin de la précédente et le résultat était généalement mauvais :slight_smile:

Ça ne pourrait pas être votre cas ?

La méthode TEST s’exécute dans quel contexte (nouveau process ? process courant ? )
(si vous appellez a méthode TEST une seconde fois, vous obtenez le même résultat ?)

Roland

Tu as peut-être raison, d’autant que Bernard dit que ça marche via l’éditeur…
Requête mal fermée, fixer destination recherche oublié ?..

Merci à Roland et Arnaud

Effectivement, il manquait un SET QUERY DESTINATION (Into current selection) dans une méthode appelée par une méthode objet du formulaire auquel le menu était associé !

Ça m’a été vraiment utile de pouvoir en parler avec vous.
J’étais vraiment coincé sur cette requête simplissime qui ne marchait pas.
Le problème était ailleurs !

Merci encore

Ha, c’était le coup de l’ouvrante sans sa fermante. Le http://www.bluecompany.fr/index.php/fr/composants-pour-4d/code-analysis-helpercomposant CAH> de Paul repère ce genre de choses, c’est fort utile…

PS : je touche pas de royalties avec Paul, il ne veut rien savoir.