Текущий архив: 2005.09.04;
Скачать: CL | DM;
Вниз
Сдвиг номера поле по последовательности чисел Найти похожие ветки
← →
ViktorZ (2005-07-23 20:30) [0]Есть таблица DbGrid.я туда по кнопке добавляю данные, но если данные
одиннаковые, то БД ругается. Так вот я решил это созданием поля "#" где по
нажатию прибавляется +1. Так вот проблема в том что когда я удаляю, остаются
записи вроде :
#
1
3
4
Вопрос: как сделать так, если я удаляю вторую запись, то третья становится
второй, а четвертая третьей. Буду благодарен за любую идею.
← →
Shuric © (2005-07-23 20:58) [1]Построить идекс...
← →
x_z_y (2005-07-23 22:59) [2]управлять индексом в ручную самый лучший способ т.е переиндексировать базу после каждого удаления
← →
ViktorZ (2005-07-24 08:28) [3]Индексировать это нумеровать по порадку? Фунция IndexTable наверное? Спасибо.
← →
msguns © (2005-07-24 09:15) [4]Не надо путать ключ, индексы, и нумерацию записей при отображении.
Первый служит для уникальности (неповторяемости) записей и обычно решается с помощью autoincrment, вторые - для ускорения манипуляций с табличными данными (при выборках или для упорядочения), третьи - реально не существующие, добавляемые при отображении (например, в событии OnGetText любого неотображаемого в гриде поля) и вычисляемые (например, RecNo).
Если же требуется зачем-то фиксировать именно хронология добавления записей в таблицу, используют поля типа TDataTime или TTimeStamp
← →
ViktorZ (2005-07-24 11:46) [5]Хм. Это немного не то что мне нужно. Теории я начитался, как сделать так как в моем вопросе? Я просто не знаю название функции, которая пронумеруе поле заново после удаления одной из записи.
← →
sniknik © (2005-07-24 12:15) [6]такой функции нет. и вообще это против всех правил работы с базами...
> Я просто не знаю название функции, которая пронумеруе поле заново после удаления одной из записи.
> Хм. Это немного не то что мне нужно.
это почему же? в msguns © (24.07.05 09:15) [4] по моему все правильно посоветовано. и с уникальностью проблему решит и видимость нумерации (если это нужно) будет такая же как ты хочеш. почему же тогда не пойдет?
p.s. "немного не то" это немного не те ;) слова, что ожидаются. если не подходит так и пиши "если сделаю так, то вот это и вот это против моих принципов/понятий/логики/х.з. чего". так чтобы и нам понять что же там "не то", а то пока кажется ты просто "не догоняеш" смысла посоветованного.
← →
msguns © (2005-07-24 12:34) [7]>ViktorZ (24.07.05 11:46) [5]
>Хм. Это немного не то что мне нужно. Теории я начитался, как сделать так как в моем вопросе? Я просто не знаю название функции, которая пронумеруе поле заново после удаления одной из записи.
Такой функции нет и быть не может, т.к. в ней просто нет никакого смысла.
Порядок записей в любой реляционной БД - вещь абстрактная и контролю, как правило, не подлежит. Это - "внутренне" дело движка или сервера. № пп используется либо для отображения (т.е. создется "на клиенте"), либо для сохранения хронологии добавления новых записей в таблицах (чтобы Марьиванна видела, в какой последовательности она вводила данные).
В первом случае решение либо так, как сказано в [4], либо данные выбираются во временную таблицу, там "упорядочиваются", а потом показываются клиенту. При этом любая подобная "нумерация" носит чисто клиентский характер. Хотя бы потому, что пока Марьиванна смотрит на 5 и 6-ю запись, СофьАндревна может между ними добавить новых 4, а Гальпетровна удалить 6-ю.
Во втором случае (сохранения порядка ввода) надо использовать время ввода. Нумерация не подходит хотя бы потому, что при одновременном добавлении записей с двух компов приложение понятия не имеет, КТО из них первым "нажмет" "Записать", а № надо присвоить ДО вставки. Кроме того будет очень сильный гемор при добавлении записи межу 5-й и 6-й. В этом случае надо изменить ключи всех записей, начиная с 6-й, что во-первых, геморно, во-вторых, нереально для многопользовательского приложения, и, в третьих, приведет к полному абзацу, если редактируемая таблица имеет подчиненные, связанные с нею по этому полю.
← →
ViktorZ (2005-07-24 13:57) [8]управлять индексом в ручную самый лучший способ т.е переиндексировать базу после каждого удаления
Вот это как сделать...
И я дейтсвительно много не догоняю то, что вы мне пишите. Спасибо конечно за МарьИванну, но она мне не поможет. Вот есть поле:
# Name
1 Vasya
2 Vasya
3 Vasya
4 Vasya
я удаляю из него вторую запись. Мне нужно чтобы при удалении Грид выглядел так:
# Name
1 Vasya
2 Vasya
3 Vasya
> Хм. Это немного не то что мне нужно.
это почему же? в msguns © (24.07.05 09:15) [4] по моему все правильно посоветовано. и с уникальностью проблему решит и видимость нумерации (если это нужно) будет такая же как ты хочеш. почему же тогда не пойдет?
потому что мне ненужен autoincrement в его смысле. НУ тоесть если я стер все записи мне нужно снова добавлять их начиная с первой.А не с того номера, который я стер последним +1.А вот видимость нумерации мне нужна. Я делал такое на VB когда работал с файлом и читал из него в ЛистБокс. С базами почему то напряг.
Если что-то не понятно мпрашивайте, постараюсь объяснить по-другому, хотя тут и объяснять то нечего.
← →
sniknik © (2005-07-24 14:22) [9]> потому что мне ненужен autoincrement в его смысле.
autoincrement нужен!!! для уникальности, поиска и связи. делаеш его ключом. (т.е. если у тебя нет естественого уникального ключа, вводится искуственный. это основы баз примерно как 2*2 в математике ;о))
> А вот видимость нумерации мне нужна.
+ к автоинкременту, показывать RecNo в вычисляемом поле. автоинкремент соответственно не показывать. все больше ничего делать не надо. видимость будет полной.
но это только для локальных баз, где RecNo еще есть, без использования индексов, запросов и т.д.
(логика показывания порядковых номеров записей больше накладывает ограничений чем приносит пользы. лучше от нее отвыкать, на будущее)
← →
ViktorZ (2005-07-24 14:40) [10]блин. сам себе напридумывал трудностей. Посмотрел еще раз форум и нашел тему с "Поряок следования записей", там вот поглядел на ответ, потом нашел свой старый код от старой проги и вспомнил, что я так и делал (ну почти так) как там советуют, мне нахрен не нужен этот # для отображения, у меня пусть там хоть черт лысый буде;-))
Спасибо всем за ответы и наствления меня в правильное русло :-))))
Страницы: 1 вся ветка
Текущий архив: 2005.09.04;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.009 c