Как узнать значение поля счетчика новой записи

Программирование на Active Server Pages и VBScript.
bs
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 31.01.2002 (Чт) 13:47
Откуда: Russia

Как узнать значение поля счетчика новой записи

Сообщение bs » 06.06.2006 (Вт) 17:12

Следующий код добавляет в БД новую запись:

strProvider = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Set rst = Server.CreateObject("ADODB.Connection")

rst.Open strProvider

strQuery ="INSERT INTO tbPupils (dtName, dtClass) VALUES ('Иванов', '11')"

rst.Execute (strQuery)

В таблице БД также имеется поле счетчика, значение которому присваивается автоматически.

Как, добавив запись, сразу узнать значение поля счетчика этой новой записи?

Заранее всем огромное спасибо!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.06.2006 (Вт) 17:14

Ну я думаю, что:



Код: Выделить всё
rst.movelast
msgbox rst.fields("counterfieldname")

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 17:30

Для mdb - добавлять запись через addnew, иначе никак.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.06.2006 (Вт) 20:19

Или select max(counterfieldname) from tbPupils
Лучший способ понять что-то самому — объяснить это другому.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2006 (Ср) 6:08

Угу. Особенно когда записи вставляют двое.
А уж когда двое вставляют записи в таблицу с непоследовательным счётчиком...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

bs
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 31.01.2002 (Чт) 13:47
Откуда: Russia

Сообщение bs » 07.06.2006 (Ср) 15:32

Спасибо. Думаю, вариант добавления через addnew подойдет. только вот не могли бы вы еще подсказать, как это оформить в коде. Просто никогда не юзал addnew в ASP... Черканите код, если не затруднит.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 07.06.2006 (Ср) 16:15

GSerg писал(а):Угу. Особенно когда записи вставляют двое.
А уж когда двое вставляют записи в таблицу с непоследовательным счётчиком...
1. Если в транзакции - то хоть трое.
2. Я и не говорил, что это универсальное решение.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 07.06.2006 (Ср) 16:23

Черканите код, если не затруднит.

Код: Выделить всё
strProvider = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Set rst = Server.CreateObject("ADODB.Connection")
rst.CursorLocation=3
rst.Open strProvider
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "select * from tbPupils where counterfieldname is null", rst, 3, 4
rs.AddNew
rs("dtName").Value="Иванов"
rs("dtClass").Value="11"
rs.UpdateBatch
msgbox rst.fields("counterfieldname")
Лучший способ понять что-то самому — объяснить это другому.

bs
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 31.01.2002 (Чт) 13:47
Откуда: Russia

Сообщение bs » 07.06.2006 (Ср) 17:20

Большое спасибо! Все работает.

А Вы не могли бы пояснить кое-какие строки, чтобы помочь мне разобраться...
Просто мне не до конца понятно,как это работает...

rst.CursorLocation=3 - что делает вот эта строка

что означают две последние цЫфры:
rs.Open "select * from tbPupils where counterfieldname is null", rst, 3, 4

и чем отличается rs.UpdateBatch от rs.Update

извините за глупые вопросы, но мне хочется понять, как все работает
Еще раз спасибо.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 07.06.2006 (Ср) 18:27

rst.CursorLocation=3 - что делает вот эта строка

adUseClient - указывает использовать клиентский курсор, набор данных полностью копируется в память.
что означают две последние цЫфры:
rs.Open "select * from tbPupils where counterfieldname is null", rst, 3, 4
adOpenStatic, adLockBatchOptimistic
и чем отличается rs.UpdateBatch от rs.Update
Update сохраняет текущую запись рекордсета, а UpdateBatch сохраняет все изменения.
Это если вкратце. Подробный хелп можно получить, если подключить в референсы (например экселя) Microsoft ActiveX Data Objects 2.1. Для остальных версий встроенный хелп не работает.
Или просто открыть файл C:\WINDOWS\HELP\ado210.chm
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList