![]() |
|
Модераторы: Akina |
![]()
|
|
| MarinaK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 29.1.2005 Репутация: нет Всего: нет |
Добавляю записи в таблицу с помощью запроса. Значения ключевого поля (счетчика) присваиваются автоматически, а мне хотелось бы знать их. Кроме очень кривого способа (запоминать максимальное значение перед добавлением, т.к. у добавленных записей значения будут больше) ничего в голову не пришло...
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Вопрос - зачем? Реально (чтобы не залететь на диалекте) единственный разумный способ - это после выполнения insert тут же сделать select, который вернет ID по только что сохраненным значениям. т.е. типа
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Papirus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Ничего кривого в этом способе не вижу. Даже если БД на SQL server'е, то узнать можно (@identity, @scope_identity) значение только последнего сгенерированного...
А так вполне нормально - запомнить максимальное значение перед вставкой, потом выбрать их после вставки. Врядли кто успеет впихнуть свои данные между вставкой и получением значений. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Вообще-то правильнее было написАть так:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: нет Всего: 102 |
а если было 9 элементов с id 1,2,3..10 потом последние 5 удалили, то MAX(ID)=5, а при выполнении Inserta его ID будет 11... или я неправ? -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Прав. Чтобы было следующее - нужно еще сделать CompressDatabase. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: нет Всего: 102 |
Akina, имхо всеже проще сразу после Insert делать Select MAX(ID)
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Все то же - можно нарваться на случай, когда между занесением в БД и запросом Select MAX(ID) какая-нить сволочь закатит еще одну запись... и прощай целостность... тут либо таблицу лочить, либо оформлять эти запросы как транзакцию... хотя нет, транзакция может не помочь... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Papirus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Эт вы об чем? Было 10 (1,2,3,...10) 5 последних удалили. Максимальное будет 5 ЕГО ТО И ЗАПОМНИЛИ перед вставкой, а после будет 11,12,13,14... тогда Select ID From Table Where ID > 5 вернет нам то, что нужно... |
|||
|
||||
| BugZZ |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 19.5.2008 Где: Germany Репутация: нет Всего: нет |
День добрый! Есть таблица где АйДи = не АвтоЗначение. поэтому решил при инсерте использовать SELECT (MAX ID) +1 FROM TABLE но каждый раз получаю
пробовал следующее
так же уже применял фйнцию NZ
Так же пробовал давать таблице Alias ну т.д. каждый раз одно и тоже..... В чем проблема ? в 2003м аксессе - это не возможно или тут все-таки дело синтаксиса ? Заранее спасибо |
||||||
|
|||||||
| bopoha |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Вместо запроса воспользуйтесь функцией DMax("поле", "таблица", "условие")
На тему топика. id новой записи можно получить следующим образом (K_KLIENT - ключевое поле):
1-й вариант
2-й вариант
Добавлено через 1 минуту и 21 секунду 1-й вариант работает только с таблицами MS Access. На всех остальных нужно проверять. |
||||||
|
|||||||
| BugZZ |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 19.5.2008 Где: Germany Репутация: нет Всего: нет |
Спасибо, я на эту фунцию уже тоже вышел ))
|
||||
|
|||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
BugZZ, значение функции DMax также стоит проверять на Null. Т.к. возможна ситуация когда данных в таблице нет.
|
|||
|
||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |