PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Requête SQL n'affiche pas tous les enregistrements WD26
Requête SQL n'affiche pas tous les enregistrements WD26
Débuté par REY Bruno, 20 sep. 2021 16:44 - 16 réponses
Posté le 20 septembre 2021 - 16:44
Bonjour,

WD26 avec le connecteur natif SQL Serveur
J'ai un fichier de données dans une base SQL qui contient 287 947 enregistrements.
Je vois bien tous ces enregistrements avec l'outil "WDMAP".
Lorsque je fais une requête simple sans aucun critères vers ce fichier pour visualiser tous les enregistrements par exemple, la requête n'en ressort que 269 244.
Lorsque je fais une requête avec critères, il me manque les enregistrements de 269 244 à 287 947.
Je ne vois pas pourquoi j'ai une telle restriction sur ce fichier de données.
Merci pour vos lumières, j'ai forcément du rater quelque chose.

Cordialement,

Bruno REY
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 20 septembre 2021 - 17:11
Bonjour

Si tu fais un select count(*) sur ton fichier ça renvoie combien en passant par SQL Server managemetn studio et combien en passant par l'accès natif ?

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
7 messages
Posté le 20 septembre 2021 - 18:54
Alors, comme je ne suis pas un utilisateur chevronné de SQL, quand je tape Select count(*) dans le script de commande, cela ne fonctionne pas.

--
Bruno (42)
Développement de logiciles pour mon entreprise.
Windev 17 et Webdev 19
Membre enregistré
417 messages
Popularité : +6 (6 votes)
Posté le 20 septembre 2021 - 19:01
Bonsoir,
Il vaut mieux montrer la requête avec critère.
Membre enregistré
7 messages
Posté le 20 septembre 2021 - 19:20
SELECT
PART.IDPART AS IDPART,
PART.Name AS Name
FROM
PART
WHERE
PART.Name = {ParamNAME}

--
Bruno (42)
Développement de logiciels pour mon entreprise.
Windev 17 et VinDev 26
Posté le 21 septembre 2021 - 08:12
Bonjour,

Pour le comptage d'enregistrements, la syntaxe est "SELECT count(*) FROM nom_de_ta_table_ou_vue"
Donc SELECT COUNT(*) FROM PART te donnera le total d'enregistrements de ta table.

Vu ta requête, l'écart se situe sur ton critère de filtre : tu dois avoir des enregistrement sans Name (NULL ou différent de ton paramètre.

Pour compter les enregistrements avec Name non renseigné (null ou vide), tu peux par exemple faire ceci :
SELECT COUNT(*) FROM PART WHERE ISNULL(Name, '')='' -- NAME vide ou NULL

Ainsi normalement tu dois obtenir :
SELECT COUNT(*) FROM PART WHERE ISNULL(Name, '') = '' -- NAME vide ou NULL
+
SELECT COUNT(*) FROM PART WHERE ISNULL(Name, '') <> '' -- NAME valorisé
=
SELECT COUNT(*) FROM PART

Bon dev
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 21 septembre 2021 - 08:44
Alors, comme je ne suis pas un utilisateur chevronné de SQL, quand je tape Select count(*) dans le script de commande, cela ne fonctionne pas.


Si tu fais select count(*) from PART qu'est ce que ça donne côté SQL server management et la même chose avec une requête Windev ?

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
7 messages
Posté le 21 septembre 2021 - 16:56
Bonjour Flef,

SB a écrit :
Alors, comme je ne suis pas un utilisateur chevronné de SQL, quand je tape Select count(*) dans le script de commande, cela ne fonctionne pas.


Si tu fais select count(*) from PART qu'est ce que ça donne côté SQL server management et la même chose avec une requête Windev ?

--
Cordialement,

Philippe SAINT-BERTIN


Bonjour Philippe,

Avec Microsoft SQL Serveur management : 288 269
Avec une requête Windev : 269 244

--
Bruno (42)
Développement de logiciels pour mon entreprise.
Windev 17 et VinDev 26
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 22 septembre 2021 - 09:21
Si tu es sûr d'attaquer la même base alors c'est qu'il y a un bug dans l'accès natif, ce qui est possible. Dans ce cas, il faut te retourner vers le ST.

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
1 935 messages
Popularité : +53 (65 votes)
Posté le 22 septembre 2021 - 10:10
REY Bruno a écrit :
Bonjour,

WD26 avec le connecteur natif SQL Serveur
J'ai un fichier de données dans une base SQL qui contient 287 947 enregistrements.
Je vois bien tous ces enregistrements avec l'outil "WDMAP".
Lorsque je fais une requête simple sans aucun critères vers ce fichier pour visualiser tous les enregistrements par exemple, la requête n'en ressort que 269 244.
Lorsque je fais une requête avec critères, il me manque les enregistrements de 269 244 à 287 947.
Je ne vois pas pourquoi j'ai une telle restriction sur ce fichier de données.
Merci pour vos lumières, j'ai forcément du rater quelque chose.

