Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / дубликат записи / 12 сообщений из 12, страница 1 из 1
23.01.2010, 16:33
    #36426720
Agasi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
привет, есть база склада, у каждово тавара есть свой код и этот код идиентичен, как можно сделать что когда записивают новый тавар при писание нового кода проверять новый код с имеюшимся и выводит сообшение что код уже еьт?
спосибо за ответи
...
Рейтинг: 0 / 0
23.01.2010, 17:21
    #36426750
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
Agasi,

Самый простой вариант - сделать код товара первичным ключом.
...
Рейтинг: 0 / 0
23.01.2010, 19:11
    #36426835
дубликат записи
Индекс candidate?
...
Рейтинг: 0 / 0
24.01.2010, 12:55
    #36427356
Agasi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
candidat илиprimari?
...
Рейтинг: 0 / 0
24.01.2010, 15:07
    #36427453
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
Agasi,

Единственная разница между ними - праймари может быть только один, а кандидатов много. Ставьте что хотите.
...
Рейтинг: 0 / 0
24.01.2010, 15:31
    #36427480
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
Agasiпривет, есть база склада, у каждово тавара есть свой код и этот код идиентичен, как можно сделать что когда записивают новый тавар при писание нового кода проверять новый код с имеюшимся и выводит сообшение что код уже еьт?
спосибо за ответи

Я решаю проблему двойников путем запроса в методе VALID того поля, где вводится новый код товара, например, так:

SELECT COUNT(GOODSCODE) AS CNT1;
FROM MYTABLE ;
WHERE GOODSCODE == NEWCODE ;
INTO CURSOR SYS(2015) NOFILTER

SCATTER MEMVAR

IF M.CNT1 > 0 && есть двойник
* здесь действия по поводу двойника, например, вывод сообщения
RETRY
ENDIF

* и тому подобное
...
Рейтинг: 0 / 0
25.01.2010, 15:59
    #36429451
Agasi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
спосибо это то что надо
...
Рейтинг: 0 / 0
25.01.2010, 16:10
    #36429484
quxix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
igorbikAgasiпривет, есть база склада, у каждово тавара есть свой код и этот код идиентичен, как можно сделать что когда записивают новый тавар при писание нового кода проверять новый код с имеюшимся и выводит сообшение что код уже еьт?
спосибо за ответи

Я решаю проблему двойников путем запроса в методе VALID того поля, где вводится новый код товара, например, так:

SELECT COUNT(GOODSCODE) AS CNT1;
FROM MYTABLE ;
WHERE GOODSCODE == NEWCODE ;
INTO CURSOR SYS(2015) NOFILTER

SCATTER MEMVAR

IF M.CNT1 > 0 && есть двойник
* здесь действия по поводу двойника, например, вывод сообщения
RETRY
ENDIF

* и тому подобное

Теперь представим,что будет когда два и более пользователя работают одновременно и нажимают на valid вместе.
...
Рейтинг: 0 / 0
25.01.2010, 16:32
    #36429552
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
ИМХО - надо и то, и другое.
1. Стандартно ловить в валид объекта.
2. Сформировать индекс кандидат, отдадим примари на суррогатный ключик. Индекс, как последний игрок команды-вратарь, отловит ошибку. Плюс - уникальность будет сохранятся и в том случае, если эту таблицу откроют в другой программе.
...
Рейтинг: 0 / 0
25.01.2010, 19:58
    #36430071
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
quxix
Теперь представим,что будет когда два и более пользователя работают одновременно и нажимают на valid вместе.
Что ж, будем вместе представлять и нажимать на Валид. Желаю удачи.
Я вообще-то так сделать не мог до сих пор, но обещаю потренироваться...

Автор темы про совместный доступ не написал. А при таком разе я прежде блокирую таблицу, где ищу двойников, и проверяю селектами еще некоторые уникальные вещи, затем вставляю 1 запись с уникальными полями, разблокирую таблицу и спокойно заполняю в ней все то, что может быть неуникальным. Варинтов много.
На двух проектах по 15 и 24 компов пока 5 лет все работает без сбоев.
...
Рейтинг: 0 / 0
26.01.2010, 13:34
    #36431283
quxix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
igorbikquxix
Теперь представим,что будет когда два и более пользователя работают одновременно и нажимают на valid вместе.
Что ж, будем вместе представлять и нажимать на Валид. Желаю удачи.
Я вообще-то так сделать не мог до сих пор, но обещаю потренироваться...

А представлять и не надо наблюдаю картину дублей собственными глазами каждый день,
ведь на valid можно и программно жать и по несколько тысяч операций вставки данных в секунду с нескольких учётных мест.(Это о том когда ключ формируется криво)
igorbik
Автор темы про совместный доступ не написал. А при таком разе я прежде блокирую таблицу, где ищу двойников, и проверяю селектами еще некоторые уникальные вещи, затем вставляю 1 запись с уникальными полями, разблокирую таблицу и спокойно заполняю в ней все то, что может быть неуникальным.
при таком подходе замечаний нет :)

Мне представляется максимально простой реализация ключа в виде автоинкрементного ключа AUTOINC таблички(используемой только для генерации уникальных значений) -уникальность которого,при условии не обнуления счетчика, гарантированна. Что приближает реализацию уникальных идентификаторов к sequence -используемых для таких целей в больших СУБД
...
Рейтинг: 0 / 0
26.01.2010, 14:57
    #36431560
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дубликат записи
quxixМне представляется максимально простой реализация ключа в виде автоинкрементного ключа AUTOINC таблички(используемой только для генерации уникальных значений) -уникальность которого,при условии не обнуления счетчика, гарантированна. Что приближает реализацию уникальных идентификаторов к sequence -используемых для таких целей в больших СУБД
В целом согласен, только вот автор темы не уточнил, зачем именно ему нужна проверка на дубликат. Ведь далеко не факт, что после нахождения дубликата последует запрет на создание записи. Вполне возможно, что по условию задачи, таблица МОЖЕТ иметь дубли. Надо просто поставить пользователя в известность о том, что такое уже есть.

Ну, а в частности, поскольку речь идет о некоем "внешнем" (в смысле, доступном для просмотра пользователем) коде, то, скорее всего, там какая-то цифро-буквенная аббревиатура. Т.е. простой автоинкремент не годится.

Да, "до кучи".

"Последняя линия обороны" - это триггер. Проверка индекса - это как раз первая проверка. Еще до сброса буфера сработает. Соотвественно, можно реализовать контроль уникальности на уровне триггера, если на уровне буфера дубли еще допустимы (одновременная правка многих записей). Но, разумеется, триггер - это сложнее...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / дубликат записи / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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