| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Вывод результата запроса в edit. |
| Автор: PaWeLL 16.11.2009, 10:16 |
| Появился вопрос. Есть таблица personal_inf, в которой хранятся данные о работниках. У каждого есть идентфикатор w_id. Есть форма добавления записей в таблицу. Нужно, чтобы при загрузке формы в поле "Номер сотрудника" выводилось первое незанятое значение w_id. Как такое реализовать? |
| Автор: Данкинг 16.11.2009, 11:15 |
Если w_id уникален и идёт по порядку, то взять максимальное его значение (select max w_id from table) и прибавить 1. |
| Автор: PaWeLL 16.11.2009, 11:21 | ||
Это я уже обдумал. Но мне хочется посложнее. Допустим в результате удаления оказался свободен один id 0015 0016 0018 0019 Так вот, надо чтобы выводился не 0020, а первый свободный 0017. |
| Автор: Данкинг 16.11.2009, 11:38 |
Тогда в цикле проходить (только сколько это по времени займёт) и искать соседние строчки, разница w_id между которыми больше единицы. Добавлено через 2 минуты и 42 секунды Но только не знаю, зачем это практически может быть нужно. Если требуется уникальное поле-идентификатор сотрудника, так обычное автоинкрементное поле отлично для этого подойдёт. |
| Автор: PaWeLL 16.11.2009, 11:42 | ||||
То есть очень сложно получается, не по моим навыкам?
А подробнее можно про это? А то я пока нуб в этом деле. Да, кстати, забыл упомянуть. База данных - paradox. |
| Автор: Данкинг 16.11.2009, 11:54 |
Почему сложно? Просто по времени такой цикл будет работать долго - в зависимости, конечно, от числа записей в таблице. Я про "Парадокс" ничего не знаю, никогда с ним не работал. Но вот в Access есть поле типа "счётчик", и значения в нём всегда уникальные, генерируемые самой СУБД. В FireBird есть генераторы для той же цели. |
| Автор: Данкинг 16.11.2009, 13:05 | ||
Я об этом не подумал, я конкретную задачу решал. |
| Автор: Frees 16.11.2009, 13:44 |
| Для сетевого варианта только Генератры (firebird) или их аналоги в других СУБД. только они гарантируют уникальность, а максимум или последнее значение в списке могут привести к коллизии номеров. Добавлено через 1 минуту и 37 секунд поменяй СУБД пока не поздно..намучаешься ты с парадоксам |
| Автор: PaWeLL 16.11.2009, 13:48 | ||||||||
Ну у меня БД не сетевая, поэтому не страшно. Добавлено через 1 минуту и 26 секунд
Можешь хотя бы намекнуть, как это должно выглядеть? Добавлено через 8 минут и 43 секунды
Я бы может и поменял, на задание определено четко: Delphi+paradox. |
| Автор: Frees 16.11.2009, 13:57 | ||||
суть такова
Добавлено @ 14:08
меняй задание |
| Автор: Deniz 16.11.2009, 14:41 | ||
Можно и select'ом выбрать
|
| Автор: PaWeLL 17.11.2009, 18:23 |
| Всем спасибо. С вопросом разобрался. |