|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Честно искал ответ на свой вопрос в сети, что-то похожее находил на этом форуме, но, к сожалению, так и не смог ответить на свой вопрос. Дано: Таблица на сервере Sql, Microsoft SQL Server 2014, зовут ее Opers в схеме dbo. Мой проект предполагает размещение таблиц на сервере Sql, а оболочку мне удобнее писать в Access 2010. На сервере создана хранимая процедура без параметров: Код: plaintext 1. 2. 3. 4. 5.
В среде access через конструктор запросов создаю запрос к серверу sql, вызывающий мою хранимку: Код: plaintext 1. 2.
Там же, в конструкторе, указываю свойства подключения: Код: plaintext 1.
При запуске в режиме таблицы мой запрос, как и ожидается, выдает мне всю таблицу dbo.Opers, как она есть, но только запрос в режиме таблицы в access не позволяет изменять значения записей , строка состояния показывает: "Объект recordset не является обновляемым" Собственно, вопрос: можно ли создать запрос к серверу, вызывающий хранимую процедуру, чтобы в режиме таблицы можно было бы изменять значение полей в записях напрямую? Я понимаю, что можно всякий раз предлагать пользователю редактировать запись во временной таблице и изменять значение при помощи запроса на обновление, но очень хотелось бы, чтобы все это было попроще. Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 10:35 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Kapitonius, Ключевое поле есть в таблице Opers? Код: vbnet 1. 2. 3. 4. 5.
я всегда так поднимаю Recordset strSQL - передаю параметры в хранимку для отбора. Зачем вытягивать всю таблицу, если пользуетесь хранимкой? Так со строками работаю, как хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 10:54 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Есть. Первичный суррогатный ключ. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 10:58 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Игортан, Есть первичный суррогатный ключ. Запрос сделан больше для примера, нежели для практических целей. Ну и запрос предполагается создать в Access через конструктор, мне, как чайнику, так проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:01 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Kapitonius, А почему не хотите работать с линкованной таблицей? Ну или хотя бы обычным запросом на выборку данных на подобие этого? Код: sql 1.
Можете и фильтр добавить в текст запроса. Если есть первичный ключ, то по идее запрос должен быть обновляемым. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:05 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Kapitonius, Без обид, если есть доступ к серверу - там пишите запросы. Там визуализация конструктора (в 2014) точно будет не хуже. Будет легко, различий в SQl не много. Плюсов, потом, от этого ощутите на много больше, чем просто привычным способом решать проблему. Особенно, если это не разовая и не первая поделка. По крайней мере, я относительно легко мигрировал в хранимки. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:09 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
studieren, спасибо, хотелось бы основную часть процедур разместить все же на сервере, но запросы до этого создавать в конструкторе access, чтобы их было проще подключать при конструировании форм. А если запрос будет на с одной таблицей, а со связанными таблицами, завязанными на один первичный ключ, то объект тоже будет редактируемым? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:13 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Игортан, да какие обиды, я вообще боялся, что меня тут закидают экскрементами, потому что чувствую, что вопрос по сути глупый, и что мне буквально какой-то мелочи не хватает, чтобы понять. Наверное, к исполнению хранимок напрямую я и приду в итоге, только все равно вопрос остался. Я попробовал запустить хранимку напрямую, из-под SQL Management Studio, та же картина - записи не редактируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:16 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Если честно, выполненные запросы и у меня не редактируются прям вот в открывшемся результате запроса. Я сейчас на 2000 вообще, может чего сам не знаю, или нету такой возможности в принципе. Для редактирования строк на сервере - открываем в наглую таблицу или запросом на изменение. KapitoniusЕсть первичный суррогатный ключ. Что вы под этим понимаете? По моему разумению, в таблице должен быть первичный ключ. Обозначается так же как и в Аксе, ключиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:48 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 11:52 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Игортан, в таблице Opers есть ключевое поле OPER_ID, которое является первичным ключом, имеет тип int и заполняется с приростом +1 при добавлении новых записей. Короче, ключ есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 12:03 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Kapitonius, Честно говоря, не представляю, как может запрос через хранимку быть редактируемым. В общем случае внутри хранимой процедуры могут быть очень сложные вычисления, о которых Акцесс ничего не знает и, естественно, ему не известно, какого вида должен бать INSERT или UPDATE для изменения данных. Даже если процедура возвращает рекордсет, должен быть механизм обратного преобразования данных в таблицы. Так что, думаю, форма на базе как pathtrough запроса, так и на базе процедуры (что почти одно и то же) не может быть редактируемой ни при каких условиях. В вашем случае проще использовать прилинкованный view вместо хранимки, если вопрос в дополнительной безопасности или преобразовании данных. Естественно, вьюшка должна быть редактируемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 12:07 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
MrShin, спасибо за Ваш ответ. Я подозревал, что хочу невозможного, но в силу отсутствия достаточного опыта и знаний не мог себе это правильно сформулировать. "Вьюшка" для моих целей, к сожалению, тоже не подходит, потому что составлять формы для пользователя предполагается на основе представлений, содержащих явно больше одной базовой таблицы. Хотя и связаны они все будут через одно ключевое поле, но связи будут один-ко-многим... Так что, видимо, придется, оставить все как есть: в проект access подключены связанные таблицы с сервера Sql, на основе которых уже в access конструируются запросы с Динамическим набором несогласованных записей. Это, с точки зрения нормального разработчика, не очень хорошо, но пока других вариантов не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 12:17 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Kapitonius, Я обычно, если требуется редактирование данных на базе сложных запросов и еще в нескольких случаях использую временные локальные таблицы для редактирования. Грузим туда данные откуда угодно, после редактирования отсылаем назад либо по кнопке сохранения, либо в событии Form_AfterUpdate формирую запросы на обновление для каждой записи. В этом случае можно использовать что угодно, включая хранимые процедуры для апдейта данных. Правда, с блокировкой редактируемых записей придется поизвращаться, если требуется многопользовательская работа. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 14:09 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
MrShinKapitonius, Честно говоря, не представляю, как может запрос через хранимку быть редактируемым. А чего бы и нет? Если сам по себе запрос во вьюшке, конечно, редактируемый. Другое дело - кривизна самого Access-a. Давненько с ним не пробовал, но в ADP, возможно, вполне будет работать. Но ADP уже само по себе отмерло... А так в том же древнем VB6 вполне себе работает код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Где запрос на сервере выглядит как: Код: sql 1. 2. 3.
Само-собой поле Дата в данном случае нередактируемое... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 14:45 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
>>> Если сам по себе запрос во вьюшке, конечно, редактируемый. Пардон, я про хранимку, конечно, писал... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 14:47 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
AndrF, понятно, спасибо. Видимо, так и нужно делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 15:05 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
KapitoniusAndrF, понятно, спасибо. Видимо, так и нужно делать. В Access-е с формой так, возможно, не получится. В том числе в ADP. Дюже крив он... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 16:08 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Хотя на скорую руку попробовал - похоже в MDB-шке все работает: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Записи формы добавляются, редактируются и удаляются нормально! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 16:14 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
AndrF, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 16:20 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
Возможно будут проблемы с обработкой ошибок ввода. Так в поле с NOT NULL я смог сохранить пустую строку. Но это легко можно сделать проверку в программе. В общем, пробуйте дальше сами. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 16:22 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
AndrF, я уже в процессе :) !!! Спасибо за реальную помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 16:28 |
|
Редактирование в запросе Access, созданном как запрос к серверу Sql, запускающем хранимку
|
|||
---|---|---|---|
#18+
И еще - одна процедура может возвращать набор Recordset-ов. Это тоже можно использовать. Скажем один для самой формы, а другие для ее ComboBox-ов или подчиненной формы. Ну это так - на предмет поиграться в будущем... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 16:49 |
|
|
start [/forum/topic.php?fid=45&fpage=75&tid=1612431]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 146ms |
0 / 0 |