Suite

Le modèle ArcGIS n'accepte pas ma requête SQL

Le modèle ArcGIS n'accepte pas ma requête SQL


J'exécute un modèle qui divise un ensemble de données en plusieurs tables dbf en fonction d'une requête. Cependant, seule la moitié de la requête est honorée.

Le champ PopDenZone n'est pas accepté et j'obtiens d'autres valeurs dans la sortie, mais pas tout le total, peut-être 50 à 100 enregistrements sont jetés dans la sortie d'autres zones de densité.

Quelqu'un sait ce qui peut être à l'origine de ce comportement ? La partie de la requête pour laquelle j'ai besoin de descriptions de priorité spécifiques fonctionne correctement.

Utilisation d'ArcGIS 10.1


Avez-vous besoin de parenthèses autour d'une partie de l'expression ? L'un ou l'autre des éléments suivants pourrait être correct, mais je suppose que c'est le dernier.

(PopDenZone = 'CPSE URBAN' AND Priority_Description = 'Life Threat') OU Priority_Description = 'Urgent Medical' PopDenZone = 'CPSE URBAN' AND (Priority_Description = 'Life Threat' OU Priority_Description = 'Urgent Medical')

Essayez peut-être des parenthèses autour des expressions. Je pense que ce que tu essaies de dire c'est :

PopDenZone = 'CPSE URBAN' AND (Priority_Description = 'Life Threat' OR Priority_Description = 'Urgent Medical')

Il est à noter que :

(x ET y) OU z

est différent de :

x ET (y OU z)

Comment afficher les commandes en attente dans le graphique du tableau de bord Magento

Dans mes applications Magento 2 n'affichent pas le en attendant quantités de commandes et Ventes à vie, Commande moyenne, taxe, chiffre d'affaires, expédition valeurs dans le graphique comme avant.

Après quelques recherches, j'ai pensé qu'il n'affiche que "En traitement" (commandes facturées) ou "Achevée" commandes depuis leur apparition dans les graphiques.

Je veux les détails de la commande en attente dans le graphique.

Remarque : dans Magento 1 disponible mais pas Magento 2 disponible

Toute aide serait grandement appréciée.
Merci!!


4 réponses 4

Il vaut mieux utiliser un type de données DECIMAL(9,6) dans la base de données.

Cependant, si vous insistez sur un type de caractère, utilisez CHAR au lieu de NCHAR - vous n'acceptez que les points et les nombres, donc il n'y a jamais de "Unicode" qui réduise votre utilisation de l'espace de moitié.

Et puis vous pouvez valider avec quelque chose comme a.latitude LIKE '[0-3][0-9][0-9].[0-9][0-9][0-9][0-9][ 0-9][0-9]' ECHAPPEMENT '

' OU a.latitude COMME '[0-3][0-9][0-9].[0-9][0-9][0-9][0-9][0-9]' ÉCHAP '

' OU a.latitude LIKE '[0-3][0-9][0-9].[0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-3][0-9][0-9].[0-9][0-9][0-9]' ESCAPE '

' OU a.latitude LIKE '[0-3][0-9][0-9].[0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-3][0-9][0-9].[0-9]' ESCAPE '

