|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
На сколько я помню при любом ODBC соединении вот такая конструкция: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Будет выдавать всегда 0 (ноль) вместо значения ключа ? Может кто: - нарыл коннектор MySql - или знает как конфигурить эту MySql - или придумал оптимальный костыль Чтобы таки узнать ключ-счетчик в момент создания записи через ODBC соединение? Пока вижу пару решений: 1. Генерить запись в самой MySql с возвратом ключа, а потом её модифицировать. 2. Хранить и Генерить ключ в бд акцесса, а потом писать запись в MySql (естественно в MySql это уже будет не счетчик) Но они как-то на мой взгляд не очень... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 04:12 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag, Если есть возможность, поменяйте DAO на ADO. Там есть возможность выйти на ado connection и ado command. Драйвера свежие для адаптера посмотрите в Гугле mysql odbc driver. (Ставьте сразу и 32 и 64) Станет возможно писать на mysql и выполнять запросы к серверу mysql. Вопрос достаточно распространенный про id только что добавленной записи, в самом сообществе mysql. Посмотрите mysql функцию last_insert_id. Она как раз и делает то что вам нужно. Исполнить сможете используя запрос серверу и адаптер mysql. Причем это не будет даже костылем. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 08:13 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Значение ключа имеет смысл только в том случае, если вставляемая совокупность значений уникальна в пределах таблицы. А если она уникальная - ничто не мешает, используя эту совокупность в условии отбора, получить значение ключа свежевставленной записи. Единственное, что теоретически может этому мешать - DEFAULT CURRENT_TIMESTAMP. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 12:25 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Сергей Лалов Если есть возможность, поменяйте DAO на ADO.......... Спасибо попробую... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 13:27 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina ничто не мешает, используя эту совокупность в условии отбора, получить значение ключа свежевставленной записи. В многопользовательском режиме есть вероятность получить ключ не своей свеже вставленной записи... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 13:30 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Исключено. Если ты вставляешь поле="моё_значение", а потом делаешь запрос WHERE поле="моё_значение" - то как ты получишь ЧУЖУЮ запись? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 15:10 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina Исключено Допустим сидит много менеджеров и фиксируют поступающие заявки... № заявки = № ключа/счетчика (1, 2, 3, ....) К заявке цепляются строки (другая таблица) со вторичным ключом № заявки В случае с DAO выше, мы получаем № заявки при её создании и на него непосредственно вешаем строки... Если такой возможности нет, то № заявки нужно вычислять потом по максимальному № заявки, а так как одновременно создали свои заявки многие пользователи, то максимальное значение № заявки для заведения строк менеджер может получить уже не своё, а чужое... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 15:54 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Сергей Лалов Если есть возможность, поменяйте DAO на ADO. Спасибо за пинок в нужном направлении, всё сложилось! Итого: - можно привязать таблицы через ODBC и работать как с обычными и в том числе с DAO... - параллельно, если чего не хватает, можно выкрутиться посредством ADO, вполне адекватный пример тут ... Единственное, last_insert_id капризная штука в самой MySql вот такая связка идет на ура Код: sql 1. 2. 3.
Ну как бы мускулю, пофиг, тупо выполняет два запроса подряд с результатом по последнему и всё... А в ADO нужно эти запросы разделять и запускать по очереди, причем селект сразу за инсертом, иначе получишь или не то, или ноль... И ещё, мне как то иннодб больше понравилось, чем исам, - можно делать полноценную схему Бд (целостность, каскадность и т.д.), хотя помню кажется именно Вы предпочитаете юзать второе... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 19:29 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag Если такой возможности нет, то № заявки нужно вычислять потом по максимальному № заявки ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 19:57 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina, Хорошо, в заявке есть: -Счетчик/ключ (1, 2, 3, ...) -Тип заявки, например код 25 (вывоз мусора) -Дата в формате (ДД.ММ.ГГ) Три менеджера одновременно Создали по заявке: 102, 25, 22.12.19 103, 25, 22.12.19 104, 25, 22.12.19 И где чья ? Кто раньше нажал кнопку? Ну если еще в заявке будет код Менеджера, то еще куда ни шло - можно вычислить последнюю именно свою... Ну и чем больше отпечатков пальцев - тем проще... Интересен был именно сам факт получения ключа на момент создания, без лишних вычислений его апосля... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:15 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag Три менеджера одновременно Создали по заявке: 102, 25, 22.12.19 103, 25, 22.12.19 104, 25, 22.12.19 И где чья ? Кто раньше нажал кнопку? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:18 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:30 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina Тогда это ошибка архитектуры Таких "ошибок архитектуры" везде и повсюду вагон и маленькая тележка, по этому и придумали ключ/счетчик дабы не парится с абсолютной идентификацией конкретной записи... Большинство таблиц любой БД содержат именно такие ключи и это не ошибка архитектуры, а выход из тупика... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:37 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Лапух Может секундами? Ну да мля... оператор глянул на свои котлы... ага 25 минут - 46 сякунд и жмякнул на кнопку... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:39 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag,, вы же не первый день замужем, ну типа на сём форуме. Должны же за столько лет понять и осознать, что без реального примера, вам 10-20 страниц напишут всяко-разных теоретических и по сути не пригодных советов. Чё у вас за форум такой, где нормальный пример просто невозможно выложить и остается только прикалываться. Кстати, что то плакальшик и весь из себя обиженый на Нашем форуме - Панург - Пропал. Даже в тут его не видно и не слышно стало, а то ведь как бы в каждой бочке затычкой был. Даже скучно без него стало. Поспорить не с кем. Может кто призовёт его к пустопорожнему обсуждению. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:53 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Время ввода, как и автоматически присвоенный номер, не являются информацией ЗАЯВКИ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:54 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag по этому и придумали ключ/счетчик дабы не парится с абсолютной идентификацией конкретной записи... Синтетический ключ-счётчик придумали для совсем иных целей. И изначально предполагалось, что его ни смотреть, ни тем более как-то (иначе чем для связывания таблиц) использовать, никто не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 20:55 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina ...И изначально предполагалось... А в где, из первоисточников, можно об этом почитать? Очень уж интересненько. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 21:24 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Первоисточников уже фиг найдёшь - они если и есть, то изначально только в бумаге. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 21:31 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 22:06 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Если это поможет (хотя вряд ли) - я это дело в своё время вычитал в мануале на СУБД Gupta (была такая где-то в забугорье, её портировали, во всяком случае пытались, под ЕС ЭВМ). Они ссылались на какой-то серьёзный труд по теории реляционных БД, ессно я не помню какой, и его не читал, ибо достать импортное узкоспециальное издание в те времена было более чем нереально. Там автогенерящиеся индексы и поля-ссылки вообще были заложены безусловно, не описывались структурой (описывался только факт референса, а СУБД уже всё организовывала самостоятельно), и занимались чисто установлением соответствия. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 23:21 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Пример, приведенный в самом начале заработает, если добавить цикл ожидания ненулевого значения поля-счетчика, он появляется, но не сразу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 05:45 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Для DAO: Код: vbnet 1. 2. 3. 4. 5. 6.
В ADO еще проще. Там добавленная запись становится текущей. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 10:19 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, Способ рабочий, но иногда нужно знать значение ключа до апдейта. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 10:47 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina Синтетический ключ-счётчик придумали для совсем иных целей. И изначально предполагалось, что его ни смотреть, ни тем более как-то (иначе чем для связывания таблиц) использовать, никто не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 10:55 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
MrShin Способ рабочий, но иногда нужно знать значение ключа до апдейта. Приведите пример, когда оно нужно "до апдейта". К тому же все методы "до того" не надежны. Например если есть запись со счетчиком 1, а запись с 2 удалена, то DMax вернет 2, а счетчик в новой записи будет 3. Я уже не говорю о многопользовательской среде. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 11:02 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Что, на хвост тебе наступил? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 11:03 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Кривцов Анатолий Приведите пример, когда оно нужно "до апдейта". Например, когда нужно сформировать код записи для чтения человеком для новой записи на базе значения счетчика. Кривцов Анатолий К тому же все методы "до того" не надежны. Например если есть запись со счетчиком 1, а запись с 2 удалена, то DMax вернет 2, а счетчик в новой записи будет 3. Так я ж и не предлагал DMax использовать, этого делать нельзя. Я предлагал просто подождать несколько циклов, пока база не вернет новый ключ, он точно будет правильным и в многопользовательской среде. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 11:15 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Панург Счётчики остались для совместимости со старыми приложениями. Панург Им требовались номера строк. Что-то я не припоминаю приложений, работавших именно с БД (даже файловыми) и использовавших именно порядковый номер записи (тем более что все они работали по принципу "пометить на удаление, а удалим, когда попросят сжать"). Что же до внутреннего номера записи - так он есть в той или иной форме практически в любой современной СУБД. Впрочем, явно это описано, пожалуй, только у MySQL, и только для InnoDB. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 11:36 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina, мне кажется я привёл ссылку на источник информации. Источник и автор высказывания лично у меня вызывают доверие. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 11:56 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Akina Ну если учесть тот факт, что до сих пор они интенсивно используются, и куда чаще естественных ключей Akina Что-то я не припоминаю приложений ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 12:08 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
MrShin Пример, приведенный в самом начале заработает, если добавить цикл ожидания ненулевого значения поля-счетчика, он появляется, но не сразу. Не дождался... пару минут прошло- снял задачу, похоже на ODBC MySql это не распространяется... Кривцов Анатолий Для DAO: Код: vbnet 1. 2. 3. 4. 5. 6.
тоже не работает, ошибка типа текущая запись удалена, пробовал LastUpdated, аналогично... А вот такое заработало: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вопрос только в том всегда ли будет Last = LastModified в разрезе ODBC MySql ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 13:21 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
Прикольно... Можно сделать важный вывод по работе c DAO через ODBC MySql: после добавления записей при помощи rs.AddNew .... rs.Update они вообще недоступны от слова никак в этом rs до применения rs.Requery !!! То есть все добавления идут за пределами ODBC на самом сервере, а чтобы их увидеть, нужно обновить набор ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 13:37 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag тоже не работает, ошибка типа текущая запись удалена, пробовал LastUpdated, аналогично... Не забываем при открытии рекордсета добавить опции dbOpenDynaset, dbSeeChanges, тогда будет это работать ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 14:40 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag Не дождался... пару минут прошло- снял задачу, похоже на ODBC MySql это не распространяется... Да, сейчас проверил, действительно, значение появляется только после апдейта на SQL базах. Извиняюсь, спутал с необходимостью ждать уже ПОСЛЕ апдейта. Не знаю, насколько это критично на MySQL и при прямой работе с MS SQL, но при работе с SharePoint _иногда_ значение после апдейта не появлялось и происходила ошибка, поэтому я стараюсь на всякий случай добавлять ожидание: Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 14:50 |
|
DAO + ODBC + MySql получение ключа-счетчика в момент создания записи
|
|||
---|---|---|---|
#18+
vmag, тогда пробуйте использовать ADODB.Recordset (только без пакетного обновления). Там новая запись становится текущей. "Вопрос только в том всегда ли будет Last = LastModified в разрезе ODBC MySql" - не знаю, как с MySql, но справка по AddNew для DAO рассказывает, что в Recordset типа "Таблица" ее расположение зависит от индексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 16:58 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1610323]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 432ms |
0 / 0 |