![]() |
|
|
![]()
|
|
| HAS |
|
|||
|
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
Здравствуйте !
Я вновь обращаюсь к Вам за помошью, с надеждой что хоть кто-нибудь мне поможет ! Значит использую DBGrid. Он отображает содежимое msaccess. Там имеется счетчик. Если допутим я удалю последнюю запись (допустим 10-ую запись), а затем добавляю новую, то она уже идет под номером 11, (т.е. 1 2 3 4 5 6 7 8 9 11) вот никак не могу разбраться. Посоветуйте что сделать ! Спасибо ! |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
И пусть себе идёт... Автоинкремент - гарантирует уникальность номера в пределах таблицы, ничего менять не надо
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Vit а что будешь делать, если кол-во записей очень большое, но при этом известно что, удаляются они тоже в большом кол-ве???
Я лично у себя в курасаче вообще тип счётчик не использовал, я там заместо этого ставил числовой тип, а в случае удаления записи, все последующие в цикле на одну уменьшал. Конечно при большом кол-ве записей это тоже не лучший способ, но зато переполнение разрядной сетки менее вероятно. Добавлено @ 23:59 Ну конечно же ещё каскадное обновление было установлено. |
|||
|
||||
| Alex |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Если БД многопользовательская то тем самым ты вырыл себе БОЛЬШУЮ яму, в которую обязательно рухнешь. Я просто четко представляю, что ты наверняка при добавлении новой записи проверяешь, а нет ли у тебя ранее использованных идентификаторов, но уже удаленных. А теперь представь, что два пользователя приблизительно в один и тот же момент времени захотели добавить запись. Программа обращается к базе и получает свободный идентификатор и есть вероятность, что полученный идентификатор будет одинаковый полученный программой у первого и у второго пользователя. А если это произошло, то все, кто-то не сможет добавить запись. Счетчики ведут себя правильно и всегда возвращают новое значение. Добавлено @ 00:57
Представим, что у тебя таблица 100000 записей и в таблице скажем 20 колонок. Ну, пробегись в цикле по ней. При том, что база на серваке лежит. Я посмотрю, сколько будет выполняться твой проход и что тебе системный администратор скажет на счет загрузки сети. -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
||||
|
|||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
Я долго бился над подобной проблемой и пришел к выводу. что кроме как формировать номера непосредствнно перед выводом в грид вариантов мало, по крайней мере стандартными способами этого не сделать.
|
|||
|
||||
| innok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 12.10.2004 Репутация: 1 Всего: 1 |
как правило счетчики используются для внутренних нужд базы(первичные ключи для связи таблиц). Если нужны номера, которые можно редактировать - создайте еще одно поле. И колбасьте его как хотите.
|
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
2innok: Да нет, ятак понимаю, что нужно просто пронумеровать строки как в Акцессе, чтобы пользователь как-то ориентировался в списке.
|
|||
|
||||
| innok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 12.10.2004 Репутация: 1 Всего: 1 |
Bes
И я про то же. Не надо использовать индексное ключевое поле для того, что ему не предназначалось. |
|||
|
||||
| Zero |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Alex не буду спорить, насчёт многопользовательского варианта, обсалютно согласен, но
на сколько мне помнится, то access однопользовательская СУБД, и я имел ввиду для конкретного случая. Хотя, впринципе можно оставить всё как есть, а потом через определённый переиод, администратору БД обновлять БД, т.е. уменьшать кол-во разрядов, и т.п.
Неа, неугадал Это сообщение отредактировал(а) Zero - 4.5.2005, 19:01 |
||||||
|
|||||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
а следовательно при удалении все бОльшие лопатятся на предмет "минус один" - и все ради чего? сродни онанизму... тем более что достаточно изменить сортировку, чтобы вся твоя статическая нумерация полетела ко всем чертям... на то и РЕЛЯЦИОННЫЕ БД - там в принципе нет понятие физического номера записи... Кстати, в запросе БД имеет полное право возвратить несортированный по ключевому полю список, если сортировка не задана явно - это так, к слову... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
2Akina: Ну и что делать?
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Bes
Нужна нумерация строк при выводе - делай ее именно при выводе. Т.е. вводи в макет формы/отчета вычисляемое поле (надпись) и там считай-показывай текущий нумер. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
2Akina: Вычисляемым полем не получится, нужно именно резервировать под это дело поле и заполнять его непосредственно перед выводом набора данных если что-то удалил или пересортировал - перезаполни.
|
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
А тогда какой смысл его ХРАНИТЬ??? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
2Akina: а как по другому сделать?
|
|||
|
||||
| HAS |
|
|||
|
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |