Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пересечение содержимого двух полей / 13 сообщений из 13, страница 1 из 1
01.07.2016, 23:32
    #39266737
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
Всем привет.

В таблице есть два текстовых поля.
В каждом может быть текст длиной до 7 символов, состоящих из тире и семи цифр от 1 до 7.

Надо в третьем поле "Результат" получить пересечение первых двух полей.
Т.е. в третьем поле должны быть символы, имеющиеся в этих двух полях одновременно.

Пример.

Поле1Поле2Результат1234567-23--6--23--6-1234-----34567--34---123-------456--------1-3---7-2-4--7------7
Очевидное решение - проверять одновременное присутствие в двух полях
каждого из семи символов с помощью like и iif (семь вложений).
Может можно поизящней и попроще?
...
Рейтинг: 0 / 0
02.07.2016, 01:18
    #39266755
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
ИВП,

возможно я не понял постановки.

об этом идет речь?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Function fsand(ByVal lparam As String, rparam As String, Optional ByVal pspad As String = "-") As String

  Dim lmin&, lmax&, ltemp&
  
  lmin = Len(lparam)
  lmax = Len(rparam)
  If lmin > lmax Then
    ltemp = lmin
    lmin = lmax
    lmax = ltemp
  End If
  
  fsand = String$(lmax, pspad)
  
  Dim ichar As Integer
  
  For ltemp = 1 To lmin
    ichar = AscW(Mid$(lparam, ltemp, 1))
    If ichar = AscW(Mid$(rparam, ltemp, 1)) Then
      Mid$(fsand, ltemp, 1) = ChrW(ichar)
    End If
  Next
  
End Function

...
Рейтинг: 0 / 0
02.07.2016, 10:23
    #39266780
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
ИВП,
Попробуйте:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function my(perv, vtoroi) 'сравниваемые поля
Dim i, a, b, rez
For i = 1 To 7
a = Mid(perv, i, 1) 'символ в первом поле
b = Mid(vtoroi, i, 1)  'символ во втором поле
If a = b Then rez = rez & a Else rez = rez & "-"
Next
my = rez 
End Function
...
Рейтинг: 0 / 0
02.07.2016, 10:32
    #39266781
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
ПыСы:сейчас сравниваются символы в одной и той же позиции. Если надо в любой-еще один цикл по второму полю,вложенный в первый
...
Рейтинг: 0 / 0
02.07.2016, 11:47
    #39266788
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
Всем спасибо! Думал, что можно как-нибудь обойтись без циклов.
...
Рейтинг: 0 / 0
02.07.2016, 12:08
    #39266794
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
ИВП,
чем же это циклы Вам не угодили-а может вообще без VBA(вот только получится ли?)
...
Рейтинг: 0 / 0
02.07.2016, 12:12
    #39266795
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
ИВП,
чем же это циклы Вам не угодили-а может вообще без VBA(вот только получится ли?)
...
Рейтинг: 0 / 0
02.07.2016, 12:47
    #39266805
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
Я не против циклов. Думал, что может есть какая-либо функция ))))))
А без VBA обойтись можно.
...
Рейтинг: 0 / 0
02.07.2016, 16:22
    #39266841
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
так это и есть пользовательская функция, которая даже появится в построителе (в функциях папочка с именем БД.Написать ее надо в общем модуле) и используется так же как и встроенная
...
Рейтинг: 0 / 0
02.07.2016, 16:50
    #39266849
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
sdkuтак это и есть пользовательская функция, которая даже появится в построителе (в функциях папочка с именем БД.Написать ее надо в общем модуле) и используется так же как и встроенная
Все это понятно. Я имел ввиду встроенную ))))))
...
Рейтинг: 0 / 0
02.07.2016, 17:56
    #39266861
Tigrist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
левое и правое выражения можно превратить в двоичное число. это же наверно дни недели?
потом сделать встроенную функцию and
и потом результат обратно разложить на цифры и тире.

решение sdku самое простое
...
Рейтинг: 0 / 0
02.07.2016, 18:02
    #39266862
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
ИВП,
Стесняюсь спросить:а в чем разница? (ведь не могли создатели ACCESS предусмотреть ВСЕ "хотелки" пользователя)
Чем использование этой функции отличается от использования встроенной:
Код: vbnet
1.
2.
SELECT ctl1, ctl2, my(ctl1,ctl2) AS сравнение
FROM tbl1;
...
Рейтинг: 0 / 0
02.07.2016, 18:04
    #39266863
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение содержимого двух полей
Да согласен я давно )))))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пересечение содержимого двух полей / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]