|
|
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Имеется в наличие давно написанная и отлаженная программа. В ней реализованы классы, какждый из которых какбы работает с соотетствующей таблицей БД, через Recordset соответственно. Долго и нудно реализацию класса описывать не буду, скажу лишь что строка запроса для выбора записей у каждого класса - константа, с именем соотв. таблицы: Код: plaintext 1. 2. 3. 4. , а добавление записи происходит с помощью метода AddNew: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вобщем всё бы ничего, но таблицы у нас на БД теперь стали одноименными вьюхами, и теперь при добавлении записи вышеуказанным способом возникает ошибка доступа к данным, т.к. доступ на ту таблицу из которой происходит выборка во вьюху - закрыт, а Recordset видимо каким-то образом определяет имя таблицы и "нехочет вставлять запись" во вьюху, обращаясь зачем-то непосредственно к таблице. ВОПРОС: мождно ли рекордсет "научить" вставлять запись во вьюху, а не делать то, что его не просят (вычленять имя таблицы из запроса вьюхи) ? PS: Я конечно знаю, что можно делать непосредственно "INSERT Вьюха ...", но тут немного нарушится логика программы, и придется много переделывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 11:33 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Ищите в коде строчки где задается rs.Properties("Resync Command") И rs.Fields(x).Properties("BASETABLENAME") (как еще один ориентир). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 12:44 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Да нету там ничего подобного. Как я понял, надо задать эти свойства, т.е. прописать имя вьюхи в них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 12:52 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Если написать SELECT * FROM ИмяВьюхи то рекордсет именно с вьюхой и будет работать. Если валится сообщение об ошибке "Нет прав обновить таблицу" - то скорее всего ваша вьюха просто сделегировала гранты таблицы. А те свойства что я назвал в предыдущем посте - как раз для того что бы рекордсет обновлял не через вьюху. Тут уж сам разберись в чем дело - или вьюха необновляемая, или гранты не проставлены, или ваш рекорсдет где-то вглуби кода перенастраивается на "нестандартный" апдейт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 14:15 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Да нет, вьюха обновляемая, т.е. INSERT в нее проходит (если из-под SQL запустить); гранты проставлены так, чтоб нельзя было обратиться к таблице, а к вьюхе можно; рекорсдет нигде не перенастраивается... Решил попробовать сделать эмуляцию AddNew через Command, т.е. напрямую INSERT пишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 14:50 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Вьюха не сделегировала гранты таблицы, хотя бы потому(помимо того что Insert напрямую проходит), что запроса "Insert Вью ..." вообще нет, идет сразу почему-то "Insert Таблица", смотрел SQL-Profiler'ом (сервер MSSQL-2005) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 14:55 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Сделал заместо AddNew работу через Command, так теперь заметил что rs.MoveNext также вызывает аналогичную ошибку, т.е. теперь SELECT не проходит. Наверно тоже через Command делать придется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 17:48 |
|
||
|
Работа метода Recorset.AddNew на вьюхе
|
|||
|---|---|---|---|
|
#18+
Выкладываю все 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 17:55 |
|
||
|
|

start [/forum/topic.php?fid=60&tid=2163558]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 467ms |

| 0 / 0 |
