Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Уникальный ключ позволяет добавить дублирующиеся значения   Найти похожие ветки 

 
Sergey Ivanov   (2006-03-07 12:07) [0]

Уникальный ключ позволяет добавить дублирующиеся значения.

Как такое может быть?

Воспроизвести на тестовой базе не могу, а у пользователей постоянно проблемы.

С уважением Иванов Сергей.


 
Sergey13 ©   (2006-03-07 12:10) [1]

2Sergey Ivanov   (07.03.06 12:07)
>Уникальный ключ позволяет добавить дублирующиеся значения.
Да ладно гнать то. 8-)

>IB6.x
выкинь его нафики поставь FireBird


 
Sergey Ivanov   (2006-03-07 12:17) [2]

Sergey13 ©   (07.03.06 12:10) [1]
Да какое гнать - упарился уже.

В базу закачивается справочник чого-то там. возможно в источнике записей и есть такие дублирующиеся значения, но как они остаются в базе - не понятно, а на следующий раз Update failed и все.


 
Плохиш ©   (2006-03-07 12:20) [3]


> Sergey Ivanov   (07.03.06 12:07)  
> Уникальный ключ позволяет добавить дублирующиеся значения.

Это уже неуникальный ключ.


 
Desdechado ©   (2006-03-07 12:21) [4]

порченый индекс - backup-restore поможет


 
Sergey13 ©   (2006-03-07 12:23) [5]

2[2] Sergey Ivanov   (07.03.06 12:17)
>В базу закачивается справочник чого-то там
А индексы при этом не отключаются случаем?


 
Sergey Ivanov   (2006-03-07 12:31) [6]

Desdechado ©   (07.03.06 12:21) [4]
Не поможет. Не восстановиться.
gbak: ERROR: attempt to store duplicate value (visible to active transactions) in unique index "RDB$PRIMARY22"
gbak: Index "RDB$PRIMARY22" failed to activate because:
gbak:   The unique index has duplicate values or NULLs.
gbak:   Delete or Update duplicate values or NULLs, and activate index with
gbak:   ALTER INDEX "RDB$PRIMARY22" ACTIVE;


Я что то не так делаю, а что не пойму. Как такое получить программно? Индексы не отключаются, транзакции используются явно.

Как можно перестроить индексы по всем таблицам при старте программы?


 
Sergey13 ©   (2006-03-07 12:40) [7]

2[6] Sergey Ivanov   (07.03.06 12:31)
>Как можно перестроить индексы по всем таблицам при старте программы?
Не надо этого делать.
Надо проверить программу закачки "справочника чого-то там".
В работающей базе удали ключ. Найди дубликаты и грохни их по альтернативным ключам (возможно для этого придется создать временный первичный ключ). Восстанови ключ.
Я бы наверное пошел по такому пути. Естественно запасся бы страховочными копиями (файловое копирование с отключенным сервером).


 
Sergey Ivanov   (2006-03-07 12:52) [8]

Лечить я уже научился :-)
Программа закачки моя. Все просто до безобразия.

Хочется не попадать в дальнейшем. А не понимаю как такое может быть.


     with dbfBarcodes do begin
       FilePath := ImpDir;
     end;
     with ibqLBarcodes.Transaction do begin
       if Active then
         Rollback;
       StartTransaction;
     end;
     ibqLBarcodes.Open;
     with dbfBarcodes do begin
       Open;
       RowsDone := 0;
       RowsTotal := RecordCount;
       First;
       while not Eof do begin
         if ibqLBarcodes.Locate("BRC_CODE",dbfBarcodesBRC_CODE.AsString,[]) then begin
           ibqLBarcodes.Edit
         end else begin
           ibqLBarcodes.Append;
         end;
           ibqLBarcodesBRC_KRD_ID.AsInteger := dbfBarcodesBRC_KRD_ID.AsInteger;
           ibqLBarcodesBRC_CODE.AsString := dbfBarcodesBRC_CODE.AsString;
           ibqLBarcodesBRC_USER.AsInteger := dbfBarcodesBRC_USER.AsInteger;
           ibqLBarcodesBRC_STG_ID.AsInteger := dbfBarcodesBRC_STG_ID.AsInteger;
           ibqLBarcodesBRC_ACTIVE.AsInteger := 1;
           //MainForm.StatusShow(ibqLBarcodesBRC_CODE.AsString);
         ibqLBarcodes.Post;
         Next;
         RowsDone := RowsDone + 1;
         Gauge1.Progress := round(RowsDone / RowsTotal * 100);
         Application.ProcessMessages;
       end;
     end;
     with ibqLBarcodes.Transaction do begin
       if Active then
         Commit;
     end;


 
