powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа метода Recorset.AddNew на вьюхе
8 сообщений из 8, страница 1 из 1
Работа метода Recorset.AddNew на вьюхе
    #34737904
Игорь У
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется в наличие давно написанная и отлаженная программа.
В ней реализованы классы, какждый из которых какбы работает с соотетствующей таблицей БД, через Recordset соответственно.
Долго и нудно реализацию класса описывать не буду, скажу лишь что строка запроса для выбора записей у каждого класса - константа, с именем соотв. таблицы:
Код: plaintext
1.
2.
3.
4.
Const m_sSelect As String = "SELECT * FROM Таблица"
...
'Открытие
rs.Open m_sSelect, con, adOpenDynamic, adLockOptimistic, adCmdText

, а добавление записи происходит с помощью метода AddNew:
Код: plaintext
1.
2.
3.
Public Sub AddRecord()
      rs.AddNew
End Sub
После которого происходит заполнение полей-свойств:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public Property Let COL_EMPLOE_ID(ByVal vEMPLOE_ID As Variant)
    If IsNull(vEMPLOE_ID) Or IsEmpty(vEMPLOE_ID) Then
        rs("EMPLOE_ID") = Null
    Else
        rs("EMPLOE_ID") = vEMPLOE_ID
    End If
End Property
, ну и "пересылка" записи на сервер при следующем вызове AddNew или Update.
Вобщем всё бы ничего, но таблицы у нас на БД теперь стали одноименными вьюхами, и теперь при добавлении записи вышеуказанным способом возникает ошибка доступа к данным, т.к. доступ на ту таблицу из которой происходит выборка во вьюху - закрыт, а Recordset видимо каким-то образом определяет имя таблицы и "нехочет вставлять запись" во вьюху, обращаясь зачем-то непосредственно к таблице.
ВОПРОС: мождно ли рекордсет "научить" вставлять запись во вьюху, а не делать то, что его не просят (вычленять имя таблицы из запроса вьюхи) ?

PS: Я конечно знаю, что можно делать непосредственно "INSERT Вьюха ...", но тут немного нарушится логика программы, и придется много переделывать.
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34738184
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищите в коде строчки где задается rs.Properties("Resync Command")
И rs.Fields(x).Properties("BASETABLENAME") (как еще один ориентир).
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34738225
Игорь У
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нету там ничего подобного.
Как я понял, надо задать эти свойства, т.е. прописать имя вьюхи в них?
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34738582
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если написать SELECT * FROM ИмяВьюхи то рекордсет именно с вьюхой и будет работать.
Если валится сообщение об ошибке "Нет прав обновить таблицу" - то скорее всего ваша вьюха просто сделегировала гранты таблицы.
А те свойства что я назвал в предыдущем посте - как раз для того что бы рекордсет обновлял не через вьюху.
Тут уж сам разберись в чем дело - или вьюха необновляемая, или гранты не проставлены, или ваш рекорсдет где-то вглуби кода перенастраивается на "нестандартный" апдейт.
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34738749
Игорь У
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, вьюха обновляемая, т.е. INSERT в нее проходит (если из-под SQL запустить);
гранты проставлены так, чтоб нельзя было обратиться к таблице, а к вьюхе можно;
рекорсдет нигде не перенастраивается...
Решил попробовать сделать эмуляцию AddNew через Command, т.е. напрямую INSERT пишу.
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34738781
Игорь У
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вьюха не сделегировала гранты таблицы, хотя бы потому(помимо того что Insert напрямую проходит), что запроса "Insert Вью ..." вообще нет, идет сразу почему-то "Insert Таблица", смотрел SQL-Profiler'ом (сервер MSSQL-2005)
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34739597
Игорь У
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал заместо AddNew работу через Command, так теперь заметил что rs.MoveNext также вызывает аналогичную ошибку, т.е. теперь SELECT не проходит. Наверно тоже через Command делать придется.
...
Рейтинг: 0 / 0
Работа метода Recorset.AddNew на вьюхе
    #34739635
Игорь У
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выкладываю все Properties рекордсета, извиняюсь что много ненужного, но для чистоты эксперимента :)

IChapteredRowset = True
IColumnsInfo = True
IColumnsRowset = True
IConnectionPointContainer = True
IConvertType = True
ILockBytes = False
IRowset = True
IDBAsynchStatus = False
IParentRowset = True
IRowsetChange = True
IRowsetExactScroll = True
IRowsetFind = True
IRowsetIdentity = True
IRowsetInfo = True
IRowsetLocate = True
IRowsetRefresh = True
IRowsetResynch = False
IRowsetScroll = True
IRowsetUpdate = True
IRowsetView = True
IRowsetIndex = False
ISequentialStream = True
IStorage = False
IStream = False
ISupportErrorInfo = True
Preserve on Abort = True
Access Order = 2
Append-Only Rowset = False
Blocking Storage Objects = False
Use Bookmarks = True
Skip Deleted Bookmarks = True
Bookmark Type = 1
Cache Deferred Columns = False
Fetch Backwards = True
Hold Rows = True
Scroll Backwards = True
Change Inserted Rows = True
Column Privileges = False
Command Time Out = 0
Preserve on Commit = True
Defer Column = False
Delay Storage Object Updates = True
Private1 =
Filter Operations = 27
Find Operations = 27
Hidden Columns = 1
Immobile Rows = True
Literal Bookmarks = True
Literal Row Identity = True
Maximum Open Rows = 0
Maximum Pending Rows = 0
Maximum Rows = 0
Column Writable = False
Memory Usage = 0
Notification Granularity = 1
Notification Phases = 31
Column Set Notification = 3
Row Delete Notification = 3
Row First Change Notification = 3
Row Insert Notification = 3
Row Resynchronization Notification = 3
Rowset Release Notification = 3
Rowset Fetch Position Change Notification = 3
Row Undo Change Notification = 3
Row Undo Delete Notification = 3
Row Undo Insert Notification = 3
Row Update Notification = 3
Bookmarks Ordered = True
Others' Inserts Visible = False
Others' Changes Visible = False
Own Inserts Visible = True
Own Changes Visible = True
Quick Restart = True
Reentrant Events = True
Remove Deleted Rows = True
Report Multiple Changes = False
Return Pending Inserts = True
Row Privileges = False
Asynchronous Rowset Processing = 16
Row Threading Model = 1
Server Cursor = False
Strong Row Identity = True
Objects Transacted = False
Unique Rows = True
Updatability = 7
Batch Size = 15
Update Criteria = 2
Background Fetch Size = 15
Initial Fetch Size = 50
Background thread Priority = 3
Cache Child Rows = True
Maintain Change Status = False
Auto Recalc = 1
Unique Table =
Unique Schema =
Unique Catalog =
Resync Command =
Cursor Engine Version = 28
Reshape Name =
Update Resync = 1
Release Shape On Disconnect = False
Bookmarkable = True
IAccessor = True
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа метода Recorset.AddNew на вьюхе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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