Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 уникальная уникальность  [new]
didgik
Member

Откуда:
Сообщений: 855
Привет народ.
Есть хотелка реализовать следующее, два поля - текстовое и логическое. Текстовое и логический 0 повторятся могут, а текстовое и логический 1 только в одном экземпляре.
текстбул
текст0
текст0
текст1
текст1 - ошибка

Но сдается мне, просто индексом тут не обойтись, так?
6 июн 19, 14:02    [21903504]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
PWW
Member

Откуда: Москва
Сообщений: 3285
didgik,

Так.
6 июн 19, 14:07    [21903511]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19461
В рамках MS Access - нет. И триггеры (даже если версия позволяет) не помогут - в них можно использовать только скалярные функции, ни пользовательские, ни по подмножеству (типа DCount) недопустимы.

Так что только контроль на уровне интерфейса.
6 июн 19, 14:27    [21903544]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
didgik
Но сдается мне, просто индексом тут не обойтись, так?
Public Sub ADD_CONSTRAINT()'установить ограничение
CurrentProject.Connection.Execute _
"ALTER TABLE [Таблица] ADD CONSTRAINT CountRec1 CHECK " & _
"((SELECT [текст] FROM [Таблица] WHERE [бул] GROUP BY [текст] HAVING Count([текст])>1)=0);"
End Sub

Public Sub Drop_CONSTRAINT()'снять ограничение - вдруг понадобится
CurrentProject.Connection.Execute _
"ALTER TABLE [Таблица] DROP CONSTRAINT CountRec1;"
End Sub

Как-то так...
6 июн 19, 15:59    [21903697]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
этот код только установить ограничение, далее само работать будет...
6 июн 19, 16:01    [21903700]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
didgik
Member

Откуда:
Сообщений: 855
а CHECK это для какой версии?
6 июн 19, 16:40    [21903734]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
didgik
а CHECK это для какой версии?
Версии чего? Ты думаешь я историк?
6 июн 19, 19:27    [21903970]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4599
didgik
Текстовое и логический 0 повторятся могут, а текстовое и логический 1 только в одном экземпляре.

возможно суммировала бы столбец БУЛ, сумма должна быть более -2, т.е 0 или -1
6 июн 19, 20:11    [21903989]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
didgik
Member

Откуда:
Сообщений: 855
Панург
didgik
а CHECK это для какой версии?
Версии чего? Ты думаешь я историк?

Аксесса или MS jet.
Я попробовал в аксесе запустить этот запрос через мастер запросов, он ругнулся на check
6 июн 19, 20:15    [21903993]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
didgik, а ты думаешь зачем я код написал? Можешь попробовать переключить SQL на ANSI 92, но ради установки одного ограничения я бы этого делать не стал...
7 июн 19, 03:56    [21904138]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
didgik
запустить этот запрос через мастер запросов
qbe может создать не все запросы...
7 июн 19, 04:05    [21904140]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
didgik
Member

Откуда:
Сообщений: 855
Панург
didgik, а ты думаешь зачем я код написал? Можешь попробовать переключить SQL на ANSI 92, но ради установки одного ограничения я бы этого делать не стал...

Ага. Переключил на ANSI 92 запрос сработал. И тут возникло 2 вопроса.
1. Чем плох ANSI 92
2. Как этот Cheсk должен сработать? Я попробовал сделать доблирующие поля, получилось и никаких ошибок не выдало.

Тут, наверно, надо озвучить, что я работаю с базой MS jet через АДО, а акссес использую для проверок и экспериментов, а потом все перевожу в код через АДО.
7 июн 19, 15:39    [21904641]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2824
didgik,

1. Плох тем, что иногда Access закрывается крашем да так, что файл потом невозможно восстановить. Правда такое случается не так часто, но бывает. Сам восстанавливал свои базы через бекапы в таких случаях, но не иначе.

2. Идея Панурга верная, только чуть-чуть по другому надо было написать. Нажмите Ctrl+G и там 1 раз запустите вот такой код:

CurrentProject.Connection.Execute "ALTER TABLE [Таблица] ADD CONSTRAINT Нельзя_2_раза_TRUE CHECK (DCount('*', [Таблица], 'бул=TRUE') < 2);


Как только 2 раза попробуете ввести TRUE, то получите ошибку, в тексте которого и будет название констрейнта "Нельзя_2_раза_TRUE".
7 июн 19, 15:50    [21904656]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Konst_One
Member

Откуда:
Сообщений: 11480
а почему нельзя сделать уникальный индекс по двум полям?
7 июн 19, 15:56    [21904667]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
bubucha
Member

Откуда:
Сообщений: 5407
Konst_One
а почему нельзя сделать уникальный индекс по двум полям?

не по ТЗ

2 didgik
Выше уже предлагали решать на уровне интерфейса, не?
7 июн 19, 16:10    [21904681]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
__Michelle
Member

Откуда:
Сообщений: 3110
Konst_One
а почему нельзя сделать уникальный индекс по двум полям?
Наверное, потому. что
didgik
Текстовое и логический 0 повторятся могут,
а текстовое и логический 1 только в одном экземпляре.
7 июн 19, 16:26    [21904706]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
didgik
Member

Откуда:
Сообщений: 855
bubucha
2 didgik
Выше уже предлагали решать на уровне интерфейса, не?

Предлагали, но это было б слишком просто.
В итоге год панурга прокатил, теперь надо внедрить в прогу и посмотреть как будет работать.
7 июн 19, 16:28    [21904709]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
didgik
Я попробовал сделать доблирующие поля, получилось и никаких ошибок не выдало.
Не недо грязи! всё работает. Условие - нельзя текстовое поле Null.

didgik
Как этот Cheсk должен сработать?
Мне думается это видно. Условие - ни одной записи не должен выводить запрос.

Почитать бы неплохо литературку.
7 июн 19, 18:36    [21904860]     Ответить | Цитировать Сообщить модератору
 Re: уникальная уникальность  [new]
didgik
Member

Откуда:
Сообщений: 855
Панург, я чуть выше написал что все заработало, был касяк у меня, но подумал, вдруг из аксесса не работает и надо через код, но в итоги все нормально, спасибо.
7 июн 19, 18:48    [21904876]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить