Aller au contenu

Problème avec des requêtes


Messages recommandés

Posté(e)

Bonjour,

 

Je pense que c'est un bug!

 

Je viens de m'apercevoir que lorsque ma requête contient dans une condition (AND NOT donnée < nombre négatif), elle ne fonctionne pas (alors qu'elle devrait, enfin il me semble: j'ai des données positives ET négatives...)

 

Le problème est seulement avec NOT, car avec AND seul je n'ai pas de problème avec les nombre négatif.

 

Si ma requête est (AND NOT donnée < nombre positif), la requête fonctionne.

 

Bon même si cela peut paraître étrange de faire des requêtes sur des nombres négatifs, ce dysfonctionnement me mets dans l'embarras, surtout que je ne vois pas comment le contourner.

 

A moins que quelqu'un ai déjà réalisé des requêtes complexe sur des nombres négatifs sans problèmes.

NB: MAP 2011 Version 3

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Hello

 

Je viens de faire des tests (en version 32 bits) avec MAP 2012 et 2013 sans trouver de bugs !

Et ce a la fois sur un champ OD ENTIER et sur un champ OD REEL ...

 

Cependant je ne suis pas sur de refaire exactement la meme requete que toi ?

C une requete sur 2 lignes/conditions

Je combine un emplacement geographique (Type fenetre)

avec un AND NOT Donnees: TEST.NBR_REEL

mais je n'ai rien groupe avec des parentheses ...

 

D'autre part je ne suis pas sur un MAP 2010 ou 2011, donc ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello lecrabe,

 

Ben j'y comprends rien du tout...

 

Je me suis fait un petit fichier de données test.

Et avec la requête suivante:

http://pix.toile-libre.org/upload/img/1354201838.png