Desdechado ©   (2006-03-07 12:55) [9]

Sergey13 ©   (07.03.06 12:23) [5]
в IB нельзя его отключить
а даже если б можно было, его потом ведь не включишь из-за дублей


 
Sergey13 ©   (2006-03-07 13:00) [10]

2 [9] Desdechado ©   (07.03.06 12:55)
Просто другого способа получить дубли в ПК я не придумал. 8-)


 
Sergey13 ©   (2006-03-07 13:06) [11]

2[8] Sergey Ivanov   (07.03.06 12:52)
А что в эих полях ПК? BRC_KRD_ID или BRC_CODE?


 
Sergey Ivanov   (2006-03-07 13:16) [12]

Конечно BRC_CODE


 
Desdechado ©   (2006-03-07 13:19) [13]

есть подозрения, что автор ковыряется в системных таблицах при "заливке"


 
Sergey Ivanov   (2006-03-07 13:28) [14]

Автор -  я. Не ковыряюсь. Процедура ВСЯ выше.

запрос в ibqLBarcodes
select
BRC_KRD_ID,
BRC_CODE,
BRC_TIMESTAMP,
BRC_STG_ID,
BRC_USER,
BRC_ACTIVE
from
BARCODES
order by
 BRC_CODE;


updatesql:


update BARCODES
set
 BRC_KRD_ID = :BRC_KRD_ID,
 BRC_CODE = :BRC_CODE,
 BRC_TIMESTAMP = :BRC_TIMESTAMP,
 BRC_STG_ID = :BRC_STG_ID,
 BRC_USER = :BRC_USER,
 BRC_ACTIVE = :BRC_ACTIVE
where
 BRC_CODE = :OLD_BRC_CODE

insert into BARCODES
 (BRC_KRD_ID, BRC_CODE, BRC_TIMESTAMP, BRC_STG_ID, BRC_USER,
BRC_ACTIVE)
values
 (:BRC_KRD_ID, :BRC_CODE, :BRC_TIMESTAMP, :BRC_STG_ID, :BRC_USER,
:BRC_ACTIVE)


 
Desdechado ©   (2006-03-07 13:38) [15]

значит, исходная БД перед заливкой в нее уже с порченым индексом, который не может отследить дубли


 
Sergey Ivanov   (2006-03-07 13:52) [16]

А если перед заливкой пересоздавать таблицы, это дурной тон?


 
Sergey13 ©   (2006-03-07 16:00) [17]

2[16] Sergey Ivanov   (07.03.06 13:52)
Любой DDL в программе - это уже не хорошо.


 
Sergey Ivanov   (2006-03-07 16:44) [18]

В общем то, я так и думал, надеялся только, что мне скажут, что это всё фигня... :-)

Но, всё равно спасибо!



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
2-1144938709
Ezorcist
2006-04-13 18:31
2006.04.30
Ошибка синтаксиса FROM


2-1144998437
nastyok::
2006-04-14 11:07
2006.04.30
Table1.FindKey


15-1144504394
OSokin
2006-04-08 17:53
2006.04.30
Кто любит игру "Корсары"?


4-1139198374
Nike
2006-02-06 06:59
2006.04.30
Получение информации о EXE


1-1143273458
LesarS
2006-03-25 10:57
2006.04.30
Плагин для Winamp