' OU a.latitude COMME '[0-3][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude LIKE '[0-9][0-9].[0-9][0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9][0-9].[0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9][0-9].[0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9][0-9].[0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9][0-9].[0-9]' ESCAPE '

' OU a.latitude COMME '[0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9].[0-9][0-9][0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9].[0-9][0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9].[0-9][0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9].[0-9][0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9].[0-9][0-9]' ESCAPE '

' OU a.latitude COMME '[0-9].[0-9]' ESCAPE '

' OU a.latitude COMME '[0-9]' ECHAP '

Notez que faire cela avec des types de caractères est à la fois ennuyeux et loin d'être aussi performant.

Notez que le chiffre le plus à gauche est limité à 0-3, car vous n'auriez jamais de latitude ou de longitude commençant par 4 ou plus (je suppose que les degrés).

Puisque vous utilisez SQL Server 2008 R2, vous pouvez également lire la question Stackoverflow Pourquoi utiliser le type de données géographiques SQL Server 2008 ?. Un résumé très bref est : DECIMAL(9,6) est significativement plus petit, et pour un simple SELECT Lat, Long est significativement plus rapide. Cependant, pour effectuer des recherches de proximité précises (ce qui explique souvent pourquoi les coordonnées sont stockées), des calculs de distance (également souvent pourquoi vous en avez besoin) ou des zones, etc., le type de géographie est beaucoup plus simple et presque certainement plus précis.

Pour répondre à la question réelle, la fonction intégrée LEN() donnera le nombre total de caractères dans une chaîne et CHARINDEX() renverra la position d'une sous-chaîne donnée. Dans votre cas, avec un format requis de trois points-six, LEN() doit retourner "10" et CHARINDEX('.', valeur) doit retourner "4" pour avoir une entrée valide. En le mettant ensemble, vous obtenez

N'oubliez pas non plus que la latitude et la longitude sont délimitées par une sphère, elles sont donc limitées à +/- 180 (long) et +/- 90 (lat).

Une fois que vous connaissez la position du point décimal, vous pouvez utiliser SUBSTRING() pour séparer les degrés entiers de la partie fractionnaire et valider. ISNUMERIC() sera utile. Les plages peuvent être vérifiées à l'aide de COVERT() pour créer un flottant pour la valeur entière ou un entier pour chaque partie.

Je sais que vous pouvez être limité par des systèmes existants ou externes, mais le type de données est incorrect. SQL Server prend en charge des types géographiques spécifiques spécifiquement pour ce genre de chose. Ils sont basés sur des types à virgule flottante, ce qui aurait été un deuxième choix raisonnable.

Il ne doit accepter que ce format : (232.343244)

Je pense que cette spécification prête à confusion. Ce n'est pas vraiment un format qui montre des variations. Je crois que vous vouliez dire quelque chose comme ###.###### ou même XXX.YYYYYY . Si vous acceptez les valeurs de latitude et de longitude, celles-ci ont des plages valides, et les valeurs valides peuvent avoir des chiffres simples ou doubles à gauche de la virgule, comme vous le montrez dans les exemples « Données pouvant être saisies par l'utilisateur : ». Et, ils peuvent être positifs ou négatifs, vous devez donc autoriser un signe moins précédent (-), donc peut-être [-]###.###### ou [-]XXX.YYYYYY . Donc pour décrire cela, nous dirions : "Jusqu'à 3 chiffres à gauche de la virgule, et Jusqu'à 6 chiffres à droite de la virgule."

En outre, il n'y a pas beaucoup d'avantages à valider le nombre de chiffres à droite de la virgule car il ne s'agit que d'une question de précision et peut être arrondi ou tronqué. Veuillez consulter cette réponse pour plus de détails : quelle est la longueur maximale de latitude et de longitude ?

Le code suivant valide les plages valides réelles pour les deux types de valeurs (puisqu'ils ont des plages différentes - pourquoi autoriser 3 chiffres à gauche de la virgule pour Latitude alors qu'il n'utilisera jamais plus de 2 chiffres ?).

De plus, je ne savais pas trop quoi faire de votre condition AND CAST(A.GPS_LONGITUDE AS NVARCHAR) NOT LIKE'%*%'), mais je l'ai dupliqué ici. Il peut être modifié assez facilement si l'intention était d'ignorer les valeurs constituées d'un ou plusieurs astérisques. Enfin, s'il y avait un objectif spécifique à convertir le champ NVARCHAR en NVARCHAR, il devrait être indiqué dans la question (et si c'est le cas, vous devez spécifier une longueur maximale, comme dans NVARCHAR(30) plutôt que simplement NVARCHAR ).

Dans l'interface utilisateur de l'application, il y aura un bouton de téléchargement. En appuyant sur le bouton de téléchargement, les données sont envoyées à la base de données et validées dans une procédure stockée.