cela fonctionne parfaitement, cela me retourne tous les objets dans l'intervalle d'index 0;-1 inclus (sur un ensemble de 5 à -5 avec des valeurs tous les 0.5

 

Dans mon cas concret, avec exactement la même requête sur un ensemble de (4.250 à -1.509) avec des intermédiaires à valeur rondes (4 3 2 1 0 -1) et bien 0 et -1 me sont renvoyés (normal) MAIS aussi -1.509 ???

 

Le champ index étant en réel dans les 2 fichiers...

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Hello

 

SVP tu m'envoies en MP ton DWG de Test (DWG associe en fait)

et le DWG de depart avec deja ta requete (avec 3 lignes/conditions) sur le DWG de Test toute prete

 

+ qq cercles/rectangles rouges indiquant ce qui doit s'afficher ou pas ...

 

Ainsi j'essaye sur MAP 2012/2013 pour voir ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello

 

Merci pour les fichiers ...

 

J'ai le MEME probleme que toi avec MAP 2012 et MAP 2013 ...

 

Je pense que MAP (dans les requetes sur le groupe) teste MAL les valeurs negatives sur les REELs - A verifier avec les entiers ?

Ou alors on ne sait pas faire la requete correcte !

 

*** 1 ***

Mais j'ai trouve un truc encore plus desesperant !

Tu fais seulement INDEX_PR = 0 comme critere de selection ...

Et ce CRETIN de MAP dessine TOUS les PRs

alors que certains sont negatifs, d'autres sont positifs, et un PR = 0

 

En plus avec INDEX_PR 0 (Zero) il dessine bien TOUS les PRs sauf le PR = 0

 

*** 2 ***

Avec simplement INDEX_PR >= 0 ou =

alors que avec > ou > , c OK !!

 

Il y a un sacre probleme avec le ZERO et aussi avec = ?

et SURTOUT des qu'il y a des tests sur valeurs negatives !

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Merci de tes tests,

 

Si on ne peut plus faire confiance à des requêtes basiques et qu'on obtient des valeurs erronées, il faut qu'on m'explique l'utilité de Map...

 

Pourtant avec le fichier de test (ou est issue l'image de mon post précédent) tout se passe correctement.

 

J'ai donc pensé à l'ordre de création des entités (test effacer dernier, effacer dernier ....), mais que nenni, malgré une remise en ordre avec ceci:

((lambda ( / )
(while (setq ent (entsel))
	(cond
		(ent
			(setq dxf_cod (entget (setq source_obj (car ent))))
			(foreach m (foreach n dxf_cod (if (not (member (car n) '(0 100 67 410 8 100 10 210 50))) (setq lremov (cons (car n) lremov))))
				(setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod))
			)
			(entmake dxf_cod)
			(setq target_obj (entlast))
			(COPY_DATA source_obj target_obj "All")
			(entdel source_obj)
		)
	)
)
))

(NB : copy_od.lsp chargé au préalable)

j'ai essayé dans les 2 sens (croissant et décroissant), toujours pareil.

 

J'ai essayé aussi de supprimer les caractères spéciaux "_" de mon nom de champ INDEX, pas mieux.

Je ne vois vraiment pas pourquoi ça ne fonctionne pas avec mon fichier. Il doit bien y avoir une raison, mais laquelle? En tout cas Map n'est pas à la hauteur, pour moi il y a un bug sérieux.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonsoir,

 

A priori c'est un souci dans le DWG. D'ailleurs quand on le sauvegarde, on a un message en ligne de commande : "Mise à jour de l'index dans le block *Model_Space"

 

J'ai fait un MAPEXPORT en SDF (classe Point) avec tous les champs, puis un MAPIMPORT du SDF. J'obtiens les même données, par contre les champ ont été classés par ordre alphabétique. Avec ce nouveau fichier, pas de souci, les requêtes positives et négatives avec ou sans NOT fonctionnent parfaitement.

 

Par contre je n'ai pas trouvé la cause du dysfonctionnement dans le dessin d'origine.

 

Olivier

Posté(e)

C'est bon j'ai trouvé, chaque point possédait 4 enregistrements de la table, 1 rempli comme on le voit dans les propriétés d'AutoCAD et 3 enregistrement avec les valeurs par défaut et comme la valeur par défaut de INDEX_PR est 0, les 3 autres enregistrements ont 0 comme valeur d'INDEX_PR. Donc le test de condition avec 0 donnait toujours un résultat logique bien que surprenant.

 

Olivier

Posté(e)

Hello Olivier

 

Je suis NUL NUL car je n'ai pas pense a regarder le nombre de records OD

sur chaque entite, c pourtant un piege ULTRA-CLASSIQUE

 

Et en effet un MAPEXPORT puis MAPIMPORT filtre tout ca ...

en ne gardant que le 1er Record !

 

Je m'etais focalise dans les noms de tables et noms de champs OD

en changeant tout car il y avait un TIRET (signe moins)

qui aurait peut etre pu generer un bug !!

 

En resume Olivier, you are the best !

 

BRAVO, lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello Patrice,

 

c'est un peu grâce à toi que j'ai trouvé. J'ai lancé la commande MQSELECT et comme tu m'as fait rajouté le nombre d'enregistrement par table, il m'indiquait 24 pour seulement 6 objets, ça a fait tilt.

 

Olivier

Posté(e)

Merci beaucoup Olivier de ton éclairage.

 

Comme Patrice je suis nul, car j'ai été déjà confronté à ce problème de nombre d'enregistrement, mais je n'ai pas fais le lien.

 

D'ailleurs j'avais écrit ceci à la volée pour m'éviter l'export puis le ré-import.

(defun c:del_record_other0 ( / js n obj tbllist numrec ct)
 (setq js
   (ssget "_X"
     (list
       '(0 . "POINT") '(8 . "PR")
       (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
       (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
     )
   )
 )
 (cond
   (js
     (repeat (setq n (sslength js))
       (setq obj (ssname js (setq n (1- n))))
       (setq tbllist (ade_odgettables obj))
       (foreach tbl tbllist
         (cond
           ((eq tbl "POINTS-ROUTIERS")
             (setq numrec (ade_odrecordqty obj tbl))
             (setq ct (1- numrec))
             (while (not (zerop ct))
               (ade_oddelrecord obj tbl ct)
               (setq ct (- ct 1))
             )
           )
         )
       )
     )
   )
 )
)

 

En tout cas, en effet, cela fonctionne beaucoup mieux maintenant.

Dommage que dans les requêtes il ne soit pas possible de faire un distinguo sur des tables multiples, car à priori on ne sait pas sur quel niveau d'enregistrement AutocadMap va faire sa requête.

Il ne sont plus à une variable près chez AutoDesk, il pourrait en implémenter une qui verrouille / déverrouille l'enregistrement multiple.

 

Encore Merci à tous les deux de votre temps passé.

 

Il faudra que je vérifie quand même les routines que j'ai faites à la volée pour renseigner mes OD, car je pense que le problème de départ vient de là. (j'ai du faire une erreur de conception qui cumule mes données au lieu de les écraser...)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Je reviens juste sur le sujet pour vous proposer le code si dessus remanié pour un traitement plus généraliste.

 

Donc celui-ci va vous permettre de nettoyer les tables de données d'objets qui auraient plusieurs enregistrements. Seul tous les objets de l'espace courant seront traités.

Cette routine vous évitera l'export et le ré-import qui était la solution pour se débarrasser des ces multiples enregistrements en trop.

 

(defun c:del_record_other0 ( / js n obj tbllist numrec ct lst)
 (setq js
   (ssget "_X"
     (list
       (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
       (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
     )
   )
   lst nil
 )
 (cond
   (js
     (repeat (setq n (sslength js))
       (setq obj (ssname js (setq n (1- n))))
       (setq tbllist (ade_odgettables obj))
       (cond
         (tbllist
           (foreach tbl tbllist
             (setq numrec (ade_odrecordqty obj tbl))
             (cond
               ((> numrec 1)
                 (setq ct (1- numrec))
                 (while (not (zerop ct))
                   (ade_oddelrecord obj tbl ct)
                   (setq ct (- ct 1))
                 )
                 (if (not (member tbl lst))
                   (setq lst (cons tbl lst))
                 )
               )
             )
           )
         )
       )
     )
   )
 )
 (if lst
   (mapcar '(lambda  (x) (princ (strcat "\nLa table " x " à été nettoyée"))) lst)
   (princ "\nAucune table à nettoyer.")
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité