Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как определить Код следующей записи (Auto_Increment)? / 13 сообщений из 13, страница 1 из 1
11.05.2006, 13:32
    #33720297
Alexus_stav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
Как определить 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
11.05.2006, 13:39
    #33720315
Tauzer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
strSQL = "select max ID from Table "
...
Рейтинг: 0 / 0
11.05.2006, 13:40
    #33720324
Tauzer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
strSQL = "select max(ID) from Table " так правильнее, а к результату прибавь еденицу.
...
Рейтинг: 0 / 0
11.05.2006, 13:53
    #33720364
Alexus_stav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
Так мне необходимо знать значение ID, которое получит новая запись до ее добавления. А если еще было произведено удаление зарписей, то счетчик будет иметь значение не на 1 больше последнего, а на единицу больше предшестующей записи, даже если она удалена. Тво код не подходит.
...
Рейтинг: 0 / 0
11.05.2006, 13:59
    #33720379
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
У вас однопользовательское приложение?
...
Рейтинг: 0 / 0
11.05.2006, 13:59
    #33720380
Tauzer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
ну в таком случае я бы поставил триггер на добавление.и пускай он у тебя пишет в отдельную табличку номер добавленной записи.это первое что мне пришло в голову.возможно есть и другие,более рациональные и простые способы.
...
Рейтинг: 0 / 0
11.05.2006, 14:35
    #33720511
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
в FAQ по аксу такое было в теме про счетчики вопрос 8 вроде
_____________________________________
А я хочу Брежнева, чтобы все было по прежнему... "Стволы"
...
Рейтинг: 0 / 0
11.05.2006, 14:45
    #33720548
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
Alexus_stavА если еще было произведено удаление зарписей, то счетчик будет иметь значение не на 1 больше последнего, а на единицу больше предшестующей записи, даже если она удалена.
Да вы что такое говорите, люди? Счетчик никогда не сбрасывается и не уменьшается, иначе потерялся бы весь его смысл.
...
Рейтинг: 0 / 0
11.05.2006, 15:05
    #33720616
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить Код следующей записи (Auto_Increment)?
Отвечая прямо на вопрос:
Надо редактирование данных сделать на рекордсете. Тогда, после добавления, соответствующее поле рекордсета и будет содержать ID.
Разумеется, это все надо оформить в одну транзакцию, тогда ничего удалять не придется - просто откатить транзакцию.
Конструкции типа MAX() использовать очень нежелательно хотя-бы по той причине, что тогда надо блокировать всю таблицу от начала выборки MAX и до вставки новой записи.

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


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