2009-05-06 11 views
2

J'essaye de couper l'espace blanc étranger à la fin d'un champ de note dans MS Access. J'ai essayé de le faire un certain nombre de façons:VBA Trim() tronquer le texte bizarrement!

1) une requête de mise à jour avec le champ en cours de mise à jour à Trim ([fieldname]). Pour une raison quelconque, cela ne fait rien. L'espace blanc est toujours là. 2) une mise à jour utilisant une fonction Macro dans laquelle le contenu du champ est transmis en tant que chaîne, puis traité à l'aide de la fonction Trim() et renvoyé. Celui-ci est vraiment bizarre, en ce sens qu'il semble tronquer le texte sur le terrain à des endroits complètement aléatoires (différents pour chaque enregistrement). Parfois 366 caractères, parfois 312, parfois 280.

3) comme ci-dessus mais avec RTrim()

Comment puis-je être possible de déconner une telle fonction simple ?! Toute aide très appréciée. Voudrais garder mes cheveux.

-Sam

+0

Je suppose que vous avez des caractères ascii 'invisibles' tels que Line Return ou Carriage Feed à la fin de votre chaîne. Pouvez-vous écrire une petite procédure énumérant les codes ascii de tous les caractères un par un? –

Répondre

0

Cela peut me jour, mais ne l'accès sont de types différents caractères pour fixe par rapport à des longueurs variables? en SQL, CHAR (10) sera toujours de 10 caractères, rembourré si nécessaire, tandis que VARCHAR (10) sera 'la' taille jusqu'à 10. Tronquer un CHAR (10) va juste remettre les blancs.

+0

ACE/Jet possède des types de données distincts pour NCHAR et NVARCHAR respectivement (ils peuvent également être marqués WITH COMPRESSION, ce qui les rend probablement équivalents à CHAR et VARCHAR respectivement). Cependant, l'OP a dit qu'il s'agissait d'une colonne MEMO, qui est une donnée blob (FWIW la correspondance la plus proche dans SQL Server est NTEXT). – onedaywhen

1

Selon cette article:

texte et types de données Mémo magasin seulement les caractères entrés dans un champ; les caractères d'espace pour les positions inutilisées dans le champ ne sont pas stockés.

Comme suggéré hypoxide, ils ne peuvent en fait être des espaces

Modifier

Je soupçonne que le dernier caractère dans le champ est un retour chariot ou un caractère de saut de ligne. Si tel est le cas, alors Trim (ou toute variation de Trim - RTrim \ LTrim) ne fonctionnera pas car ils ne suppriment que les caractères d'espace. Comme 'un jour quand' suggéré dans le commentaire, essayez d'utiliser la fonction ASC pour déterminer le code de caractère réel du dernier caractère dans le champ Mémo. Vous pouvez utiliser quelque chose comme ce qui suit dans une requête pour le faire:

ASC(Right(MyFieldName,1)) 

Comparez le résultat de la requête au jeu de caractères pour déterminer le caractère réel qui se termine le champ mémo. (Espace = 32, saut de ligne = 10, retour chariot = 13).

Vous devrez peut-être tester le dernier caractère et s'il s'agit d'un saut de ligne ou d'un retour chariot, supprimez le caractère, puis appliquez la fonction de découpage au reste de la chaîne.

+0

Il me semble qu'il y a à la fois des espaces et des sauts de ligne. Au moins, si je mets mon curseur à la dernière lettre/ponctuation dans le champ mémo et la touche fléchée à droite tout en maintenant ma touche Maj enfoncée, les espaces et les sauts de ligne sont révélés par la surbrillance. –

+0

Si je fusionne le champ dans un document Word, l'espace blanc à la fin s'affiche sous la forme d'espaces et de symboles de paragraphe lorsque j'active l'affichage des caractères invisibles dans Word. Donc, je pense que ce sont des espaces et des sauts de ligne. De toute autre façon, je pourrais confirmer que c'est ce qu'ils sont? –

+0

Utilisez la fonction ASC(). – onedaywhen

Questions connexes