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

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

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

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

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

Удалить необходимо будет запись в которой будут пустые не идентифицирующие поля
...
Рейтинг: 0 / 0
Объединение по условию
    #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
Объединение по условию
    #39130776
terkin_vv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-Практикант-, вот такую ошибку выдает при компиляции
...
Рейтинг: 0 / 0
Объединение по условию
    #39130794
terkin_vv, я привел тело процедуры, а ее заголовок и конец за Вами.
...
Рейтинг: 0 / 0
Объединение по условию
    #39130800
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terkin_vvЕсли честно, то еще не решил,ЗБС... а кто решать будет - мы, что ли? "Сделайте мне чего-нибудь, очень надо!"... реши, преврати в слова, потом приходи...
...
Рейтинг: 0 / 0
Объединение по условию
    #39130864
terkin_vv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinaterkin_vvЕсли честно, то еще не решил,ЗБС... а кто решать будет - мы, что ли? "Сделайте мне чего-нибудь, очень надо!"... реши, преврати в слова, потом приходи...

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

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

terkin_vvЕсли можете помогите
Как? подумать за тебя, что ТЕБЕ нужно?
Я задал вопросы, на которые никто, кроме тебя, ответить не в состоянии. Отвечай.
А заодно ответь на вопрос - как так получается, что у тебя вообще можно ввести две (и более) записи с идентичным значением идентифицирующего кода? Именно этого быть не должно - при попытке ввести такую запись пользователь должен как минимум получать сообщение, что он собирается создать дубликат, а в оптимуме - сразу получать существующую запись для ввода недостающих данных и корректировки существующих.
...
Рейтинг: 0 / 0
Объединение по условию
    #39130986
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terkin_vv,
-обзовите процедуру (например:sub My() и в конце End sub)
-установите DAO (ссылку)
...
Рейтинг: 0 / 0
Объединение по условию
    #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
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объединение по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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