powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как определить Код следующей записи (Auto_Increment)?
13 сообщений из 13, страница 1 из 1
Как определить Код следующей записи (Auto_Increment)?
    #33720297
Alexus_stav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как определить ID ледующей записи в поле с стипом счетчик?
У меня есть только один способ, но минус его в создании записи, которую необходимо удалять.

strSQL = "INSERT INTO Таблица(Поле) VALUES('')"
cnn.Execute strSQL, , adExecuteNoRecords
strSQL = "SELECT @@IDENTITY"
rst.Open strSQL, cnn, adOpenStatic, adLockBatchOptimistic
MaxID = rst(0)
MsgBox "MaxID" & MaxID
rst.Close
strSQL = "DELETE * FROM Таблица WHERE Код=" & MaxID
cnn.Execute strSQL, , adExecuteNoRecords

Есть ли более удобный и эффективный способ?
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720315
Tauzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
strSQL = "select max ID from Table "
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720324
Tauzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
strSQL = "select max(ID) from Table " так правильнее, а к результату прибавь еденицу.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720364
Alexus_stav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мне необходимо знать значение ID, которое получит новая запись до ее добавления. А если еще было произведено удаление зарписей, то счетчик будет иметь значение не на 1 больше последнего, а на единицу больше предшестующей записи, даже если она удалена. Тво код не подходит.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720379
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас однопользовательское приложение?
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720380
Tauzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну в таком случае я бы поставил триггер на добавление.и пускай он у тебя пишет в отдельную табличку номер добавленной записи.это первое что мне пришло в голову.возможно есть и другие,более рациональные и простые способы.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720511
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в FAQ по аксу такое было в теме про счетчики вопрос 8 вроде
_____________________________________
А я хочу Брежнева, чтобы все было по прежнему... "Стволы"
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720548
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus_stavА если еще было произведено удаление зарписей, то счетчик будет иметь значение не на 1 больше последнего, а на единицу больше предшестующей записи, даже если она удалена.
Да вы что такое говорите, люди? Счетчик никогда не сбрасывается и не уменьшается, иначе потерялся бы весь его смысл.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720616
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечая прямо на вопрос:
Надо редактирование данных сделать на рекордсете. Тогда, после добавления, соответствующее поле рекордсета и будет содержать ID.
Разумеется, это все надо оформить в одну транзакцию, тогда ничего удалять не придется - просто откатить транзакцию.
Конструкции типа MAX() использовать очень нежелательно хотя-бы по той причине, что тогда надо блокировать всю таблицу от начала выборки MAX и до вставки новой записи.

А вообще, этот вопрос - не простой. Все зависит от типа блокировки которую используете.
Если вы используете автономную блокировку (упрощенно это когда до нажатия кнопки "сохранить" никакие изменения в БД не поступают), то надо иметь ID до вставки в базу данных. В оракле для этого используют SEQUENCE, в SQL-Server можно создать таблицу с двумя полями: "ID", "TableName". В ней и хранить очередное значение ID для каждой таблицы.
Правда тут есть пара нюансов.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720670
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkiades Alexus_stavА если еще было произведено удаление зарписей, то счетчик будет иметь значение не на 1 больше последнего, а на единицу больше предшестующей записи, даже если она удалена.
Да вы что такое говорите, люди? Счетчик никогда не сбрасывается и не уменьшается, иначе потерялся бы весь его смысл.
эт ты зря так думаешь, например в аксессе при сжатии базы (что делать рано или позно приходится чтобы удалить физически помеченные как удаленные записи) значение счетчика станосится равным максимальному не удаленному значению, т.е. если удалить последнюю запись сделать сжатие то можно опять создать запись с темже номером.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33720708
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas Melkiades Alexus_stavА если еще было произведено удаление зарписей, то счетчик будет иметь значение не на 1 больше последнего, а на единицу больше предшестующей записи, даже если она удалена.
Да вы что такое говорите, люди? Счетчик никогда не сбрасывается и не уменьшается, иначе потерялся бы весь его смысл.
эт ты зря так думаешь, например в аксессе при сжатии базы (что делать рано или позно приходится чтобы удалить физически помеченные как удаленные записи) значение счетчика станосится равным максимальному не удаленному значению, т.е. если удалить последнюю запись сделать сжатие то можно опять создать запись с темже номером.
Ну вообще-то я имел ввиду, что счетчик сам по себе никогда не уменьшится. И на оракле, и на сиквеле тоже можно искусственно сбросить сиквенс или идентити-поле.
Но неужели кто-то в здравом уме будет это делать (сжимать/восстанавливать базу), когда в ней меняет данные кто-то еще? Полагаю, что нет, поэтому способ имеет право на жизнь.
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33721105
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой способ то?
...
Рейтинг: 0 / 0
Как определить Код следующей записи (Auto_Increment)?
    #33721954
МаксимВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesНо неужели кто-то в здравом уме будет это делать (сжимать/восстанавливать базу), когда в ней меняет данные кто-то еще? Полагаю, что нет, поэтому способ имеет право на жизнь.
А вы и не сможете сжать БД, когда она(БД) открыта другими пользователями или приложениями.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как определить Код следующей записи (Auto_Increment)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]