Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / уникальная уникальность / 19 сообщений из 19, страница 1 из 1
06.06.2019, 14:02
    #39823452
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
Привет народ.
Есть хотелка реализовать следующее, два поля - текстовое и логическое. Текстовое и логический 0 повторятся могут, а текстовое и логический 1 только в одном экземпляре.
текстбултекст0текст0текст1текст1 - ошибка
Но сдается мне, просто индексом тут не обойтись, так?
...
Рейтинг: 0 / 0
06.06.2019, 14:07
    #39823457
PWW
PWW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgik,

Так.
...
Рейтинг: 0 / 0
06.06.2019, 14:27
    #39823486
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
В рамках MS Access - нет. И триггеры (даже если версия позволяет) не помогут - в них можно использовать только скалярные функции, ни пользовательские, ни по подмножеству (типа DCount) недопустимы.

Так что только контроль на уровне интерфейса.
...
Рейтинг: 0 / 0
06.06.2019, 15:59
    #39823564
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgikНо сдается мне, просто индексом тут не обойтись, так?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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


Как-то так...
...
Рейтинг: 0 / 0
06.06.2019, 16:01
    #39823566
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
этот код только установить ограничение, далее само работать будет...
...
Рейтинг: 0 / 0
06.06.2019, 16:40
    #39823588
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
а CHECK это для какой версии?
...
Рейтинг: 0 / 0
06.06.2019, 19:27
    #39823698
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgikа CHECK это для какой версии?Версии чего? Ты думаешь я историк?
...
Рейтинг: 0 / 0
06.06.2019, 20:11
    #39823714
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgikТекстовое и логический 0 повторятся могут, а текстовое и логический 1 только в одном экземпляре.
возможно суммировала бы столбец БУЛ, сумма должна быть более -2 , т.е 0 или -1
...
Рейтинг: 0 / 0
06.06.2019, 20:15
    #39823718
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
Панургdidgikа CHECK это для какой версии?Версии чего? Ты думаешь я историк?
Аксесса или MS jet.
Я попробовал в аксесе запустить этот запрос через мастер запросов, он ругнулся на check
...
Рейтинг: 0 / 0
07.06.2019, 03:56
    #39823816
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgik, а ты думаешь зачем я код написал? Можешь попробовать переключить SQL на ANSI 92, но ради установки одного ограничения я бы этого делать не стал...
...
Рейтинг: 0 / 0
07.06.2019, 04:05
    #39823818
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgikзапустить этот запрос через мастер запросовqbe может создать не все запросы...
...
Рейтинг: 0 / 0
07.06.2019, 15:39
    #39824122
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
Панургdidgik, а ты думаешь зачем я код написал? Можешь попробовать переключить SQL на ANSI 92, но ради установки одного ограничения я бы этого делать не стал...
Ага. Переключил на ANSI 92 запрос сработал. И тут возникло 2 вопроса.
1. Чем плох ANSI 92
2. Как этот Cheсk должен сработать? Я попробовал сделать доблирующие поля, получилось и никаких ошибок не выдало.

Тут, наверно, надо озвучить, что я работаю с базой MS jet через АДО, а акссес использую для проверок и экспериментов, а потом все перевожу в код через АДО.
...
Рейтинг: 0 / 0
07.06.2019, 15:50
    #39824130
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgik,

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

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

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



Как только 2 раза попробуете ввести TRUE, то получите ошибку, в тексте которого и будет название констрейнта "Нельзя_2_раза_TRUE".
...
Рейтинг: 0 / 0
07.06.2019, 15:56
    #39824135
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
а почему нельзя сделать уникальный индекс по двум полям?
...
Рейтинг: 0 / 0
07.06.2019, 16:10
    #39824144
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
Konst_Oneа почему нельзя сделать уникальный индекс по двум полям?
не по ТЗ

2 didgik
Выше уже предлагали решать на уровне интерфейса, не?
...
Рейтинг: 0 / 0
07.06.2019, 16:26
    #39824164
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
Konst_Oneа почему нельзя сделать уникальный индекс по двум полям?Наверное, потому. чтоdidgikТекстовое и логический 0 повторятся могут,
а текстовое и логический 1 только в одном экземпляре.
...
Рейтинг: 0 / 0
07.06.2019, 16:28
    #39824167
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
bubucha2 didgik
Выше уже предлагали решать на уровне интерфейса, не?
Предлагали, но это было б слишком просто.
В итоге год панурга прокатил, теперь надо внедрить в прогу и посмотреть как будет работать.
...
Рейтинг: 0 / 0
07.06.2019, 18:36
    #39824268
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
didgikЯ попробовал сделать доблирующие поля, получилось и никаких ошибок не выдало.Не недо грязи! всё работает. Условие - нельзя текстовое поле Null.

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

Почитать бы неплохо литературку.
...
Рейтинг: 0 / 0
07.06.2019, 18:48
    #39824280
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальная уникальность
Панург, я чуть выше написал что все заработало, был касяк у меня, но подумал, вдруг из аксесса не работает и надо через код, но в итоги все нормально, спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / уникальная уникальность / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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