Analyser un champ séparés par des virgules en deux champs (MS ACCESS VBA 2003)
J'ai hérité d'une base de données où l'utilisateur les champs d'entrée sont stockés comme une chaîne délimitée par des virgules. Je sais. Boiteux. J'ai besoin d'un moyen pour analyser ces champs dans une requête SELECT où il y a trois segments de nombre variable de caractères. À rebours de toutes les recommandations que j'ai insérer des champs dans une nouvelle table ou créer une procédure stockée pour ce faire, c'est ce que je suis venu avec. Je me demandais si quelqu'un voit une faille en faisant cela comme une requête select (où je peux facilement convertir de la chaîne analysée et de retour à nouveau en tant que de besoin).
Field_A
5,25,89
De sorte à obtenir le segment de gauche, ce qui est le plus simple:
Field_1: Left$([Field_A],InStr([Field_A],",")-1)
Pour obtenir la plus à droite du segment:
Field_3: Right$([Field_A],Len([Field_A])-InStrRev([Field_A],","))
Segment du milieu est la plus délicate:
Field_2: Mid([Field_A],InStr([Field_A],",")+1,InStrRev([Field_A],",")-InStr([Field_A],",")-1)
Voici donc le résultat:
Field_1 Field_2 Field_3
5 25 89
Tout en consentant des opinions?
Principalement parce que j'étais persuadé que je POUVAIS le faire avec une requête select plutôt que de faire une toute nouvelle table. Ces délimité par des virgules, les champs à afficher et de saisies et mises à jour par l'utilisateur, mais inutile pour moi en tant que gestionnaire de données. Je voulais être en mesure de passer rapidement d'avant en arrière avec une requête select, de sorte que je voudrais toujours avoir en direct les données que l'utilisateur est mise à jour. Non pas que c'est un gros problème pour ré-exécuter la maketable, mais parfois, ils sont oubliés quand ils sont une étape dans plusieurs requêtes imbriquées.
Sonne comme vous avez besoin d'un formulaire qui accepte CSV d'entrée de l'utilisateur, mais en fait les magasins rationnelle des données dans une table.
OriginalL'auteur TSS | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
Bien, si vous insistez sur d'aller en bas de cette route......
Cela pourrait être plus facile et plus souple. Créer une fonction dans un module:
Maintenant dans votre requête, vous pouvez obtenir n'importe quel champ dans la chaîne comme ceci:
GetValueFromDelimString([MultiValueField],0) COMME FirstElement, GetValueFromDelimString([MultiValueField],1) COMME SecondElement, etc.
Je sens que je vais acheter de la bière pour un mineur, d'encourager ce type de comportement 🙂
Une belle Pierre!!
OriginalL'auteur Peter Lake
Il semble que vous n'êtes pas à demander pour plus d'informations sur comment pour analyser un champ séparés par des virgules dans des domaines différents, mais plutôt à la recherche de gens pour vous soutenir dans votre décision de le faire, oui?
Le fait, comme vous l'avez déjà découvert, c'est que vous pouvez le faire en effet avec cette application habile de fonctions dans votre SQL définitions de champ. Mais cela ne signifie pas que vous devrait.
Dans le court terme, c'est un moyen facile d'atteindre vos objectifs en tant que gestionnaire de données, je vous l'accorde. Mais comme une solution à long terme, il est juste d'ajouter une autre couche de complexité à ce qui semble être un mal conçue, la base de données (je sais que ce dernier n'est pas votre faute-moi aussi, j'ai hérité de ma part de "boiteux" bases de données).
Donc, je vous félicite sur "faire le travail" pour le moment, mais vous conseille d'écouter "toutes les recommandations que vous insérez les champs dans une nouvelle table" - ils sont des recommandations. Ça va prendre plus de planification et d'efforts, mais dans le long terme, vous aurez une meilleure base de données. Et qui fera tout ce que vous faites avec elle plus facile, plus rapide et plus fiable.
OriginalL'auteur Lokerim
C'est un vieux thread, mais quelqu'un pourrait il recherche. Vous pouvez également faire la même stratégie qu'une requête de mise à jour. De cette façon, vous pouvez conserver l'original CSV et avons 3 nouveaux champs destination qui peut être calculer et recalculé en fonction de votre application.
OriginalL'auteur vedran