Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Трудности с выражением, содержащим конкатенацию и вложенные IIF
 
 автор: NataliX   (04.09.2011 в 13:24)   личное сообщение
 
 

Задача такая: есть записи с несколькими текстовыми полями: Кат1, Кат2, Кат3, Кат4, Кат5. Причем какие то из из полей в записях пустые, а какие то заполнены, например, Домашний обиход - Доска гkадильная - Марка DivviTM. Или Строительные материалы - Отделка для стен - Обои - Обои виниловые- гофрированные
Нужно объединить эти текстовые поля в новое объединенное поле вида:
Кат1/Кат2/Кат3/Кат4/Кат5 но так, чтобы лишних слешей в случае пустого поля не возникало.
Я пыталась сделать простой конкатенацией - получалось Кат1/Кат2///
Как прописать выражение, чтобы избавиться от ненужных флешей? До VBA я пока еще не доросла

  Ответить  
 
 автор: kot_k_k   (04.09.2011 в 13:56)   личное сообщение
 
 

вар. 1. можно не мучать голову на сборку - получившиеся поле прогнать

do wile Instr(поле, "//") >0 
        Replace(поле,"//","/") 
loop


вар. 2 при сборке нашего поля

if nz(кат2, "")<>"" then 
     поле=поле & "/" кат2
end if 

  Ответить  
 
 автор: NataliX   (04.09.2011 в 14:39)   личное сообщение
19 Кб.
 
 

Спасибо, но я указывала, что до VBA еще не доросла... :-)))
Как в строке бланка запроса могут быть объединены поля без лишних слешей?

  Ответить  
 
 автор: час   (04.09.2011 в 15:03)   личное сообщение
 
 

пример на 2010
я пассс У мну access 2003

  Ответить  
 
 автор: NataliX   (04.09.2011 в 15:12)   личное сообщение
 
 

И за это спасибо...

  Ответить  
 
 автор: ddi   (04.09.2011 в 16:03)   личное сообщение
 
 

ОбъединенныйСтолбец: [T_ПродажиИсходная]![Кат1] & IIf(nz([Кат2],"")="","","/" & [Кат2] & IIf(nz([Кат3],"")="","","/" & [Кат3]))

  Ответить  
 
 автор: ddi   (04.09.2011 в 16:03)   личное сообщение
 
 

  Ответить  
 
 автор: kot_k_k   (04.09.2011 в 17:16)   личное сообщение
 
 


Спасибо, но я указывала, что до VBA еще не доросла... :-)))



надо Растишку кушать, курить "Куришку" и бухать "Бухашку"

так или иначе такое построение ни мастером и как не сделаешь
то что предложил ddi - вариант для SQL строки или на форме в поле св-во данные пишем
= [Кат1] & IIf(nz([Кат2],"")="","","/" & [Кат2] & IIf(nz([Кат3],"")="","","/" & [Кат3])) .....
- только это теже операторы VB и таже логика построения

  Ответить  
 
 автор: ddi   (04.09.2011 в 17:25)   личное сообщение
 
 

Она про IIF знает но незнает как сней работат)

  Ответить  
 
 автор: NataliX   (04.09.2011 в 19:01)   личное сообщение
 
 

Спасибочки!
Я успела сама решить эту задачу, почти испортив себе зрение, потому как очень надо было срочно решать проблему с торговым классификатором.
Но это только потому, что это первый раз, когда мне вообще когда либо коротко и внятно помогли на форумах...
Чаще были ответы, не имеющие отношения. к вопросу.
А за функцию nz отдельное спасибо! - я про нее вообще не вспомнила :-)).

  Ответить  
 
 автор: Дядя Федор   (05.09.2011 в 08:16)   личное сообщение
 
 

>Причем какие то из из полей в записях пустые
Public Sub tstnull()
Dim s$
Dim s2$
s = "111"
s2 = Null
Debug.Print s & s2 'Результат 111
Debug.Print s + s2 'Результат Null
End Sub

Т.о., если мы уверены, что хотя бы одно поле не Null, надо пользоваться &. И не надо NZ.

  Ответить  
 
 автор: ddi   (05.09.2011 в 08:39)   личное сообщение
 
 

она же без вба хочет

  Ответить  
 
 автор: Силblч   (05.09.2011 в 08:47)   личное сообщение
 
 

на brainfuck'e!?

  Ответить  
 
 автор: ddi   (05.09.2011 в 08:50)   личное сообщение
 
 

ага

  Ответить  
 
 автор: Дядя Федор   (05.09.2011 в 12:37)   личное сообщение
 
 

дык. Это пример. Можно в запросе так поля сконкатенировать.

  Ответить  
 
 автор: NataliX   (06.09.2011 в 12:09)   личное сообщение
 
 

Спасибо за ответ. Я все это проштудирую, надо только немножко времени :-)

  Ответить  
 
 автор: Анатолий (Киев)   (05.09.2011 в 13:11)   личное сообщение
 
 

NataliX, вам следует знать, что конкатенацию строк можно выполнять символом "&" и "+".
Разница в следующем:
"Строка" & Null - получаем "Строка"
"Строка" + Null - получаем Null
Вашу задачу проще решить комбинацией этих символов:
Кат1+ "/" & Кат2 + "/" & Кат3 + "/" & Кат4 + "/" & Кат5.

Но надо помнить, что "+" не допускает использования єлементов типа Число и Дата, их надо преобразовать в строку функцией CStr или Str.

  Ответить  
 
 автор: NataliX   (06.09.2011 в 12:14)   личное сообщение
 
 

Спасибо большое!
У меня маленькая база знаний есть - я туда Ваш пример впихнула, ибо о таких нюансах и не подозревала.
Обещаю проштудировать как следует и запомнить как отче наш.
Вообще - мне очень помогли ответы на этом форуме. Я как то даже не очень и не надеялась...

  Ответить  
 
 автор: час   (06.09.2011 в 12:55)   личное сообщение
 
 


Я как то даже не очень и не надеялась...

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList