|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
тему "DAO + ODBC + MySql получение ключа-счетчика в момент создания записи " просмотрел https://www.sql.ru/forum/1320636-a/dao-odbc-mysql-poluchenie-klucha-schetchika-v-moment-sozdaniya-zapisi Задача - получить id созданной на сервере записи. У меня схожая проблема, но без ADO/DAO. 1. Есть база MS Access, формат 2007. Есть база на сервере MySql. Есть присоединение по ODBC. 2. Я добавляю запись в базу MySql из модуля Access. - Создаю sql строку в формате, который понимает MySql. "INSERT INTO..." - Создаю "запрос к серверу" с подключением ODBC - В свойство .sql запроса задаю строку в формате MySql - Выполняю запрос. 3. Запись добавляется, но я не могу сразу получить в Access id созданной записи. Сейчас я просто делаю в одном из поле уникальный идентификатор для новой записи, отдельным запросом получаю с сервера этот самый несчастный id, потом обновляю запись и дальше все без пробем работает. Но как-то корявенько выглядит. Хочется сразу id получить. Если я тот же самый "INSERT INTO..." выполняю в окне phpmyadmin, то выдается номер созданной записи. А если из Аксесс, то никак. 4. Пробовал играть с .ReturnsRecords = True, пробовал выполнять запрос и по db.Execute, и по DoCmd.OpenQuery, и как openrecordset тоже пробовал. Нет ответа и все тут. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Надеюсь на коллективный разум. Задачка-то типовая. Должен же быть какой-то простой способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 14:56 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Михаил Михайлович Л, Выход прост, используйте LAST_INSERT_ID(). Так как вы работаете с mysql, вы запросто можете использовать сразу в запросе на добавление второй запрос SELECT last_insert_id() через делиметр. Он все вытащит. Это один из вариантов. Посмотрите в сети вышеуказанную функцию. Примеры работы. Примеров полно) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 15:28 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Если принципиально с vba и dao, то ... Recordset.LastModified ... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 15:30 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Сергей Лалов, авторВыход прост, используйте LAST_INSERT_ID(). Так как вы работаете с mysql, вы запросто можете использовать сразу в запросе на добавление второй запрос SELECT last_insert_id() через делиметр. Он все вытащит. Это один из вариантов. Посмотрите в сети вышеуказанную функцию. Примеры работы. Примеров полно) что-то не получается. Когда я на сервере выполняю все работает. Код: vbnet 1.
А когда этот же SQL через запрос бросаю, ничего в базе не происходит. Нет добавления записи в таблицу. Или аксес не умеет пробрасывать две команды в одной строке sql или я где-то туплю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 18:14 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
А зачем пробрасывать "в одну строку" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 19:34 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Михаил Михайлович Л, Ну как продвигается решение? В вашем коде первоначальном DAO добавить всего одну строчку кода) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 16:01 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Сергей Лалов, Не получилось. Наткнулся на сайте https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-usagenotes-functionality-last-insert-id.html на объяснение, что как раз с Access и не работает. Certain ODBC applications (including Delphi and Access) may have trouble obtaining the auto-increment value using the previous examples. In this case, try the following statement as an alternative: авторSELECT * FROM tbl WHERE auto IS NULL; This alternative method requires that sql_auto_is_null variable is not set to 0. See Server System Variables. Этот вариант тоже не срабатывает. Мне запрещено менять настройки MySql. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:10 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, С этой базой одновременно работает пара десятков человек. Если я сделаю два разных запрос а к серверу, то есть большая вероятность, что получу ответ именно уже по следующей добаленной другим пользователем записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:13 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Михаил Михайлович Л Если я сделаю два разных запрос а к серверу, то есть большая вероятность, что получу ответ именно уже по следующей добаленной другим пользователем записи. я вас уверяю, что эта вероятность не большая, а ничтожно мала... это легко проверить - на счет 1,2,3 нажмите одновременно кнопки на нескольких компах... Если нужна 100% гарантия, попробуйте два запроса поместить в одну транзакцию ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 16:41 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Добрые люди сказали, что через ADODB.Connection заработает. Таки получилось Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 16:52 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Михаил Михайлович Л, Ну и где гарантия, что после conn.Execute StrokaSqlRequests не получим чужой "SELECT LAST_INSERT_ID();" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 18:07 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
vmag Ну и где гарантия, что после conn.Execute StrokaSqlRequests не получим чужой "SELECT LAST_INSERT_ID();" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 18:19 |
|
ODBC + MySql получение id (ключа-счетчика) в момент создания записи
|
|||
---|---|---|---|
#18+
Михаил Михайлович Л Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 18:22 |
|
|
start [/forum/topic.php?fid=45&msg=39969456&tid=1610056]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
79ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 175ms |
0 / 0 |