Cordialement,

Bruno REY


2 possibilités (au moins) :
1. il y a une limitation sur le nombre d'enregistrements retournées par une requête sur l'accès natif SQL Serveur (à voir avec le ST),
2. il y a un bug sur la lecture de l'enregistrement 269 244 qui interrompt la requête...

--
Bon dev,
Jean-Pierre
Posté le 23 septembre 2021 - 14:27
question bête... tu fais bien tes tests en mode 64 bits ?

La limitation pourrait simplement être un problème de mémoire...
Membre enregistré
7 messages
Posté le 27 septembre 2021 - 07:45
Philippe SB a écrit :
Si tu es sûr d'attaquer la même base alors c'est qu'il y a un bug dans l'accès natif, ce qui est possible. Dans ce cas, il faut te retourner vers le ST.

--
Cordialement,

Philippe SAINT-BERTIN


Bonjour Philippe, oui c'est bien la même base.

--
Bruno (42)
Développement de logiciels pour mon entreprise.
Windev 17 et VinDev 26
Membre enregistré
7 messages
Posté le 27 septembre 2021 - 07:50
Jean-Pierre a écrit :
REY Bruno a écrit :
Bonjour,

WD26 avec le connecteur natif SQL Serveur
J'ai un fichier de données dans une base SQL qui contient 287 947 enregistrements.
Je vois bien tous ces enregistrements avec l'outil "WDMAP".
Lorsque je fais une requête simple sans aucun critères vers ce fichier pour visualiser tous les enregistrements par exemple, la requête n'en ressort que 269 244.
Lorsque je fais une requête avec critères, il me manque les enregistrements de 269 244 à 287 947.
Je ne vois pas pourquoi j'ai une telle restriction sur ce fichier de données.
Merci pour vos lumières, j'ai forcément du rater quelque chose.

Cordialement,

Bruno REY


2 possibilités (au moins) :
1. il y a une limitation sur le nombre d'enregistrements retournées par une requête sur l'accès natif SQL Serveur (à voir avec le ST),
2. il y a un bug sur la lecture de l'enregistrement 269 244 qui interrompt la requête...

--
Bon dev,
Jean-Pierre


Bonjour Jean-Pierre,
En fait il faut que je trouve l'astuce pour ne pas lire tous les enregistrements mais commencer par le milieu du fichier ou le dernier tiers. Dans mon application ce sont les derniers enregistrements qui m'intéresse.

--
Bruno (42)
Développement de logiciels pour mon entreprise.
Windev 17 et VinDev 26
Membre enregistré
3 881 messages
Popularité : +227 (347 votes)
Posté le 27 septembre 2021 - 08:19
Bruno42 a écrit :
Dans mon application ce sont les derniers enregistrements qui m'intéresse.

Les derniers enregistrements ou les enregistrements qui ont été ajoutés depuis une certaine date ?
Ce n'est pas parce que le no d'un enregistrement est X qu'il est plus récent que l'enregistrement avec le n° X-1.
Au mieux, si tu utilises une PK auto, il faut faire la recherche sur la PK. Mais en général dans ton cas, il est préférable de timestamper ton tuple

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 27 septembre 2021 - 11:20
Pour lire les x derniers il 2 solutions:

1. select * from matable order by cle desc limit x (ça fonctionne mais c'est pas terrible, mais parfois on n'a pas le choix)
2. select * from matable where date_heure/date >= DateLimite (c'est le mieux à partir du moment où l'index est créé bien évidemment)

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
7 messages
Posté le 27 septembre 2021 - 15:10
Le fait de lire qu'un certain nombre d'enregistrements, ne résous pas mon problème.
Je lis des enregistrements que je ne voyais pas avant, mais malgré tout, je ne lis pas la fin du fichier, il me manque quelques milliers d'enregistrements.
Les enregistrements de cette base ont un identifiant unique, il est donc facile de voir que c'est toute la fin du fichier qui me manque.

Comme je l'écris au début, c'est quand même étonnant que l'outil WDMAP puisse voir l'ensembles des enregistrement mais pas un toute simple requête.

--
Bruno (42)
Développement de logiciels pour mon entreprise.
Windev 17 et VinDev 26
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 27 septembre 2021 - 15:55
Pour savoir si c'est l'accès natif qui pose problème, tu te connectes à ta base avec SQLConnecte() en ODBC, tu lances la même requête count(*) et tu vois le résultat.

Si tu as la même chose qu'avec SSMS, alors c'est qu'il y a un problème avec l'accès natif.

Au passage, que donne HNbEnr() sur le table ?

--
Cordialement,

Philippe SAINT-BERTIN