Puisque vous avez la possibilité de piéger les données avant il atteint la base de données, vous feriez vraiment mieux de faire cette validation dans le code de l'application car il est beaucoup plus facile (et plus efficace) de le faire.


La page de démarrage ressemble à AstroTurfing — avec des paiements sur Twitter — afin de renforcer la fausse perception de la ‘vie privée’

Publié dans Déception, Recherche à 5 h 02 par le Dr Roy Schestowitz

Résumé: AstroTurfing payant est-ce ce que Startpage — autrefois connu pour le respect de la vie privée et de la dignité des personnes — a été réduit à maintenant qu'il est apparemment dirigé par une société de surveillance (elle refuse d'aborder le sujet) ?

NOTRE page wiki Startpage, que nous avons commencée il y a quelques semaines, documente nos découvertes sur la vente (out) de Startpage — un moteur de recherche que nous utilisons et recommandons depuis des années. Tout allait bien jusqu'à ce qu'il soit vendu (au moins la majorité). Nous avons jeté un coup d'œil, sur Twitter, à toutes les publicités actuellement affichées [PDF] . Ils en fait Payer Twitter une grosse somme d'argent pour prétendre qu'ils respectent toujours la vie privée. Combien d'argent? C'est difficile à dire, mais il y a un budget dédié à ce mensonge. System1 paie-t-il la facture ?

“Il n'y a presque aucun commentaire de substance là, sauf le personnel de Startpage commentant/répondant à moi/ses.” “Apparemment,” un lecteur nous a dit, “Startpage a récemment diffusé une publicité sur Twitter pour renforcer son image. Voir celui avec tous les likes et retweets sur la “Big News”?”

Il y a quelque chose de "mauvais" dans le nombre de "j'aime" par rapport aux suivis. Activité de click-farming ? Des commentaires comme “Nice tweetMerci pour le partage” font une merveille et on appelle cela “big spam”. Il n'y a presque aucun commentaire de substance là, sauf le personnel de Startpage commentant/répondant à moi/ses. Ce genre de motif AstroTurfing-esque Est-ce que éveiller les soupçons. Cela ne peut pas être bon pour l'image de la page de démarrage. Ils ne sont plus dignes de confiance. █


Dovecot STARTTLS échoue à l'aide de fetchmail

J'essaie actuellement de mettre en place mon propre serveur de messagerie. Jusqu'à présent, tout semble bien car je peux me connecter à ce serveur de messagerie en utilisant Thunderbird. La seule chose que je dois faire est d'accepter mon propre certificat (auto-signé).

Maintenant que tout semble fonctionner, j'ai essayé de l'intégrer dans mon fetchmailrc local pour synchroniser automatiquement ma boîte aux lettres locale avec mon serveur de messagerie. Pour ce faire, j'ai ajouté les lignes suivantes à mon fetchmailrc :

l'exécution des services fetchmail donne les messages d'erreur suivants :

Au sein du serveur de messagerie, cela génère une déconnexion car les strattls n'ont pas pu être établis :

En regardant l'établissement de connexion à l'aide de wireshark, je viens de constater que les serveurs envoient un RST, ACK après que fetchmail ait envoyé le premier paquet appartenant à la poignée de main strattls (le premier qui est un peu cryptique et non lisible pour les humains).

Je suppose qu'il s'agit d'un problème avec ma configuration fetchmail car je peux me connecter manuellement à l'aide d'openssl :

Après cet établissement de connexion, tout fonctionne correctement et je peux me connecter comme prévu :

Je ne sais pas ce que je peux essayer d'autre pour le faire fonctionner, mais il semble que ce soit un problème lié à fetchmail. Si vous avez une idée de ce qu'il faut essayer, je serais heureux de le faire et de vous donner toutes les données/informations de sortie/journal nécessaires. Merci de votre aide.


Séparez vos préoccupations

La fonction pour le moment fait deux choses : trouve les clients correspondants et vérifie qu'elle n'est pas vide. Ajoutons plutôt un vérificateur par défaut :

C'est très étrange à lire :

