|
|
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Вопрос вроде-бы пересекается с новым faq, но не совсем то... Есть форма, у нее подчиненная. На выходе из подчиненной запускается sp, правящая записи в ней. (таблица, из которой берет данные подчиненная форма, с иерархией, и хранимка пересчитывает количество в записях, с учетом количества верхних узлов - т.е. полное кол-во. Чтобы не считать их на лету.) Создаю новую запись в главной форме - вхожу в подчиненную - создаю запись в подчиненной - выхожу в главную форму (отработала sp) - вхожу в подчиненную - правлю созданную запись - пытаюсь ее сохранить - получаю сабж. Причем если в той же цепочке поменять первый пункт, т.е. Встаю на любую запись в главной форме - вхожу в подчиненную - создаю запись в подчиненной - выхожу в главную форму (отработала sp) - вхожу в подчиненную - правлю созданную запись - сохраняю ее или Правлю любую запись в главной форме - вхожу в подчиненную - создаю запись в подчиненной - выхожу в главную форму (отработала sp) - вхожу в подчиненную - правлю созданную запись - сохраняю ее То проблем нет. Во всех триггерах есть nocount on и вставки для сохранения identity. В главной и подчиненной описана команда синхронизации (формы не на sp, а на выражениях sql - "select * from mytable") Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 11:59 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Вру. Неправильно описал. Встаю на любую запись в главной форме - вхожу в подчиненную - создаю запись в подчиненной - выхожу в главную форму (отработала sp) - вхожу в подчиненную - правлю созданную запись - пытаюсь ее сохранить - ошибка Встаю на любую запись в главной форме - вхожу в подчиненную - правлю запись в подчиненной - выхожу в главную форму (отработала sp) - вхожу в подчиненную - правлю ту же запись - пытаюсь ее сохранить - ошибки нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:03 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2Geo Твоя проблема типична при отсуствиее комады синхронизации, но она у тебя есть. Попробуй выяснить через Profiler, что Акес передает/запрашивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:07 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
очень сильно похоже, что нужен реквери для подчиненной формы. По сценарию (Б) ОТСУТСТВУЕТ внешний по отношению к рекордсету (подчиненной) формы Update таблицы, по сценарию (А) он ЕСТЬ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:08 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
отвечал на самое первое сообщение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:09 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Бат вай?.. А, сейчас. Вот: exec sp_executesql N'UPDATE "Dolina".."tDrafts" SET "NameDraft"=@P1 WHERE "NumDraft"=@P2 AND "NumOrder"=@P3 AND "StrNum"=@P4 AND "NumHighLevel"=@P5 AND "NameDraft"=@P6 AND "DateDesign" IS NULL AND "NormWork" IS NULL AND "Quantity"=@P7 AND "Comment" IS NULL AND "FullQuantity" IS NULL' , N'@P1 nvarchar(5),@P2 int,@P3 varchar(5),@P4 nvarchar(2),@P5 int,@P6 varchar(3),@P7 smallint' , N'asd**', 21109, '77785', N'as', 21106, N'asd', 1 exec sp_executesql N'SELECT * FROM (tDrafts) WHERE NumDraft=@P1', N'@P1 int', 21109 это из профайлера. И следом идет запись о сохранении случившейся ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:23 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Кстати, источник данных у меня меняется по мере перемещения по подчиненной форме: select * from tDrafts where NumHighLevel=... а строка синхронизации одна select * from (tDrafts) where NumDraft=? Это нормально? (млин, вечером буду хетца читать, как это вообще работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:42 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
по этому обрывку судить вполне тяжело. когда писал, подразумевал следующее 0) я в АДП прктически как номер этого пункта. Когда-то, когда токо вышел 2000 акс чуть щупнул ад с скль 7 потом повода не было. (кажется сильно хочу поменять работу, только невдомек как это вообще делается...) 1) тогда (по памяти) увидел, что акцесс норовит с рекордсетами формы работать фактически через глобальные серверные курсоры. 2) для данного изложения достаточно считать, что глоб серв. курсоры образуют "собственный" рекордсет, к которому можно подсоединиться, но без этого подсоединенния он прочим процессам не виден. 3) изменения, проведенные во внешних процессах, и затрагивающие отобранные курсором записи фактически инвалидируют их (Ё уровень изоляции) 4) sp_executesql КАК РАЗ И ЗАПУСКАЕТ такое независимое исполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:45 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
select * from (tDrafts) where NumDraft=? скобки бы убрал - изврат это, да к тому же ты проблему с identity уже решил в триггере. Ну это так - к делу навряд ли относится, а вот с Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:45 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
А если по рабоче-крестьянски Встаю на любую запись в главной форме - вхожу в подчиненную - создаю запись в подчиненной - тут сохранить запись-выхожу в главную форму (отработала sp) - вхожу в подчиненную - правлю созданную запись - пытаюсь ее сохранить - ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:53 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2 zz думаю, сохранение НЕ ПОМОЖЕТ, потому как при ДОбавлении меняетсо КОЛИЧЕСТВО подчиненных записей, в которых sp МАРАЕТ при изменении количества и НЕ МАРАЕТ в противном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 12:59 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
авторскобки бы убрал /topic/40261#266083 :) автортам именно те параметры котрые должны быть? Те. 2zz бесполезно (пробовал), она же и так сохраняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 13:19 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2Victoha А как с этим бороться/обходить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 13:21 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
/topic/40261#266083 :) именно по этому и написал, что это изврат и это видно далее по тексту :) З.Ы, Так до сих пор и не понял в чем загадка скобок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 13:24 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
ЕСЛИ ЭТО ОНО (у тебя НЕ ОБЯЗАТЕЛЬНО оно, мне просто показалось, что похоже) то обходиться можно попробовать 3-мя способами - субъективные мнения в скобках 0) забабахать явный реквери при входе в подчиненную, можно при этом переменную состояния завесть, на которую и смотреть, нужен реквери или нет (чистый акцессный путь ) 1) (не нравится) воткнуть явный Update подчиненных в триггер (афтер) НА ВСТАВКУ в подчиненные 2) добавление вынести в собственную хранимку, по возможности избавившись от sp_executesql, иначе, боюсь, все повториться - тут лучше к соседям- скульникам сходить 3) забыл - отвлекли - не могу вспонить - наверно больше ничего не придумаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 13:53 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Victosha3) забыл - отвлекли - не могу вспонить Если нумеруешь от 0, то считать надо до n-1. Это нормально. 0, 1, 2 - это 3 штуки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 13:56 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2 Саныч написал 2) полностью, поставил 3) вспомнил про 0) - записал - ОТВЛЕКЛИ - что писать в 3) не помню - может и не было ничего. -))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:02 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
вот еще придумалось (не 3 3 должно было бы быть что-то специфически "серверное") 4) (вариация на тему 0 ) переменную состояния забабахать в подчиненной форме, если взведена, то при выходе сначала забабахать простой апдейт на текущем коннекте (без хранимки) И ПЕРЕД ПОТЕРЕЙ ФОКУСА контролом подчиненки - реквери 5) нарисовать "традиционный" цикл изменения на рекордсете ЗЫ Не забыть при этом, что в адп я 0 и палоччков у мене нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:13 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2Victosha Первый способ заработал, спасибо. По остальным попробую что-нибудь спросить, м.б. пойму чего. автор1) (не нравится) воткнуть явный Update подчиненных в триггер (афтер) НА ВСТАВКУ в подчиненные Зачем? Что при этом произойдет? автор2) добавление вынести в собственную хранимку, по возможности избавившись от sp_executesql, иначе, боюсь, все повториться - тут лучше к соседям- скульникам сходить Добавление записи в подчиненную хранимкой? Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:15 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
автор автор 1) (не нравится) воткнуть явный Update подчиненных в триггер (афтер) НА ВСТАВКУ в подчиненные Зачем? Что при этом произойдет? предварительное замечание Все что было написано - это не замена реквери, а некоторая его обертка, которая, возможно, при каких-то вариантах рекордсета его (реквери) в клиентском коде не потребует ответ Думал вот о чем: Задача произвести update во всех подчиненных при добавлении новых и не производить в противном случае. Умеренно естественным местом для такого действия будет триггер на вставку. (на самом деле не уверен, что он должен быть after - посмотри в BOL) Так ты всю "бизнес-логику" этого вопроса выносиш на сервер, ассоциируешь ее непосредственно с таблицей, и она не интерферирует с простым изменением записи подчиненной таблицы. Вообще говоря это не отменяет реквери - но есть надежда. автор автор 2) добавление вынести в собственную хранимку, по возможности избавившись от sp_executesql, иначе, боюсь, все повториться - тут лучше к соседям- скульникам сходить Добавление записи в подчиненную хранимкой? Это как? обычная хранимка с параметрами, внутри которой INSERT тоже ничего не отменяет - см 12:45. В действительности не знаю, как прикрутить к табличной форме. При работе с актив-иксами - относительно стандарный способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:30 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2 Geo сам я, наверно, пошел бы по дороге 4) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:31 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
А почему вообще происходила ошибка? Количество измененных записей отличается от того, которое Акцесс ожидал увидеть при сохранении записи? Если да, то сколько он ожидал в случае с вновь созданной после выхода/входа в подформу? И можно ли это как-то узнать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:38 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
И зачем знать перед сохранением изменений в записи @@lastident? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:40 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
авторА почему вообще происходила ошибка? все что я думал по этому поводу, изложил в 12:45 ТАМ ОТВЕТ КАК МИНИМУМ НЕ ПОЛНЫЙ, А, МОЖЕТ И СОВСЕМ НЕВЕРНЫЙ. Еще раз, грубо идея в том, что после updatet-a значений существующих записей вызванных добавлением новой строки в текущем рекордсете ВСЕ СТРОКИ НЕПРАВИЛЬНЫЕ И НЕ СООТВЕТСТВУЮТ текущему состоянию базы данных, о чем адо и пытается сообщить по своему. ЗЫ1 вот как-то я призывал Latuk-а поспорить - не захотел. А тема-то родственная. (Там тема про остатки-обороты была) РОДСТВЕННАЯ ТЕМА:Хранение количества штук подчиненных записей в самих подчиненных в отдельном поле. Я скромно считаю это плохим проектированием, ПРОТИВОРЕЧАЩИМ естественному быту проектирования РЕЛЯЦИОННЫХ базов данных. В данном случае даже вопиюще. Я бы лишил подчиненные ТАКОГО волшебного знания. ЗЫ2 авторИ зачем знать перед сохранением изменений в записи @@lastident? прошу прощения, но я совсем не знаю о чем это - мы об этом никак не говорили и такого в этом потоке не вижу влет. То есть, наверно, не ко мне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 14:53 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
автор мы об этом никак не говорили и такого в этом потоке не вижу влет Это о добавлении в триггеры кусков, сохраняющих последний identity. Тоже не понимаю, зачем оно нужно. Блин, пишу программу, которая не знаю как и почему работает/не работает. Обычно кусочки складываются в четкую картину со временем, но как правило далеко не сразу. Надо бы что-нибудь почитать про sql "для чайников" - почему, что и как в нем крутиться. К сожалению про серверные курсоры (в том числе) я не знаю ничего, то есть абсолютно ничего, поэтому вынужден временно прекратить задавать вопросы, поскольку не понимаю на них ответов. :( Еще раз спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 15:00 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
щас попробую ссылку найти "на себя" -)) а пока кратко: дело в том, @IDENTITY - ГЛОБАЛЬНАЯ переменная на сервере, и мгновенно портится, любом следующем добавлении в любую таблицу. ТАК (как спрошено) пытаются делать, когда прямо в триггер встраивают "журналирование" в таблицу, в которой есть собственное поле IDENTITY. Опять же, ни на что не претендуя, СЧИТАЮ сие ПЛОХОЙ ПРАКТИКОЙ - и чужими победами в этом вопросе совсем не восторгаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 15:08 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
вот длинный поток, в котором для меня эта тема (при идентити в триггерах прочих интересных местах), наверно впервые, была раскрыта в полном цвете. /topic/55716&pg=-1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 15:14 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Ох ты е-мое, прочитал ссылку и наконец-то понял, зачем ставить set nocount on. Victosha, большое спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 15:37 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
А почему вообще происходила ошибка? 1.Вот этой командой exec sp_executesql N'UPDATE "Dolina".."tDrafts" SET "NameDraft"=@P1 WHERE "NumDraft"=@P2 AND "NumOrder"=@P3 AND "StrNum"=@P4 AND "NumHighLevel"=@P5 AND "NameDraft"=@P6 AND "DateDesign" IS NULL AND "NormWork" IS NULL AND "Quantity"=@P7 AND "Comment" IS NULL AND "FullQuantity" IS NULL' , N'@P1 nvarchar(5),@P2 int,@P3 varchar(5),@P4 nvarchar(2),@P5 int,@P6 varchar(3),@P7 smallint' , N'asd**', 21109, '77785', N'as', 21106, N'asd', 1 Access пытается обновить запись в таблице ,которую ищет используя значения всех полей источника записей до изменения. И не находит 2. .Вот этой командой exec sp_executesql N'SELECT * FROM (tDrafts) WHERE NumDraft=@P1', N'@P1 int', 21109 проверяет по ключу – есть ли запись с таким ключом в таблице .Есть. Из чего делается вывод ,что запись была изменена. А такая команда синхронизации может и не работать,лучше все поля указать в ней явно. При вставке новой записи вставляется то,что вводиться через форму или Null, если можно и поля нет на форме.Если на сервере какие то значения будут изменены,например триггером,то Access при последующем обновлении этой записи выдаст ошибку,т.к. значения всех полей источника записей до изменения он берет на своей стороне и синхронизацию при вставке,по-моему,не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 13:24 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
Акцесс САМ не так много умеет делать. Он больщей частью ПОРУЧАЕТ это делать кому-то другому. Синхронизацию для него делает АДО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 13:26 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
А я где-то читал,что он работает через OLE DB напрямую ,пропуская ADO.и,по-моему,все команды серверу формирует программа,которая называется Access ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 13:44 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2 Maligor а ты грохни библиотеку ADO из common files и посмотри - ничего он без адо не делает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 13:47 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
c OLE DB он работает настолько напрямую, насколько это вообще возможно для приложения, взаимодействующего с ОБЪЕКТНЫМ внешним миром через OLE Automation. Здесь прямее АДО пути нет - он (АДО) для того писан был. Упоминаемый Вами контекст означает, что акцесс не задействует при работе с АДО напрямую слой ОДБС, что означает некий выигрыш по памяти/производительности/надежности. В действительности это определяется НАСТРОЙКОЙ соединения. ЗЫ АДО синхронизацию тоже не само делает - он это OLE DB драйверу рано или поздно поручить обязан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 13:56 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
А если весь свой код убрать и грохнуть? И разве ADO не интерфейс к OLE DB? Если так ,то синхронизацию для него делает OLE DB.И все команды серверу формирует программа,которая называется Access. И к данному вопросу это отношения не имеет,я имею ввиду-кто делает,а имеет отношение ,что делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 14:00 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2 Maligor Возможно, Вы правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 14:05 |
|
||
|
Проблема при работе с ADP (Скопировать в буфер, Отменить изменения, Сохранить)
|
|||
|---|---|---|---|
|
#18+
2 Geo вот случайно увидел /topic/93519&hl=%40%40identity#683475 что - этот поток - продолжение того? или сам по себе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 14:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1674492]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 389ms |

| 0 / 0 |
