Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объединение по условию / 19 сообщений из 19, страница 1 из 1
17.12.2015, 06:16
    #39130367
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
Здравствуйте! В базе необходимо объединить записи как указано на рисунке. Как реализовать? Кусок базы прилагаю)
...
Рейтинг: 0 / 0
17.12.2015, 06:18
    #39130368
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vv,
...
Рейтинг: 0 / 0
17.12.2015, 09:06
    #39130428
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vv,

не поняла, что надо получить
УДДата ВУДФабулаСтатьячастьпунктПримечаниеЭпизодДата совершенияРешениеДата решения20080/2304.12.2008Н/Л тайно похитило запчасти1582В ППЛ, средней тяжести, подлежит прекращению в 2015112.11.2008приостановлено за неустановлением04.02.2009
...
Рейтинг: 0 / 0
17.12.2015, 09:12
    #39130436
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vvК сообщению приложен файл (Для форума.rar - 25Kb)
Прежде чем выкладывать - проверяй, что выкладываешь. База - битая...

terkin_vvнеобходимо объединить записи как указано на рисунке
Что должно являться итогом такого объединения? Удаление второй записи и перенос данных из неё в первую? Запрос, объединяющий эти записи? По каким полям идентифицируется запись? что делать, если два неидентифицирующих поля неNULLевые, но не совпадают?
...
Рейтинг: 0 / 0
17.12.2015, 09:30
    #39130457
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
Akina,

База не битая, просто 64 битная))), выкладываю в другом формате)