Je connais NameError s mais je ne savais pas qu'UnboundLocalError était une exception distincte. Il est généralement déroutant d'avoir une variable assise toute seule à ne rien faire, bien que je sache pourquoi vous le faites dans ce cas. Je pense que votre booléen cédé a beaucoup plus de sens car s'il n'est pas cédé, il est parfaitement logique de le lire.

Pour le rendre plus explicite, votre docstring doit contenir la note que même si aucune valeur de RealEstatesCustomization n'est fournie, le générateur se rabattra au moins sur self.customer .

Je reviens à cette question car je ne suis pas entièrement satisfait de la réponse ou de votre code d'origine. Et je pense que la partie principale qui me dérange est le simple fait que vous cachez une situation d'erreur.

Je pense que les deux façons de détecter que la boucle n'a pas été exécutée semblent raisonnables, bien que l'erreur UnboundLocalError soit un peu un hack, mais pour moi le problème principal que vous annuler la séparation des préoccupations en retournant quelque chose lorsque vous ne trouvez rien.

Cela devrait être fait dans le code externe, dans mon sens, et en tant que tel, il serait approprié de lever une exception au lieu de retourner/donner self.customer . Donc, la dernière partie de votre code, je pense que j'utiliserais quelque chose comme:

Ce qui permettrait au niveau externe de prendre les mesures appropriées lorsqu'aucune personnalisation n'est trouvée, et vous pourriez (comme suggéré mais non testé) inclure le self.customer en tant que paramètre à l'exception et ainsi permettre au code externe de continuer à l'utiliser comme le valeur.

Si vous ne déplacez pas cette vérification au niveau externe, où il semble naturel de l'avoir, vous pouvez opter pour le faire de la manière suggérée par Barry puisque vous indiquez alors au niveau externe que cette situation d'erreur est gérée par la partie iter_or_default(). Mais cela masque toujours quelque peu la fonctionnalité, car lorsque vous utilisez la propriété, vous ne savez pas vraiment si vous avez obtenu la personnalisation que vous recherchez ou la valeur par défaut.


  • Relisez votre question de manière critique et assurez-vous que le problème est clair et quelle est la question spécifique. Vous voudrez peut-être placer une version en gras à une seule phrase de votre question au bas de votre message pour vous assurer que ce qui est demandé est clair.
  • Relisez les réponses. Envisagez d'accepter la meilleure réponse du groupe, même si aucune d'entre elles ne correspond exactement à ce dont vous avez besoin.
  • Attendez quelques jours après l'avoir posée, puis modifiez votre question avec ce que vous avez appris depuis que vous l'avez posée - peut-être que des informations supplémentaires aideront les autres à vous aider. Cela aura également pour effet de ramener votre question sur la page d'accueil où des yeux neufs pourront la voir.
  • Si tu as au moins 75 réputation, vous pouvez ajouter une prime deux jours après que la question est posée. Cela placera votre question dans la liste "Questions en vedette", et elle sera plus visible. Une prime incitera également les gens à répondre à votre question.
  • Vous finirez par résoudre le problème ou trouver une solution de contournement (ce qui peut être : "Cela ne fonctionnera pas, alors voici ce que j'ai fait à la place"). Veuillez ajouter une réponse avec ces informations et accepter votre propre réponse afin que les autres personnes ayant la même question puissent voir le chemin que vous avez finalement suivi. Ceci est également applicable si aucune réponse ne vous a aidé, mais que vous avez plutôt combiné des informations provenant de plusieurs réponses.

