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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Разделение строки в запросе
 
 автор: mazahaka   (28.07.2010 в 19:19)   личное сообщение
 
 

Есть такая трабра есть поле с данными такого вида - C67, DT4, KA1, XZW8
надо создать запрос чтобы он разделл эту строку по полям типа
поле1 = C67
поле2 = DT4
поле3 = KA1
поле4 =XZW8

Моск вспател ужо думать.

Первое значение получил

c1: IIf(Len([data]![CodesEquipment])>0;IIf(InStr([data]![CodesEquipment];",")>0;Left(Trim([data]![CodesEquipment]);InStr([data]![CodesEquipment];",")-1);[data]![CodesEquipment]);"null")

Но это гемор

  Ответить  
 
 автор: Lukas   (28.07.2010 в 19:44)   личное сообщение
 
 

Если длина составляющих подстрок варьируется,
можно сделать VBA функцию,
в которой Split-ом разбить исходную строку на куски по запятой,
а затем LTrim-ом убрать лишние пробелы.
Функцию вызывать в запросе.

Если длина составляющих подстрок постоянна, можно MID-ом резать на подстроки.

  Ответить  
 
 автор: mazahaka   (28.07.2010 в 19:59)   личное сообщение
 
 

Каким образом, передовать в функцию и получать обратно данные?
я пока делаю так
c1: IIf(InStr(Trim([CodesEquipment]);",")>0;InStr(Trim([CodesEquipment]);",");"null")
c2: InStr([c1]+1;Trim([CodesEquipment]);",")
c3: InStr([c1]+[c2]+1;Trim([CodesEquipment]);",")
c4: InStr([c3];Trim([CodesEquipment]);",")
d1: IIf([c1]>0;Mid([CodesEquipment];1;[c1]-1);[CodesEquipment])
d2: IIf([c2]>0;Mid([CodesEquipment];[c1]+1;[c2]-[c1]-1);Mid([CodesEquipment];[c1]+1;IIf([c1]>0;Len([CodesEquipment])-[c1];"null")))
d3: Mid([CodesEquipment];[c2]+1;[c3]-[c2]-1)

  Ответить  
 
 автор: Lukas   (28.07.2010 в 20:37)   личное сообщение
 
 

К примеру, функция для сплита строки из Max 5 частей:

Public Function GetPart(Part As Integer, FullString) As String
    Dim var, i As Integer
    Static strArr(1 To 5) As String
    If Part = 1 Then
        Erase strArr
        If Not IsNull(FullString) Then
            var = Split(FullString, ",")
            For i = 0 To UBound(var)
                strArr(i + 1) = LTrim(var(i))
            Next i
        End If
    End If
    GetPart = strArr(Part)
End Function

В запросе типа так:

SELECT 
    t1.ItemID, 
    GetPart(1,t1.ItemValue) AS Part1, 
    GetPart(2,t1.ItemValue) AS Part2, 
    GetPart(3,t1.ItemValue) AS Part3, 
    GetPart(4,t1.ItemValue) AS Part4, 
    GetPart(5,t1.ItemValue) AS Part5
FROM t1

  Ответить  
 
 автор: mazahaka   (28.07.2010 в 20:59)   личное сообщение
 
 

Спасибо огромное оказывается все так просто. У мну просто голова болит уже над вб шаманить ибо только закончил с загрузкой из екселя в базу

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