Избежать повторных вводов

GloomyDoc
Дата: 03.12.2009 15:32:48
Добрый день! База по взаимодействию лекарств А-Б, А-В, А-Г и т.д. Как избежать повторного ввода значений А-Б в запись Б-А, чтобы при этом в поле "результат взаимодействий" высвечивалось одно значение? По сути, очень похоже на турнирную таблицу в спорте. Спасибо.
Владимир Саныч
Дата: 03.12.2009 16:16:13
Сделайте ключ (или уникальный индекс) по этим двум полям.
Guest33
Дата: 03.12.2009 16:17:33
Уникальный индекс, наверно сделать не удастся. Как набросок варианта:
В общем модуле - функция, подсчитывающая сумму кодов символов строки, например:
Public Function CalcCRC(txt As String) As Long
Dim i As Integer
Dim S As Long
For i = 1 To Len(txt)
  S = S + Asc(UCase(Mid(txt, i, 1)))
Next i
CalcCRC = S
End Function

На форме на событии "Перед обновлением" поля со списком лекарств (А-В) (у меня поле Ctr в таблице Farm), код:
Private Sub Ctr_BeforeUpdate(Cancel As Integer)
Dim txt As String
txt = "select count(*) from Farm where CalcCRC(Farm.Ctr)=" & CalcCRC(Me.Ctr)
If CurrentProject.Connection.Execute(txt).Collect(0) <> 0 Then
  MsgBox "Сочетание " & Me.Ctr & " уже есть!", , ""
  Cancel = True
End If
End Sub
Ёжик`
Дата: 03.12.2009 18:07:05
Владимир Саныч
Сделайте ключ (или уникальный индекс) по этим двум полям.

+1
И добавить А<Б
И код в форме чтобы Б-А переделывал в А-Б по правилу А<Б
Ёжик`
Дата: 03.12.2009 18:07:58
И добавить констрейт А<Б
И код в форме чтобы Б-А переделывал в А-Б по правилу А<Б
mds_world
Дата: 09.12.2009 22:38:38
GloomyDoc
Добрый день! База по взаимодействию лекарств А-Б, А-В, А-Г и т.д. Как избежать повторного ввода значений А-Б в запись Б-А, чтобы при этом в поле "результат взаимодействий" высвечивалось одно значение? По сути, очень похоже на турнирную таблицу в спорте. Спасибо.

Это ж какой титанический труд взвалил на себя ТС. Лекарств тысячи и тысячи и исследовать их попарное взаимодействие!? Ну, предположим, автор ограничился несколькими десятками, все равно, квадрат этих нескольких десятков приведет к тысячам. И это накладывает очень серьезные требования к структуре и функционалу БД. Если при проектировании поднапутать, то вместо ожидаемой помощи, БД будет пожирателем времени и сил.
GloomyDoc
Дата: 14.12.2009 20:01:00
Попробовал объединить поля INN1 & INN2. Ничего пока не получается. Посыпав голову пеплом, прилагаю лаконичный вариант файла. Остаюсь крайне признательным за помощь. Мрачный доктор
ё
Дата: 14.12.2009 20:19:22
GloomyDoc
Попробовал объединить поля INN1 & INN2. Ничего пока не получается. Посыпав голову пеплом, прилагаю лаконичный вариант файла. Остаюсь крайне признательным за помощь. Мрачный доктор


так а чем вас не устроил вариант предложенный Ёжик` ?
делаете INN1 и INN2 - ключом таблицы DDI
в форме ввода - проверяете что бы в новой записи INN1 < INN2 (в BeforeUpdate этих полей)
условие - "Избежать повторных вводов " - полюбому будет выполнятся...

зы.
заканчивайте, пока не затянуло, пользоватся полями подстановки в таблицах (тем более - неправильно)
это - для форм
в таблицах - это зло, там им не место
mds_world
Дата: 14.12.2009 20:29:01
Вам вот так советовали. Один уникальный индекс на два поля
mds_world
Дата: 14.12.2009 20:39:43
Да, и правило, описанное Ежиком, тоже необходимо. Иначе, возможен зеркальный вариант