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

Как узнать индекс только что добавленой записи?
Там, у меня счётчик, всё ок.
Но вот теперь нужно узнать "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
18.03.2008, 19:17
    #35199015
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
Смотреть в сторону .Resync
...
Рейтинг: 0 / 0
19.03.2008, 15:37
    #35200938
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
.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
19.03.2008, 15:46
    #35200981
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
scope_identity() в sql-сервере или @@IDENTITY
делай запрос после добавления
...
Рейтинг: 0 / 0
19.03.2008, 15:50
    #35200993
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
Можно по подробнее, какой запрос.
А если не трудно код, чтобы я его мог воткнуть.

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

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

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

Придётся разбиратся с подключением к mysql.
...
Рейтинг: 0 / 0
19.03.2008, 17:01
    #35201274
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
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
19.03.2008, 17:02
    #35201278
Ммихалыч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
max(id)
...
Рейтинг: 0 / 0
19.03.2008, 17:04
    #35201283
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
Ммихалычmax(id)Это не будет работать в мнопользовательской системе.
...
Рейтинг: 0 / 0
19.03.2008, 18:14
    #35201523
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
Код: 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
19.03.2008, 18:33
    #35201577
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
Eric-SЛогично, (подумал я) и так и написал.

Выдал мне ошибку:
Run-time error '-2147467259 (80004005)':
Недостаточно сведений ключевого поля для обновления.
Попробуй сменить положение курсора:
.CursorLocation = adUseServer
ты с какой базой то работаешь?
...
Рейтинг: 0 / 0
19.03.2008, 18:45
    #35201613
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ado, как узнать последний индекс autoincriment
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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ado, как узнать последний индекс autoincriment / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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