MS-Access: заменить "кронштейн" - PullRequest
1 голос
/ 02 марта 2010

В одной из таблиц ms-access, с которыми я работаю, у нас есть текстовое поле с заданным размером. В конце этого поля есть дополнительный код, который меняется в зависимости от ситуации. Я ищу способ удалить один из этих кодов, но даже когда последняя часть усекается по максимальному размеру поля.

Давайте назовем поле «field» и код, который я ищу, чтобы удалить «abc-longcode».

Если я использую функцию замены SQL со строкой abc-longcode, запрос будет работать только после завершения кода.

Если я также хочу, чтобы мой запрос на обновление (который ничего не делал, кроме удаления этого конкретного кода в конце моего поля) работал с неполными кодами, как бы это переросло в ms-SQL?

Было бы необходимо удалить (или заменить на "", чтобы быть точным) все следующее (например, не реальные коды):

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

Очевидно, я мог бы сделать это с несколькими запросами. Каждый из них заменяет один из ожидаемых усеченных кодов ... но это не звучит оптимально.

Кроме того, когда поле достаточно большое, чтобы получить весь код, в конце могут появиться дополнительные подробности, которые я также хочу сохранить, поэтому я не могу просто найти «abc-l» и удалить все что следует: \

Этот запрос (или запросы, если я не могу найти лучшего способа) будет храниться непосредственно в базе данных .mdb.

Так что, хотя я могу придумать несколько способов сделать это вне запроса ms-sql, мне это не поможет.

Любая помощь? Благодаря.

Ответы [ 3 ]

1 голос
/ 02 марта 2010

Вы можете написать собственный метод замены VBA, который заменит любой из указанных случаев {"abc-longcode", ... "abc-l"}. По сути, это то же самое, что и ваша идея «нескольких запросов», за исключением того, что это будет только один запрос. Мой VBA ржавый, но что-то вроде:

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

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

     ReplaceCodes = returnString
end function

Возможно, я получил неправильный порядок параметров при замене:)

0 голосов
/ 02 марта 2010

Можете ли вы использовать:

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

РЕДАКТИРОВАТЬ комментарий

Если есть пробел или другой стандартный разделитель:

 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 голосов
/ 02 марта 2010

Я бы использовал свою собственную пользовательскую функцию, чтобы сделать это, используя функцию split, чтобы получить первую часть строки. Затем вы можете использовать это значение в запросе на обновление.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...