powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
25 сообщений из 36, страница 1 из 2
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906633
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я помню при любом ODBC соединении вот такая конструкция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tab1")
rs.AddNew
MsgBox Nz(rs(0), 0)                    ' тут пытаемся узнать ключ/счетчик
rs(1) = Me.Поле1                       ' тут пишем в одно поле ради создания новой записи
rs.Update
rs.Close
Set rs = Nothing


Будет выдавать всегда 0 (ноль) вместо значения ключа ?
Может кто:
- нарыл коннектор MySql
- или знает как конфигурить эту MySql
- или придумал оптимальный костыль
Чтобы таки узнать ключ-счетчик в момент создания записи через ODBC соединение?
Пока вижу пару решений:
1. Генерить запись в самой MySql с возвратом ключа, а потом её модифицировать.
2. Хранить и Генерить ключ в бд акцесса, а потом писать запись в MySql (естественно в MySql это уже будет не счетчик)
Но они как-то на мой взгляд не очень...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906642
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,
Если есть возможность, поменяйте DAO на ADO.
Там есть возможность выйти на ado connection и ado command.
Драйвера свежие для адаптера посмотрите в Гугле mysql odbc driver. (Ставьте сразу и 32 и 64)
Станет возможно писать на mysql и выполнять запросы к серверу mysql.
Вопрос достаточно распространенный про id только что добавленной записи, в самом сообществе mysql.
Посмотрите mysql функцию last_insert_id. Она как раз и делает то что вам нужно. Исполнить сможете используя запрос серверу и адаптер mysql. Причем это не будет даже костылем.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906659
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значение ключа имеет смысл только в том случае, если вставляемая совокупность значений уникальна в пределах таблицы. А если она уникальная - ничто не мешает, используя эту совокупность в условии отбора, получить значение ключа свежевставленной записи.

Единственное, что теоретически может этому мешать - DEFAULT CURRENT_TIMESTAMP.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906673
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Если есть возможность, поменяйте DAO на ADO..........

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


В многопользовательском режиме есть вероятность получить ключ не своей свеже вставленной записи...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906684
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исключено. Если ты вставляешь поле="моё_значение", а потом делаешь запрос WHERE поле="моё_значение" - то как ты получишь ЧУЖУЮ запись?
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906687
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Исключено


Допустим сидит много менеджеров и фиксируют поступающие заявки...
№ заявки = № ключа/счетчика (1, 2, 3, ....)
К заявке цепляются строки (другая таблица) со вторичным ключом № заявки
В случае с DAO выше, мы получаем № заявки при её создании и на него непосредственно вешаем строки...
Если такой возможности нет, то № заявки нужно вычислять потом по максимальному № заявки, а так как
одновременно создали свои заявки многие пользователи, то максимальное значение № заявки для заведения
строк менеджер может получить уже не своё, а чужое...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906708
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Если есть возможность, поменяйте DAO на ADO.


Спасибо за пинок в нужном направлении, всё сложилось!
Итого:
- можно привязать таблицы через ODBC и работать как с обычными и в том числе с DAO...
- параллельно, если чего не хватает, можно выкрутиться посредством ADO, вполне адекватный пример тут ...

Единственное, last_insert_id капризная штука в самой MySql вот такая связка идет на ура
Код: sql
1.
2.
3.
INSERT INTO tab1 ( fild1 )
VALUES ("test30");
SELECT LAST_INSERT_ID();


Ну как бы мускулю, пофиг, тупо выполняет два запроса подряд с результатом по последнему и всё...
А в ADO нужно эти запросы разделять и запускать по очереди, причем селект сразу за инсертом, иначе получишь или не то, или ноль...

И ещё, мне как то иннодб больше понравилось, чем исам, - можно делать полноценную схему Бд (целостность, каскадность и т.д.), хотя помню кажется именно Вы предпочитаете юзать второе...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906718
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Если такой возможности нет, то № заявки нужно вычислять потом по максимальному № заявки
Не, я для кого распинаюсь? Заявка - она как бы не пустая, в ней данные есть. И если ИМЕННО ПО ЭТИМ ДАННЫМ (которые мы знаем - только что записывали) сделать выборку - ты получишь эту самую заявку. Но уже с присвоенным ей номером.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906719
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Хорошо, в заявке есть:
-Счетчик/ключ (1, 2, 3, ...)
-Тип заявки, например код 25 (вывоз мусора)
-Дата в формате (ДД.ММ.ГГ)