Accepter les réponses qui sont publiées alors que la question a une prime active créera des cas spéciaux pour l'attribution automatique si le propriétaire de la prime n'attribue pas manuellement une prime à la fin :

  • Si l'auteur de la question a commencé la prime et a accepté une réponse publiée pendant la période de prime (pas avant), cette réponse se verra automatiquement attribuer la totalité de la prime à la fin (à condition que la réponse soit toujours acceptée).
  • Si un autre utilisateur a commencé la prime, la réponse pour attribuer automatiquement la prime sera toujours sélectionnée de la manière habituelle (publiée pendant la période de prime, réponse la mieux notée avec un minimum de 2, réponse la plus ancienne en cas d'égalité), mais si le réponse sélectionnée arrive pour avoir été accepté par l'auteur, il recevra la totalité de la prime au lieu de la moitié.

De plus, dans le passé, le système de primes était strictement lié au système d'acceptation des réponses : accepter une réponse requérait également l'attribution d'une prime active. Cependant, les deux systèmes sont maintenant entièrement séparés.


Impossible d'accéder à un dossier partagé à l'aide des informations d'identification

Nous avons un serveur avec Windows Server 2008 Standard installé. Nous avons ajouté des utilisateurs et des groupes d'utilisateurs afin que d'autres ordinateurs aient accès à des dossiers et fichiers partagés spécifiques. Évidemment, nous avons défini certains dossiers partagés pour qu'ils soient accessibles à certains utilisateurs mais pas à d'autres.

Tout a bien fonctionné jusqu'à un jour. Je ne sais pas exactement ce qui s'est passé alors. Désormais, la plupart du temps, chaque fois que j'essaie d'accéder à l'un de mes dossiers partagés, je reçois le message Vous n'avez pas la permission d'accéder à serverfoldr, même si j'ai eu accès au dossier, à la fois dans les autorisations de partage et celles NTFS.

Cela arrive également à tous les utilisateurs du réseau. Seuls les dossiers marqués pour l'accès par Tout le monde sont accessibles.

Une autre chose curieuse est que lorsque je vais dans Gestion de l'ordinateurDossiers partagésSessions sur le serveur, mon ordinateur client est inscrit en tant qu'INVITÉ, au lieu du nom de l'utilisateur, bien que la propriété Invité soit définie sur Non.

J'ai déjà essayé de réinitialiser les autorisations sur le dossier, d'ajouter de nouveaux utilisateurs, de modifier les informations d'identification sur l'ordinateur client. rien ne semble fonctionner. Savez-vous quel semble être le problème?

Éditer: Suite aux questions de Dmitry :

L'événement de sécurité 552 n'apparaît pas dans les journaux. Au lieu de cela, j'obtiens l'événement 4776 indiquant que je me suis connecté avec le compte de connexion "Invité".

Accéder serveurc$ demande mes informations d'identification, mais soit elles ne sont pas acceptées, soit je n'ai pas les autorisations d'accès c$. J'ai déjà vécu cela en essayant de mapper un lecteur réseau sur serveurdossier avec des informations d'identification spécifiques, mes informations d'identification ne sont jamais acceptées.

La désactivation de l'UAC n'a pas aidé.

Les PC des clients ont une gamme de systèmes d'exploitation Windows de XP à 7. Mon PC en particulier a Win 7 RC.

2ème édition : J'ai désactivé le compte Invité et découvert que le nom d'utilisateur de mon PC client est différent du nom d'utilisateur que j'essayais d'utiliser (je pensais vraiment qu'ils étaient égaux, mais apparemment je l'ai changé lorsque j'ai formaté et réinstallé le système d'exploitation). Alors maintenant, ma question est la suivante : existe-t-il un moyen d'accéder aux dossiers partagés tout en conservant les noms d'utilisateur actuels sur les ordinateurs serveur et client ?


Cette question est assez vague, mais si vous avez suivi la procédure pas à pas dans la spécification du problème, vous devez savoir quoi faire pour créer une nouvelle page.

Prenez note particulièrement de l'exemple de registre.

Le Pspec nous dit d'utiliser le terminal, changez de répertoire pour

/workspace/pset7/views/ et copiez un fichier existant Vue dans un nouveau fichier.

Ensuite, modifiez le nouveau Vue de sorte que l'attribut action du formulaire appelle un nouveau Manette.

Enfin, créez cela Manette dans

/workspace/pset7/public/ et ajoutez du code pour le faire interagir avec le Modèle (la base de données.)

Certes, il s'agit d'un aperçu très général du processus, mais il devrait être à peu près applicable à toute nouvelle fonctionnalité que vous souhaitez ajouter au site Web.


5 réponses 5

Voici une variété de refactorisations. Je n'avais pas l'intention de changer autant le code, mais je pense que je pourrais aussi bien le poster maintenant.

Vous dites "Je pense que l'utilisation de méthodes est quelque chose qui me manque dans tout mon programme. ", et je suis d'accord. Extraire le code en méthodes est la meilleure chose à faire pour améliorer cela. Vous rendrez votre code plus structuré et plus facile à comprendre, et pourrez supprimer les redondances.

Maintenant, quelques éléments individuels :

Premièrement, l'ID aléatoire de la classe Associate semble n'être nécessaire que pour mélanger la liste. Ce n'est pas une partie intrinsèque de l'Associé, donc il n'y appartient pas. Supprimez-le et mélangez directement la liste.

Une chose qui aide souvent est de toujours déclarer vos variables le plus tard possible. Cela tend à mieux révéler la structure de votre code. Faisons cela avec la partie tri du code :

Notez qu'ils ont tous la même structure. Cela devrait vous indiquer qu'il s'agit d'un code commun qui peut être partagé. Extrayons une instance dans une méthode :

Maintenant, comment pouvons-nous rendre cela plus générique afin de pouvoir le partager avec les deux autres utilisations ? Nous devons pouvoir passer dans la condition. Avec LINQ, nous pouvons utiliser un Func<Associate, bool> - c'est-à-dire une fonction qui prend un associé et renvoie un bool. Vous en avez déjà certains dans votre code (le c => c.CanDoLoading dans les appels Where).

Faisons de la condition un paramètre :

Maintenant, AssignLoaders ne sait presque rien s'il recherche des chargeurs, nous pouvons donc l'utiliser également pour les autres types. Renommez les variables pour l'indiquer, puis rangez-les (avec un peu de LINQ) et rendez-les capables de les affecter à n'importe quelle liste de destination :

Les trucs de la listbox ne rentrent pas vraiment ici, ça a l'air un peu moche. Séparons-le en deux méthodes distinctes :

Le code de tri ressemble maintenant à :

De plus, si vous donnez à la classe Associate un remplacement ToString, AddAssociatesToListBox devient sans objet (supprimez-le !) et vous pouvez simplement écrire :

On peut faire une refactorisation similaire à la précédente avec le code de validation :

En fait, je vous recommanderais d'utiliser l'un des mécanismes de validation intégrés, mais je ne connais pas très bien les Windows Forms. Peut-être que quelqu'un peut montrer la voie dans un commentaire.

  • Pour votre méthode principale, je ne pense pas que vous ayez besoin de recharger le fichier à chaque fois. Il est logique de randomiser ce qui se trouve actuellement dans la grille de données. Tant que vous ne l'effacez pas, votre utilisateur ne perdra aucune donnée.

Cela signifie en fait que votre logique goto compliquée disparaît simplement car elle n'est pas nécessaire. (Vous verrez cela dans le code que je poste ci-dessous.)

Séparez le code de chargement et de sauvegarde. Cela rend un peu plus propre et plus facile de voir ce qui se passe, et nous permet de faire d'autres choses plus facilement, comme :

Suivre l'état des données. En vérifiant si l'utilisateur a modifié les données, vous pouvez être plus intelligent en lui demandant quand enregistrer ses modifications. Cela peut être fait en s'attachant à un événement sur la grille. J'ai appelé la variable qui suit ce _unsavedChanges . Il est également réinitialisé lorsque l'utilisateur charge ou enregistre des données.

Voici mes modifications en totalité. J'ai deviné l'implémentation de DatagridToString mais cela semble fonctionner :

Tout d'abord, la méthode de randomisation et ses sbires :

Maintenant, code qui charge et enregistre les fichiers :

Et enfin les événements. Vous devriez être capable de comprendre ce qu'ils font par leurs noms. (Il y a deux autres boutons, Enregistrer et Charger.)

J'ai téléchargé l'ensemble de mon projet ici. Il devrait être exécutable tel quel. Il contient la méthode shuffle, mon objet Associate et le formulaire.