Итогом объединения хотелось бы видеть Удаление второй записи и перенос данных из неё в первую. Запись идентифицируется по номеру делу и дате возбуждения.
...
Рейтинг: 0 / 0
17.12.2015, 09:39
    #39130467
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vvИтогом объединения хотелось бы видеть Удаление второй записи и перенос данных из неё в первую.
Сформулируйте чёткий однозначный критерий, согласно которому нужно именно первую обновить, а вторую удалить, а не наоборот.
...
Рейтинг: 0 / 0
17.12.2015, 09:40
    #39130468
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
И ответьте всё-таки на вопрос
Akinaчто делать, если два неидентифицирующих поля неNULLевые, но не совпадают?
...
Рейтинг: 0 / 0
17.12.2015, 09:48
    #39130481
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
Akina,
Если честно, то еще не решил, но как вариант либо убивать одну из записей (что чревато, по моему мнению, потерей информации), либо дописывать одну в другую через разделитель (например ";"), либо оставлять и удалять потом вручную(
...
Рейтинг: 0 / 0
17.12.2015, 10:44
    #39130536
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
Akina,

Удалить необходимо будет запись в которой будут пустые не идентифицирующие поля
...
Рейтинг: 0 / 0
17.12.2015, 13:34
    #39130756
Объединение по условию
terkin_vv, потестируйте такой код
Код: 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.
25.
26.
27.
28.
Dim DB As DAO.Database, RSD As DAO.Recordset, RSM As DAO.Recordset, fld As DAO.Field
Dim sq$, sf$
  Set DB = CurrentDb
  sq = "SELECT * FROM Дела ORDER BY УД, [Дата ВУД], Код"
  Set RSD = DB.OpenRecordset(sq)
  sq = "SELECT T1.* FROM Дела As T1 " & _
       "WHERE T1.Код=(SELECT Min(T2.Код) FROM Дела As T2 " & _
       "WHERE T2.УД=T1.УД And  T2.[Дата ВУД]=T1.[Дата ВУД]) " & _
       "ORDER BY T1.УД, T1.[Дата ВУД]"
  Set RSM = DB.OpenRecordset(sq)
  Do Until RSM.EOF Or RSD.EOF
    If RSM!Код = RSD!Код Then
      RSD.MoveNext
    ElseIf RSM!УД = RSD!УД And RSD![Дата ВУД] = RSM![Дата ВУД] Then
      RSM.Edit
      For Each fld In RSM.Fields
        sf = fld.Name
        If Len(RSM(sf) & "") = 0 Then RSM(sf) = RSD(sf)
      Next
      RSM.Update
      RSD.Delete
      RSD.MoveNext
    Else
      RSM.MoveNext
    End If
  Loop
  Set fld = Nothing: RSD.Close: RSM.Close
  Set RSD = Nothing: Set RSM = Nothing: Set DB = Nothing
...
Рейтинг: 0 / 0
17.12.2015, 13:48
    #39130776
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
-Практикант-, вот такую ошибку выдает при компиляции
...
Рейтинг: 0 / 0
17.12.2015, 13:57
    #39130794
Объединение по условию
terkin_vv, я привел тело процедуры, а ее заголовок и конец за Вами.
...
Рейтинг: 0 / 0
17.12.2015, 13:58
    #39130800
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vvЕсли честно, то еще не решил,ЗБС... а кто решать будет - мы, что ли? "Сделайте мне чего-нибудь, очень надо!"... реши, преврати в слова, потом приходи...
...
Рейтинг: 0 / 0
17.12.2015, 14:45
    #39130864
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
Akinaterkin_vvЕсли честно, то еще не решил,ЗБС... а кто решать будет - мы, что ли? "Сделайте мне чего-нибудь, очень надо!"... реши, преврати в слова, потом приходи...

Я же написал: Удалить необходимо будет запись в которой будут пустые не идентифицирующие поля
...
Рейтинг: 0 / 0
17.12.2015, 15:19
    #39130902
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vvЯ же написал: Удалить необходимо будет запись в которой будут пустые не идентифицирующие поля
Ну дурь ты написал, неужели сам не понимаешь? На свой скрин посмотри!
Первую запись следует удалить, потому что в ней "пустое не идентифицирующее поле" [пункт].
Вторую запись следует удалить, потому что в ней "пустое не идентифицирующее поле" [дата совершения].
В итоге - получишь чистую, незамутнённо-незаполненную таблицу...

Думай - сперва, что же нужно, потом думай, собираешься ли сказать то, что хочешь, потом думай, а хочешь ли ты именно то, что нужно... и только потом - говори.
...
Рейтинг: 0 / 0
17.12.2015, 15:24
    #39130913
terkin_vv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
Akina, я не знаю как это программно (технически реализовать), поэтому пишу своими словами. В аксессе не силен, в связи с чем и попросил о помощи. Если можете помогите, если нет, то зачем писать?
...
Рейтинг: 0 / 0
17.12.2015, 15:34
    #39130924
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
При чём тут Аксесс? У тебя технического задания нет, Аксесс пока даже трогать не нужно.

terkin_vvЕсли можете помогите
Как? подумать за тебя, что ТЕБЕ нужно?
Я задал вопросы, на которые никто, кроме тебя, ответить не в состоянии. Отвечай.
А заодно ответь на вопрос - как так получается, что у тебя вообще можно ввести две (и более) записи с идентичным значением идентифицирующего кода? Именно этого быть не должно - при попытке ввести такую запись пользователь должен как минимум получать сообщение, что он собирается создать дубликат, а в оптимуме - сразу получать существующую запись для ввода недостающих данных и корректировки существующих.
...
Рейтинг: 0 / 0
17.12.2015, 16:17
    #39130986
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение по условию
terkin_vv,
-обзовите процедуру (например:sub My() и в конце End sub)
-установите DAO (ссылку)
...
Рейтинг: 0 / 0
17.12.2015, 16:39
    #39131020
Объединение по условию
terkin_vv, код, наверное, задействовать не смогли.
Тот же алгоритм, что и в коде, но 2-мя запросами:
Запрос на обновление
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
UPDATE Дела As T INNER JOIN 
(SELECT T1.* FROM Дела AS T1
WHERE T1.Код=(SELECT Min(T2.Код) FROM Дела As T2 WHERE T2.УД=T1.УД And  T2.[Дата ВУД]=T1.[Дата ВУД])) As Q 
ON T.УД=Q.УД And  T.[Дата ВУД]=Q.[Дата ВУД]
SET Q.Фабула=IIf(Len(Q.Фабула & '')=0, T.Фабула, Q.Фабула), 
Q.Статья=IIf(Len(Q.Статья & '')=0, T.Статья, Q.Статья),
Q.часть=IIf(Len(Q.часть & '')=0, T.часть, Q.часть),
Q.пункт=IIf(Len(Q.пункт & '')=0, T.пункт, Q.пункт),
Q.Примечание=IIf(Len(Q.Примечание & '')=0, T.Примечание, Q.Примечание), 
Q.Эпизод=IIf(Len(Q.Эпизод & '')=0, T.Эпизод, Q.Эпизод),
Q.[Дата совершения]=IIf(Len(Q.[Дата совершения] & '')=0, T.[Дата совершения], Q.[Дата совершения]),
Q.Решение=IIf(Len(Q.Решение & '')=0, T.Решение, Q.Решение),
Q.[Дата решения]=IIf(Len(Q.[Дата решения] & '')=0, T.[Дата решения], Q.[Дата решения])
WHERE T.Код<>Q.Код


Запрос на удаление
Код: sql
1.
2.
DELETE T1.* FROM Дела AS T1
WHERE T1.Код<>(SELECT Min(T2.Код) FROM Дела As T2 WHERE T2.УД=T1.УД And  T2.[Дата ВУД]=T1.[Дата ВУД])
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объединение по условию / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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