powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ado, как узнать последний индекс autoincriment
13 сообщений из 13, страница 1 из 1
ado, как узнать последний индекс autoincriment
    #35198830
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Как узнать индекс только что добавленой записи?
Там, у меня счётчик, всё ок.
Но вот теперь нужно узнать "id" идентификатор только, что созданой записи.

Это я создаю таблицу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim oTable As New table
oTable.Name = "files"

cat.Tables.Append oTable

   Dim col As New ADOX.Column
   
' идентификатор записи
With col
.Name = "id"
.Type = adInteger
      Set .ParentCatalog = cat
      .Properties("AutoIncrement") = True
      .Properties("Seed") = CLng( 1 )
      .Properties("Increment") = CLng( 1 )
     End With
   cat.Tables("files").Columns.Append col
cat.Tables("files").Columns.Append "book_id", adInteger
Set oTable = Nothing


а вот и сама запись:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "books"
.AddNew
.Fields("book_id").Value = iBook.Param("description/title-info/book_id")
.Fields("title").Value = iBook.Param("description/title-info/book_title")
.Update
.Close
End With

Set rs = Nothing

...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35199015
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотреть в сторону .Resync
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35200938
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.resinc это же для обновления, или я ошибаюсь?

Мне надо, функцию в ado такую же как в mysql:
mysql_insert_id()
Возвращает идентификатор, сгенерированный для столбца AUTO_INCREMENT предыдущим запросом.

В первом посте, я ещё далеко не готовый код привёл. Просто скопировал его из другой функции и начал переделывать.
(как говорится: поспешишь, людей насмешишь.)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "files"
.AddNew
' .Fields("id").Value = "0"
.Fields("book_id").Value = "0"
.Update
.Close
End With
msgbox "мы только что добавили запись, с id = ..."

тут вот я добавил запись, и потом мне нужно узнать значение, которое будет в поле id. Поле пропущено, так как autoIncrement.
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35200981
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scope_identity() в sql-сервере или @@IDENTITY
делай запрос после добавления
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35200993
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно по подробнее, какой запрос.
А если не трудно код, чтобы я его мог воткнуть.

У меня тут подключение к acces, обозвать его sql сервером, язык не поворачивается.
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201100
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если акцес, то только смотреть последнюю добавленную запись.

Код: plaintext
1.
2.
rs.open "select ..."
rs.MoveLast
ID=rs!ID

но это не всегда верно в случае многопользовательского режима работы
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201126
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Именно, что многопользовательский.

Придётся разбиратся с подключением к mysql.
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201274
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eric-S.resinc это же для обновления, или я ошибаюсь?Для перезапроса строк существующих в данный момент в резалтсете.

примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "files"
.AddNew
' .Fields("id").Value = "0" ' ни в коем случае ничего не пиши самостоятельно в автоинкрементное поле
.Fields("book_id").Value = "0"
.Update
.Resync
id = .Fields("id")
.Close
End With
msgbox "мы только что добавили запись, с id = ..."
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201278
Ммихалыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max(id)
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201283
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ммихалычmax(id)Это не будет работать в мнопользовательской системе.
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201523
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim id As Long
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "files"
.AddNew
.Fields("book_id").Value = "0"
.Update
.Resync
id = .Fields("id")
.Close
End With
Set rs = Nothing

MsgBox id

Логично, (подумал я) и так и написал.

Выдал мне ошибку:
Run-time error '-2147467259 (80004005)':
Недостаточно сведений ключевого поля для обновления.


А вот на этом:
' .Fields("id").Value = "0" ' ни в коем случае ничего не пиши самостоятельно в автоинкрементное поле
Я уже накололся, ещё в самом начале.
По этому в начале этой строчки не зря стоит "'" апостроф.
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201577
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eric-SЛогично, (подумал я) и так и написал.

Выдал мне ошибку:
Run-time error '-2147467259 (80004005)':
Недостаточно сведений ключевого поля для обновления.
Попробуй сменить положение курсора:
.CursorLocation = adUseServer
ты с какой базой то работаешь?
...
Рейтинг: 0 / 0
ado, как узнать последний индекс autoincriment
    #35201613
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Run-time error '3705':
Операция не допускается, если объект открыт.


База у меня аксес, или я так думаю (*.mdb).
Подключаюсь примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Set cat = New ADOX.catalog
Set con = New ADODB.Connection

strSQL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbFile
con.Open strSQL
Set cat.ActiveConnection = con


Но по всей видимости придётся парится с libMysql.dll
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ado, как узнать последний индекс autoincriment
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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