Три менеджера одновременно Создали по заявке:
102, 25, 22.12.19
103, 25, 22.12.19
104, 25, 22.12.19
И где чья ? Кто раньше нажал кнопку?
Ну если еще в заявке будет код Менеджера, то еще куда ни шло - можно вычислить последнюю именно свою...
Ну и чем больше отпечатков пальцев - тем проще...
Интересен был именно сам факт получения ключа на момент создания, без лишних вычислений его апосля...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906720
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Три менеджера одновременно Создали по заявке:
102, 25, 22.12.19
103, 25, 22.12.19
104, 25, 22.12.19
И где чья ? Кто раньше нажал кнопку?
Это ПОЛНОЕ содержимое записи заявки? Тогда это ошибка архитектуры. Не может бы АБСОЛЮТНЫХ копий - это именно что внесение двумя операторами одной и той же информации. И это должно было быть запрещено ещё на стадии ввода - с сообщением типа "Такая заявка уже существует". Технически - уником хоть по содержимому, хоть по хэшу,хоть ещё как. Чтобы заявки были разными - они обязаны отличаться хоть в чём-то, что пришло извне.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906721
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
...они обязаны отличаться хоть в чём-то..

А можно я подскажу Чем?

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

Таких "ошибок архитектуры" везде и повсюду вагон и маленькая тележка, по этому и придумали ключ/счетчик дабы не парится с абсолютной идентификацией конкретной записи... Большинство таблиц любой БД содержат именно такие ключи и это не ошибка архитектуры, а выход из тупика...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906723
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лапух
Может секундами?


Ну да мля... оператор глянул на свои котлы... ага 25 минут - 46 сякунд и жмякнул на кнопку...
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906724
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,, вы же не первый день замужем, ну типа на сём форуме.
Должны же за столько лет понять и осознать, что без реального примера, вам 10-20 страниц напишут всяко-разных теоретических и по сути не пригодных советов.
Чё у вас за форум такой, где нормальный пример просто невозможно выложить и остается только прикалываться.

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

Может кто призовёт его к пустопорожнему обсуждению.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906725
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лапух
А можно я подскажу Чем?

Может секундами?
Время ввода, как и автоматически присвоенный номер, не являются информацией ЗАЯВКИ.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906726
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
по этому и придумали ключ/счетчик дабы не парится с абсолютной идентификацией конкретной записи...
???
Синтетический ключ-счётчик придумали для совсем иных целей. И изначально предполагалось, что его ни смотреть, ни тем более как-то (иначе чем для связывания таблиц) использовать, никто не будет.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906729
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
...И изначально предполагалось...

А в где, из первоисточников, можно об этом почитать?
Очень уж интересненько.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906732
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первоисточников уже фиг найдёшь - они если и есть, то изначально только в бумаге.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906746
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
...Первоисточников уже фиг найдёшь...

Печальненько.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906769
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это поможет (хотя вряд ли) - я это дело в своё время вычитал в мануале на СУБД Gupta (была такая где-то в забугорье, её портировали, во всяком случае пытались, под ЕС ЭВМ). Они ссылались на какой-то серьёзный труд по теории реляционных БД, ессно я не помню какой, и его не читал, ибо достать импортное узкоспециальное издание в те времена было более чем нереально.

Там автогенерящиеся индексы и поля-ссылки вообще были заложены безусловно, не описывались структурой (описывался только факт референса, а СУБД уже всё организовывала самостоятельно), и занимались чисто установлением соответствия.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906809
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример, приведенный в самом начале заработает, если добавить цикл ожидания ненулевого значения поля-счетчика, он появляется, но не сразу.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906872
Для 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


В ADO еще проще. Там добавленная запись становится текущей.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906893
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Способ рабочий, но иногда нужно знать значение ключа до апдейта.
...
Рейтинг: 0 / 0
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
    #39906899
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Синтетический ключ-счётчик придумали для совсем иных целей. И изначально предполагалось, что его ни смотреть, ни тем более как-то (иначе чем для связывания таблиц) использовать, никто не будет.
Счётчики остались для совместимости со старыми приложениями. Им требовались номера строк. https://it.toolbox.com/blogs/josh-berkus/primary-keyvil-part-i-011806 The surrogate numeric key has been a necessary evil for as long as we've had SQL. It was set into SQL89 because the new SQL databases had to interact with older applications which expected "row numbers." It's a bit of legacy database thinking that, according to a conversation with Joe Celko, E.F. Codd regretted allowing to creep into the SQL standard.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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