2010-03-02 6 views
1

Dans l'un des ms-access table que je travaille avec nous avons un champ de texte avec une taille d'ensemble. À la fin de ce champ, il y a du code supplémentaire qui varie en fonction de la situation. Je cherche un moyen de supprimer un de ces codes, mais même lorsque la dernière partie est tronquée par la taille maximale du champ. Appelons le champ "champ" et le code que je cherche à supprimer "abc-longcode".MS-Access: Remplacer "support"

Si j'utilise la fonction de remplacement SQL avec la chaîne abc-longcode, la requête ne fonctionnera que lorsque le code sera complet.

Si je veux aussi ma requête de mise à jour (qui ne fait que supprimer ce code spécifique à la fin de mon champ) pour travailler sur des codes incomplets, comment cela se traduirait-il en ms-SQL?

Il aurait à supprimer (ou remplacer par « » pour être précis) tous les éléments suivants (exemple bien sûr, pas les codes réels):

abc-longcode 
abc-longcod 
abc-longco 
abc-longc 
abc-long 
abc-lon 
abc-lo 
abc-l 

Il est évident que je pourrais le faire avec plusieurs requêtes. Chacun remplaçant l'un des codes tronqués attendus ... mais cela ne semble pas optimal. De plus, quand le champ est assez grand pour obtenir tout le code, il peut parfois y avoir des détails supplémentaires à la fin que je veux garder, donc je ne peux pas simplement chercher "abc-l" et supprimer tout ce qui suit: \

Cette requête (ou les requêtes si je ne trouve pas de meilleur moyen) sera maintenue directement dans la base de données .mdb.

Donc, même si je peux penser à plusieurs façons de le faire en dehors d'une requête ms-sql, cela ne m'aide pas.

Une aide? Merci.

Répondre

1

Vous pouvez écrire une méthode de remplacement VBA personnalisée qui remplacera l'un des cas donnés {"abc-longcode", ... "abc-l"}. Ceci est essentiellement la même chose que votre idée "plusieurs requêtes", sauf que ce ne serait qu'une requête. Mon VBA est rouillé, mais quelque chose comme:

public function ReplaceCodes(str as string) as string 
    dim returnString as string 

    returnString = str 
    returnString = replace(returnString,"abc-longcode","") 
    // ... etc... 

    ReplaceCodes = returnString 
end function 

je peux avoir obtenu l'ordre des paramètres mal sur le remplacer :)

+0

j'aurais préféré une manière purement SQL fais cela mais je ne pense pas que cela puisse être fait. J'aime cette réponse car elle me permet également de mettre d'autres codes dans la même fonction que je chercherai aussi. exemple: def-longcode, def-longcod, etc ... Merci pour l'aide! –

+0

L'alternative purement SQL est une longue séquence de fonctions de remplacement dans une requête, difficile à lire, difficile à maintenir et moche.L'accès est déjà assez moche :) –

0

j'utiliser ma propre fonction personnalisée pour le faire en utilisant la fonction split pour obtenir la première partie de la chaîne. Vous pouvez ensuite utiliser cette valeur dans la requête de mise à jour.

Public Function FirstPart(thetext As String) As String 
    Dim ret As String 
    Dim arrSplitText As Variant 

    arrSplitText = Split(thetext, "-") 
    ret = arrSplitText(0) 

    FirstPart = ret 
End Function 
0

Peut-on utiliser:

Left(FieldX,InStr(FieldX,"abc-")-1) 

EDIT re Commentaire

S'il y a un espace ou un autre délimiteur standard:

IIf(InStr(InStr(FieldX, "abc-"), FieldX, " ") = 0, Left(FieldX, InStr(FieldX, "abc-") - 1), Replace(FieldX, Mid(FieldX, InStr(FieldX, "abc-"), InStr(InStr(FieldX, "abc-"), FieldX, " ") - InStr(FieldX, "abc-")), "")) 
+0

J'aime cette réponse pour sa nature purement SQL mais le problème avec ce code est que si mon longcode est complet dans le champ et qu'il y a quelques détails supplémentaires à la fin du champ cela ne gardera pas ça détails supplémentaires. En d'autres termes, il enlève tout à partir de ce que je cherche au lieu de «juste» ce que je cherche. –

+0

Je ne pense pas que vous ayez vraiment bien défini la question, car je n'ai aucune idée de ce que vous voulez faire de vos données d'échantillon. Et autant que je peux voir, vos données d'échantillon n'incluent pas les données après les choses que vous voulez enlever, ainsi il est assez de trouver une solution. –

+0

@David W Fenton hein? :) – Fionnuala

Questions connexes