Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2012, 17:43   #1
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию Объединение полей

Информация о членах семьи находится в Таблице «ТблЧленыСемьи», которая состоит из полей:
1. Id_Ch 2. S_Ch (степень родства) 3. Fam_Ch (фамилия члена семьи) 4. Im_Ch (имя ЧС) 5. Ot_Ch (отчество ЧС) 6. DRog_Ch (дата рождения ЧС) 7. Fam (фамилия главы семьи)
Т.е
1. 1 (число)
2. сын (текст)
3. Иванов (текст)
4. Иван (текст)
5. Иванович (текст)
6. 03.06.1988 (дата)
7. Иванов
Строка 2
1. 2
2. дочь
3. Иванова
4. Ирина
5. Ивановна
6. 23.05.1989
7. Иванов
И т.д.
В главной форме «ДанныеЛС» подчиненная форма «ФрмПДЧ_ЧленыСемьи» связаны по фамилии главы семьи (поле Fam)
Все дело в том, что часто эти данные требуется показать в другом формате – то есть в одном поле одной строкой.
Для этого табличной форме «ФрмДанныеЛС» и отчете «ОтчДанныеЛС» эти данные нужно отобразить в одном поле «Члены семьи» примерно в таком формате:
сын – Иванов Иван Иванович, 03.06.1988 г.; дочь – Иванова Ирина Ивановна, 23.05.1989 г. И т.д.
Сложность заключается в том, что объединить нужно не просто несколько полей в одно к примеру Fam & “ “ & Im & “ “ &Ot, а несколько полей в нескольких строках – в одно поле. Помогите, пожалуйста.
АлИван вне форума Ответить с цитированием
Старый 12.10.2012, 23:31   #2
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Если данные должны выводиться в одно поле, то подчиненная форма здесь не нужна. Создаем свободное поле, данные для него "=СоставСемьи([fam])", если fam поле в этой форме содержащее фамилию главы семьи. В модуле прописываем функцию:
Код:
Function СоставСемьи(fam As String) As String
  Dim R As Recordset
    Set R = CurrentDb.OpenRecordset("select * from [ТблЧленыСемьи] WHERE [fam]='" & fam & "'")
    While Not R.EOF
        СоставСемьи = СоставСемьи & R.Fields("S_Ch") & " - " & R.Fields("Fam_Ch") & " " & _
            R.Fields("Im_Ch") & " " & R.Fields("Ot_Ch") & ", " & R.Fields("DRog_Ch") & " г.; "
        R.MoveNext
    Wend
    Set R = Nothing
End Function
и что вы будете делать при появлении однофамильцев?
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 13.10.2012, 02:51   #3
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

Спасибо. В примитивном варианте однофамильцев нет! Это конечно ужасно, но в начале пути в Access мы их отличали так: Иванов Иванов* Иванов** Конечно теперь для Fam есть уникальный код Id_Fam. Как я понял в Вашем модуле Fam можно заменить на Id_Fam?
К вечеру опробую Ваш вариант. Очень важно, чтобы все получилось. Ведь азы Access учат разбивать информацию на как можно меньшие части. Но вот часто нужно объединять эти данные в одном поле, например перечислить состав семьи, периоды работы, награды, учебные заведения которые окончил и т.п. А для этого в каждом таком случае нужно писать отдельный модуль, аналогичный Вашему?

Последний раз редактировалось АлИван; 13.10.2012 в 03:06.
АлИван вне форума Ответить с цитированием
Старый 13.10.2012, 03:12   #4
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

Если ничего не напутал, то для Id_Fam функция будет такой:
Создаем свободное поле, данные для него "=СоставСемьи([Id_Fam])", если fam поле в этой форме содержащее фамилию главы семьи. В модуле прописываем функцию:
Код:

Function СоставСемьи(Id_Fam As String) As String
Dim R As Recordset
Set R = CurrentDb.OpenRecordset("select * from [ТблЧленыСемьи] WHERE [Id_Fam]='" & Id_Fam & "'")
While Not R.EOF
СоставСемьи = СоставСемьи & R.Fields("S_Ch") & " - " & R.Fields("Fam_Ch") & " " & _
R.Fields("Im_Ch") & " " & R.Fields("Ot_Ch") & ", " & R.Fields("DRog_Ch") & " г.; "
R.MoveNext
Wend
Set R = Nothing
End Function
АлИван вне форума Ответить с цитированием
Старый 13.10.2012, 03:45   #5
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

Ура! С Вашим модулем по Fam все получилось. А вот по Id_Fam выдает ошибку в строке
Set R = CurrentDb.OpenRecordset("select * from [ТблЧленыСемьи] WHERE [Id_Fam]='" & Id_Fam & "'")
помечет ее желтым цветом.
Что-то напортачил?
АлИван вне форума Ответить с цитированием
Старый 13.10.2012, 10:04   #6
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Код:
Function СоставСемьи(id_fam As Long) As String 'id_fam скорее всего типа Long
  Dim R As Recordset
    Set R = CurrentDb.OpenRecordset("select * from [ТблЧленыСемьи] WHERE [id_fam]=" & id_fam)
...
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 13.10.2012, 14:19   #7
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

Function СоставСемьи(Id_fam As Long) As String
Dim R As Recordset
Set R = CurrentDb.OpenRecordset("select * from [ТблЧленыСемьи] WHERE [id_fam]=" & id_fam)
While Not R.EOF
СоставСемьи = СоставСемьи & R.Fields("S_Ch") & " - " & R.Fields("Fam_Ch") & " " & _
R.Fields("Im_Ch") & " " & R.Fields("Ot_Ch") & ", " & R.Fields("DRog_Ch") & " г.; "
R.MoveNext
Wend
Set R = Nothing
End Function

Id_Fam действительно число, но функция в этом варианте не работает, в поле пишет #ошибка
АлИван вне форума Ответить с цитированием
Старый 13.10.2012, 14:22   #8
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

У-у-у-у... Поле в форме ведь надо тоже исправить! =СоставСемьи([Id_fam])!
Вот теперь все получилось!! Огромное Вам спасибо!
АлИван вне форума Ответить с цитированием
Старый 13.10.2012, 14:24   #9
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

удаленно ...
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 13.10.2012, 22:51   #10
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от АлИван Посмотреть сообщение
Информация о членах семьи находится в Таблице «ТблЧленыСемьи», которая состоит из полей ...
7. Fam (фамилия главы семьи)
...
В главной форме «ДанныеЛС» подчиненная форма «ФрмПДЧ_ЧленыСемьи» связаны по фамилии главы семьи (поле Fam)
...
Тревожный способ...
1. У вас используется справочник отношений родства (свойства)?
2. Если есть - как он организован, как производится ввод данных?
3. Структура вашей базы ещё подлежит корректированию?
Андрэич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение текстовых значений из полей таблицы (Access 2010) Mjaso Microsoft Office Access 7 28.04.2012 21:18
Объединение полей. Lena220 Microsoft Office Access 3 06.12.2010 21:45
При удалении записей значения полей с type:=Autoincrement (т.е+) в оставшихся полей не изменяются kenta БД в Delphi 2 29.10.2009 08:28
Объединение 2-х полей таблицы SNUPY SQL, базы данных 2 04.10.2009 22:53
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53