powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
11 сообщений из 36, страница 2 из 2
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906906
MrShin
Способ рабочий, но иногда нужно знать значение ключа до апдейта.
Значение счетчика обычно требуется для добавления записей в подчиненную таблицу.
Приведите пример, когда оно нужно "до апдейта".
К тому же все методы "до того" не надежны. Например если есть запись со счетчиком 1, а запись с 2 удалена, то DMax вернет 2, а счетчик в новой записи будет 3. Я уже не говорю о многопользовательской среде.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906908
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лапух
Кстати, что то плакальшик и весь из себя обиженый
на Нашем форуме - Панург - Пропал.
Что, на хвост тебе наступил?
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906915
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий
Приведите пример, когда оно нужно "до апдейта".

Например, когда нужно сформировать код записи для чтения человеком для новой записи на базе значения счетчика.

Кривцов Анатолий
К тому же все методы "до того" не надежны. Например если есть запись со счетчиком 1, а запись с 2 удалена, то DMax вернет 2, а счетчик в новой записи будет 3.

Так я ж и не предлагал DMax использовать, этого делать нельзя. Я предлагал просто подождать несколько циклов, пока база не вернет новый ключ, он точно будет правильным и в многопользовательской среде.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906932
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
Счётчики остались для совместимости со старыми приложениями.
Ну если учесть тот факт, что до сих пор они интенсивно используются, и куда чаще естественных ключей, причём старых приложений уже в упор не видать - то обоснование так себе, из разряда "на и отстань".

Панург
Им требовались номера строк.

Что-то я не припоминаю приложений, работавших именно с БД (даже файловыми) и использовавших именно порядковый номер записи (тем более что все они работали по принципу "пометить на удаление, а удалим, когда попросят сжать"). Что же до внутреннего номера записи - так он есть в той или иной форме практически в любой современной СУБД. Впрочем, явно это описано, пожалуй, только у MySQL, и только для InnoDB.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906938
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, мне кажется я привёл ссылку на источник информации. Источник и автор высказывания лично у меня вызывают доверие.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906940
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Ну если учесть тот факт, что до сих пор они интенсивно используются, и куда чаще естественных ключей
Это ни о чём не говорит. Привычка она такая штука. Тем более нет призыва отказаться от суррогатных ключей совсем, но в некоторых случаях вполне можно обойтись и без них и использовать натуральные.
Akina
Что-то я не припоминаю приложений
Видимо Кодд помнил. У меня нет такого бекграунда..
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906980
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin
Пример, приведенный в самом начале заработает, если добавить цикл ожидания ненулевого значения поля-счетчика, он появляется, но не сразу.

Не дождался... пару минут прошло- снял задачу, похоже на ODBC MySql это не распространяется...
Кривцов Анатолий
Для DAO:
Код: vbnet
1.
2.
3.
4.
5.
6.
rs.AddNew
rs(1) = Me.Поле1                       
rs.Update
rs.Bookmark = rs.LastModified
MsgBox Nz(rs(0), 0)                    ' тут узнаЁМ ключ/счетчик
rs.Close


тоже не работает, ошибка типа текущая запись удалена, пробовал LastUpdated, аналогично...

А вот такое заработало:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tab1")
rs.AddNew
rs(1) = Me.Поле1
rs.Update
rs.Requery
rs.MoveLast
MsgBox rs(0)
rs.Close
Set rs = Nothing


Вопрос только в том всегда ли будет Last = LastModified в разрезе ODBC MySql
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906992
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно... Можно сделать важный вывод по работе c DAO через ODBC MySql:

после добавления записей при помощи rs.AddNew .... rs.Update они вообще недоступны от слова никак в этом rs до применения rs.Requery !!!

То есть все добавления идут за пределами ODBC на самом сервере, а чтобы их увидеть, нужно обновить набор
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39907042
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
тоже не работает, ошибка типа текущая запись удалена, пробовал LastUpdated, аналогично...

Не забываем при открытии рекордсета добавить опции dbOpenDynaset, dbSeeChanges, тогда будет это работать
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39907051
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Не дождался... пару минут прошло- снял задачу, похоже на ODBC MySql это не распространяется...

Да, сейчас проверил, действительно, значение появляется только после апдейта на SQL базах. Извиняюсь, спутал с необходимостью ждать уже ПОСЛЕ апдейта. Не знаю, насколько это критично на MySQL и при прямой работе с MS SQL, но при работе с SharePoint _иногда_ значение после апдейта не появлялось и происходила ошибка, поэтому я стараюсь на всякий случай добавлять ожидание:
Код: vbnet
1.
2.
3.
4.
5.
6.
.Update
.Bookmark = .LastModified
' loops until ID field is populated
Do Until Nz(lng_ID, 0) > 0
    lng_ID = .Fields("ID")
Loop
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39907148
vmag, тогда пробуйте использовать ADODB.Recordset (только без пакетного обновления).
Там новая запись становится текущей.

"Вопрос только в том всегда ли будет Last = LastModified в разрезе ODBC MySql" - не знаю, как с MySql, но справка по AddNew для DAO рассказывает, что в Recordset типа "Таблица" ее расположение зависит от индексов.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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