Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];

Вниз

Сдвиг номера поле по последовательности чисел   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.164 c
14-1121021072
Иксик
2005-07-10 22:44
2005.09.04
Предлагаю внеочередные МП


3-1122357721
evvcom
2005-07-26 10:02
2005.09.04
Отключение триггеров в Оракл


1-1124182918
kot andrei
2005-08-16 13:01
2005.09.04
Form.Show в другом приложении


3-1122366121
B-boy-Dimo-N
2005-07-26 12:22
2005.09.04
непонятки с кодировкой


14-1123081658
begin...end
2005-08-03 19:07
2005.09.04
"Проверь себя". Тест для начинающих.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский