Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855

Access + SQL Server как получить ID новой записи

12.10.2020, 08:37. Показов 916. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Есть проблема при работе Access c SQL Server при работе с присоединенными таблицами.

При создании новой записи Access сразу присваивает id. В SQL это не так. iD присвается уже после сохранения записи.

Так вот: у форму мы вводим новою запись. Надо взять id этой записи. В данное время я делаю так:
Visual Basic
1
DoCmd.RunCommand acCmdSaveRecord
а потом DMax(....)

Оно так работает. Но только вызывает сомнение сам процесс. Если в то же время другой пользователь вводит тоже новую запись, будет ошибка.

В интернете я нашел очень длинные и непонятные процедуры, как взять id на стороне SQL

Может кто-то может может посоветовать относительно несложное решение на стороне Access.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2020, 08:37
Ответы с готовыми решениями:

Автоинкремент в SQL Server. Проблемы при добавлении новой записи
Добрый день товарищи. Столкнулся с проблемой, что при добавлении новой записи бд в Windows Forms, автоинкрементное поле Id_key...

Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server?
ВОПРОС: Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server? MS SQL Server...

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее?
---

16
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
12.10.2020, 08:56
Цитата Сообщение от tkrainyk Посмотреть сообщение
При создании новой записи Access сразу присваивает id.
Нет не так
Цитата Сообщение от tkrainyk Посмотреть сообщение
Так вот: у форму мы вводим новою запись. Надо взять id этой записи.
Зачем?
Цитата Сообщение от tkrainyk Посмотреть сообщение
несложное решение на стороне Access
Visual Basic
1
me.dirty = false
в том месте, когда вам нужно, чтобы появился Код.
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
12.10.2020, 09:11  [ТС]
Цитата Сообщение от alvk Посмотреть сообщение
Нет не так
Не так, а так.

Visual Basic
1
DoCmd.OpenReport "Справка", acViewReport, , "[Код] = " & [Код]
Работает без сохранения записи.

Добавлено через 9 минут
Цитата Сообщение от alvk Посмотреть сообщение
me.dirty = false
Срабатыает неправильно. Возвращает не тот id, который должен быть присвоен записи.
0
Мы один, давай на "ты"
3841 / 1387 / 343
Регистрация: 16.06.2016
Сообщений: 3,280
12.10.2020, 09:51
tkrainyk, Добавление записи в таблицу и получение ее кода

иногда и поиском пользоваться надо
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
12.10.2020, 11:02
Цитата Сообщение от tkrainyk Посмотреть сообщение
Срабатыает неправильно. Возвращает не тот id, который должен быть присвоен записи.
Это сохранение изменений, ничего он не возвращает, вот после можно код dmax() вытащить.
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
12.10.2020, 11:05  [ТС]
Цитата Сообщение от alvk Посмотреть сообщение
Это сохранение изменений, ничего он не возвращает, вот после можно код dmax() вытащить.

Так я это и делаю.
А что
Visual Basic
1
DoCmd.RunCommand acCmdSaveRecord
работает хуже чем
Visual Basic
1
me.dirty = false
?
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
12.10.2020, 11:20
Цитата Сообщение от tkrainyk Посмотреть сообщение
работает хуже чем
Наверное, не помню, 11 лет прошло с тех пор, как это обсуждали.
1
Мы один, давай на "ты"
3841 / 1387 / 343
Регистрация: 16.06.2016
Сообщений: 3,280
12.10.2020, 12:17
Цитата Сообщение от alvk Посмотреть сообщение
вот после можно код dmax() вытащить.
в разрезе
Цитата Сообщение от tkrainyk Посмотреть сообщение
SQL Server
Цитата Сообщение от tkrainyk Посмотреть сообщение
получить ID новой записи
вообще рассматривать нельзя (ну если в этой базе будет всегда только один пользователь)
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
13.10.2020, 01:50
Цитата Сообщение от Панург Посмотреть сообщение
ну если в этой базе будет всегда только один пользователь
Не верно, в базе может быть сколько угодно пользователей, а вот id добавлять в данную таблицу должен один, максимум два.
Вообще распределение обязанностей между работниками - задача руководителя, а не программиста.
0
Мы один, давай на "ты"
3841 / 1387 / 343
Регистрация: 16.06.2016
Сообщений: 3,280
13.10.2020, 04:13
Цитата Сообщение от alvk Посмотреть сообщение
а вот id добавлять в данную таблицу должен один, максимум два.
какая чушь!..
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
13.10.2020, 04:38
Цитата Сообщение от Панург Посмотреть сообщение
какая чушь!..
У тебя чушь.
0
 Аватар для Andrey-MSK
3339 / 2226 / 387
Регистрация: 14.08.2018
Сообщений: 7,517
Записей в блоге: 4
13.10.2020, 08:38
tkrainyk, в одном запросе:
T-SQL
1
2
3
DECLARE newID INT
INSERT INTO .......
SET newID = SCOPE_IDENTITY()
можно это все обернуть в хранимую процедуру и доставать из нее этот ID по выходному параметру.
https://docs.microsoft.com/ru-... rver-ver15
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
13.10.2020, 08:51  [ТС]
Спасибо всем за советы и помощь. Правильно работают варианты от Панург и Andrey-MSK.

Но, самое главное, когда я потом подумал, то вариант из acCmdSaveRecord и DMax(....) тоже не будет давать ошибку. Обе процедуры выполняются одна за одной. То есть временный интервал между ними где-то возле одной тысячной секунды. И кто может за такой промежуток создать еще одну запись в таблице и это при 30 пользователях.

Ну что поделаешь, плохо соображаю.
0
Мы один, давай на "ты"
3841 / 1387 / 343
Регистрация: 16.06.2016
Сообщений: 3,280
13.10.2020, 09:32
Цитата Сообщение от tkrainyk Посмотреть сообщение
Но, самое главное, когда я потом подумал, то вариант из acCmdSaveRecord и DMax(....) тоже не будет давать ошибку. Обе процедуры выполняются одна за одной. То есть временный интервал между ними где-то возле одной тысячной секунды. И кто может за такой промежуток создать еще одну запись в таблице и это при 30 пользователях.
очень даже может и при двух пользователях. Но ты можешь смело двигаться по граблям самим собой заботливо разложенным.
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
13.10.2020, 09:47
Цитата Сообщение от Панург Посмотреть сообщение
очень даже может и при двух пользователях.
Зачем такая заносчивость и глупый спор не зная предмета обсуждения? Может из 30 пользователей только один может заносить новые данные в таблицу? Вы вообще в курсе, что такое блокировки хотя бы? Уже не говорю про разграничения пользователей, ибо для вас это тёмный лес.
0
Мы один, давай на "ты"
3841 / 1387 / 343
Регистрация: 16.06.2016
Сообщений: 3,280
13.10.2020, 09:50
alvk, с тобой я даже не спорю, смысла не вижу...
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
13.10.2020, 11:05
Одна рука не ведает, что делает вторая? Ну-ну.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2020, 11:05
Помогаю со студенческими работами здесь

Как получить RECID при сохранении новой записи в БД
Здравствуйте! Разрабатываю приложение в среде VS, язык С#, встраиваемая база данных Firebird Embedded. Каким образом можно получить...

Получить первичный ключ после новой записи, как?
Как получить значение первичного ключа, сразу после новой записи в БД?

MS Sql: при добавлении новой записи, информация из первой записи в таблице исчезает
Ошибка заключается в том, что при добавлении новой записи(через программу), информация из первой записи в таблице исчезает. При добавлении...

Как согласовать формат даты Access и SQL Server?
В таблицу на SQL Server не получается хранимой процедурой добавить дату из свободного поля на форме. Полю присвоено зачение теущей даты...

Как перенести полностью БД MS Access в SQL server 2000
Как перенести полностью БД MS Access в SQL server 2000 Не теряя PK, increment И всего прочего! Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru