![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Multiple records found ;but only one expected... [D5, D6, IB6.x]
ramil © (2002-12-14 16:24:00)В какой-то момент времени в таблице базы возникают записи "двойники", и при обращении к таким возникает подобная ошибка. Как убрать эти записи? При попытке удалить пишет то-же. Т.е. база частично парализована. Про причину появления пока не спрашиваю, покапаюсь чуток, может сам что сморозил...А так, если не обращаться к дублированным записям, все работает. КАК БЫТЬ?
ramil (2002-12-16 15:32:00) [1]Всем огромнейшее спасибо! Проблему решил созданием другой базы и перекачиванием полезных позиций в нее из старой. Теперь бъюсь над локализацией первопричины глюков.
ЮЮ (2002-12-16 05:20:00) [2]C записями-паразитками справился?
Delete from Zakaz where (RasDat=0) or (RasDat is NULL)
Только не из Database Desktop-а, а хотя бы из SQL Explorer-а
ramil (2002-12-15 18:25:00) [3]
> passm © (15.12.02 17:55)
> ramil (15.12.02 17:49)> Сложно ли будет пересоздать таблицы
> и занести в них правильные данные?
А куда деваться, рано или поздно это должно было случиться. Придется базу причесывать сейчас.
Кстати попутный вопрос, раз уж придется много чего переделывать, а в каких случаях выгодно с IBExpress связываться, не совсем уяснил?
Anatoly Podgoretsky (2002-12-15 18:11:00) [4]ramil (15.12.02 17:49)
На размер не стоит обращать внимание, дкмать надо над работсопсобностью таблиц
passm (2002-12-15 17:55:00) [5]ramil (15.12.02 17:49)> Сложно ли будет пересоздать таблицы и занести в них правильные данные?
ramil (2002-12-15 17:49:00) [6]Всем большое спасибо (за терпение в первую очередь).
Про решение проблемы в корне - это что придется в каждую таблицу (17 шт.) искусственное поле засовывать и определять по нему ключ (по уму то как делают? это ж насколько вырастет объем базы?)
>Но, глядя на таблицу, под ключевые поля напрашиваются ZAKAZNO, TOVARNAME. Кстати, не лучше ли было ввести товарный справочник?
В том-то и дело, что все значения остальных полей не уникальны и могут встречаться в таблице в разных комбинациях, и так почти во всей базе (12 из 17 таблиц точнее).
Спасибо.
passm (2002-12-15 15:44:00) [7]Anatoly Podgoretsky © (15.12.02 14:19)> Скорее всего сначала придется создать поле INTEGER, затем заполнить его уникальными значениями, и потом создать по нему уникальный индекс.
Но, глядя на таблицу, под ключевые поля напрашиваются ZAKAZNO, TOVARNAME. Кстати, не лучше ли было ввести товарный справочник?
Anatoly Podgoretsky (2002-12-15 14:19:00) [8]ramil (15.12.02 13:54)
Вот по этому у тебя все неприятности и возникают, влзможно поле ZakazNo у тебя естественный первичный ключ, если нет, то как указал Reindeer Moss Eater (15.12.02 14:02) сделай искуственный, автоинкриментный, в IB это через генераторы
Reindeer Moss Eater (2002-12-15 14:18:00) [9]>Alpine ©
А кто его в DatabaseDesktop сформирует?
Да еще чтобы он "живым" оказался (для CTRL+DEL)?
Alpine (2002-12-15 14:11:00) [10]А такой запрос не помогает ?
Select distinct * from tablename
Reindeer Moss Eater (2002-12-15 14:02:00) [11]alter table Zakaz add constraint pk_Zakaz primary key(список_полей_таблицы_Zakaz_через_запятую_уникально_идентифицирующих_запись);
Reindeer Moss Eater (2002-12-15 13:57:00) [12]Как и предполагалось, виной тому - отсутствие первичных ключей в таблицах.
ramil (2002-12-15 13:54:00) [13]Конкретизирую вопрос (не знаю насколько достаточно).Есть база IB Sclad.gdb, содержащая в себе 17 таблиц. У одной из них "ZAKAZ" следущая структура, приведу эту часть оператора SQL:
...
Create Table Zakaz(ZakazNo Integer,TovarName Char(20),RasDat Date, Price Integer, Count Integer);
...
Уникальные ключи не определены(ни в одной таблице), есть лишь индексы.
Теперь просматривая эту таблицу (модернизированную уже моей программой в течение 0.5 года) через Database Desktop (чтоб не приплетать мою программу) обнаруживаю одинаковые записи (штук -осемь) - во всех столбцах нулевые значения, а вместо даты 0:00:00; 30:12:1899
И при попытке удалить их через Ctrl-Del, предварительно переведя тут же таблицу в режим редактирования,получаю надпись в строке состояния - Multiple records found, but only one was expected и естественно ничего не удаляет, а с нормальными записями этот номер проходит влегкую. Ну и, соответственно, моя программа реагирует на подобные попытки соответствующе.
Anatoly Podgoretsky (2002-12-15 11:32:00) [14]За все это время автор так и не догадался привести свои запросу, структуру, ну как будто ветка потрепаться.
ЮЮ (2002-12-15 11:16:00) [15]>UPDATE"у тоже по барабану сколько записей он изменит.
Если этот UPDATE не в TUpdateSQL, явном или неявном, к в данном случае.
Reindeer Moss Eater (2002-12-15 08:34:00) [16]UPDATE"у тоже по барабану сколько записей он изменит.
ЮЮ (2002-12-15 02:55:00) [17]>я бы на данный момент был бы удовлетворен если бы каким-то образом удалось удалить эти двойные записи из таблицы. Спасибо
Delete from table1 where ...
Оператору DELETE, в отличии от UPDATE, всё равно сколько записей удовлетворяет условию
Anatoly Podgoretsky (2002-12-14 17:51:00) [18]Ты что, хоть все записи одной срокой, вжик и нету
Reindeer Moss Eater (2002-12-14 17:49:00) [19]Спроси у своего сервера, создавал ли ты первичные ключи для таблиц.
ramil (2002-12-14 17:45:00) [20]Вот те на! Дальше и спросить не знаю как...