"violation of PRIMARY or UNIQUE KEY constraint "KNK_PK" on table "KNK"
Invalid insert or update value(s): object columns are constrained - no 2
table rows can have duplicate column values Error Code: 345"
po wybraniu pacjenta na próbę dodania czegokolwiek np. procedury, ICD...
versja 2010.02.0.1
Witam
Oczywiście sekwencje nic nie pomogą. Opcje są dwie, albo w bazie pomieszały się generatory albo zgodnie z komunikatem rzeczywiście występują zduplikowane wartości w kolumnie nknk, która jest kluczem głównym tej tabeli. Należy jednak pamietać, że klucz główny zbudowany jest tutaj na dwóch kolumnach nknk i nins co znaczy, że nie może powtórzyć się taki sam numer nknk z takim samym numerem nins, natomiast dopuszczalne jest powtórzenie nknk pod warunkiem że nins jest inny, i odwrotnie.
Najlepiej spróbować zalogować się do bazy danych i sprawdzić w czym problem. Najsprawniej będzie zrobić to jakimś programem do poruszania się po bazach danych, jeżeli takiego niema to wystarczy wiersz poleceń.
(zakładam, że program jest na dysku c w standardowej ścieżce)
Uruchamiamy:
KOPIA BEZPIECZEŃSTWA!
start-uruchom-cmd
cd \
cd ks\ks-pps\baza
isql kspps.fdb -user sysdba -password masterkey //tu ciekawostka, firebird obsługuje tylko 8 znaków hasła, więc równie dobrze można wpisać masterke
select max(nknk) from knk; //zapamiętaj wartość
SELECT NEXT VALUE FOR knk_seq FROM RDB$DATABASE;
wynik zapytania powinien podać liczbę większą o 1 od max(nknk) jeżeli tak nie jest to należy wykonać poniższe kroki zakładam że wynik max(nknk)=5
alter sequence knk_seq restart with 6;
commit; //zatwierdza poprzednie zapytania, w większości baz jest autocommit i nie trzeba go wykonywać ale nie wiem jak jest tutaj, tak czy inaczej nie zaszkodzi.
Przy okazji można sprawdzić też knk_unq wykonując powyższe czynności dla
select max(iknk) from knk;
SELECT NEXT VALUE FOR knk_unq FROM RDB$DATABASE; // wartość knk_seq i knk_unq najpewniej się będą różnić i nie ma potrzeby żeby były takie same. Nie zmieniamy nic na siłę.
Jeżeli generatory są w porządku to znaczy, że rzeczywiście są podublowane wartości. Zalecam przekazanie bazy do specjalisty(KS, albo najbliższy oddział)