Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Есть такой обработчик на событие потери фокуса textbox-a, в кот обновляется рекордсет и в случае возникновеня ошибки (почему она может возникнуть не столь важно) нужно отменить обновление. Проблема в том, что если потом не закрыть рекордсет и не открыть снова, то еще раз обновить его и сохранить изменения, кот могли быть в других полях не получается, так выдается опять эта ошибка, которую я ведь уже обработала ранее. Как избежать закрытия и открытия снова рекордсета? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 00:19 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
хочу внести поправку - закрытие рекордсета здесь исключается. Тогда вопрос непосредственно по поводу того: почему не удается сохранить изменения, сделанные в других полях после этой ошибки. Почему при Update она возникает снова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 01:07 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Текст ошибки можно увидеть? Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 01:25 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
текст ошибки из моего триггера такой: Изменение невозможно, так как имя клиента уже используется в других документах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 01:39 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Это не от недоверия к вам(с)Какой-то наш фильм. Но все-таки желательно оригинал. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 01:46 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
я не пойму какой оригинал нужен... сообщение об ошибки выдается в случае модификации данных в конкретном поле, если код данного клиента есть еще и др таблице. Текст триггера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 10:46 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
irinkaвыдается опять эта ошибка, которую я ведь уже обработала ранее Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 11:00 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Processor Clear я попробывала, но он не помого. Дело в том, что если я изменяю значение в поле klient_name, а его нельзя изменять (см текст триггера, когда именно нельзя), потом после сообщения и возврата старого значения я могу пересохранить и выйти, закрыв рекордсет. Потом, когда я войду снова и изменю др поля, я смогу сохранить изменения. А вот если изменение поля klient_name (при срабтывании триггера и возврата старого значения) и изменение затем др полей происходит без закрытия рекодсета, а сразу, то уже почему-то триггер воспринимает как модификацию поля klient_name и сохранить не дает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 11:21 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
текст, кот сейчас: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 11:25 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
А если ошибка будет с другим номером ? Да и сообщение об ошибке очень информативное :-) Может лучше вместо Error написать err.Description + CStr(err.Number) Да и у DataEnvironment есть тоже коллекция Errors может стоит там посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 13:25 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду текст ошибки на алглийском. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 13:25 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
текст только на русском, так как, этот текст из моего триггера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 15:23 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Alviga данная обработка на клиенте предназначена только для этого номера ошибки, если будут появляться др ошибки, пусть выдаются системные сообщения, я им не запрещаю, поэтому др я способ мне не нужен пока, спасибо. Мне нужно найти причину почему при одно случае сохраняются изменения, а при др опять эта ошибка. Более подробно см выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 15:27 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
авторА вот если изменение поля klient_name (при срабтывании триггера и возврата старого значения) и изменение затем др полей происходит без закрытия рекодсета, а сразу, то уже почему-то триггер воспринимает как модификацию поля klient_name и сохранить не дает посмотри что в этом случае у тебя содержит рекордсет. Возможно что это, старое значение, которыое и вызывает ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 15:59 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
проверила - значение то, кот нужно, т е после ошибки изменения отменились и вернулось старое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:39 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Кстати, на счет триггеров. В матчасти сказано, что "Триггер воспринимает любой апдейт поля как изменение, даже если новое значение идентично предыдущему." Поэтому , нижно менять логику. Либо клиента либо триггера. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:45 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
это я знаю, только есть одно НО сообщение уже выдалось и мы сделали CancelUpdate и сохранили. а теперь уже это поле никак не изменяли, а поменяли др поля и сохранить не удается а вот если выйти и зайти снова, поменять др поля и сохранить, то все сохраняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:49 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
и при этом, когда мы меняем др поля, мы же тоже на кнопку ОК вешаем update рекордсета и ничего нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:50 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
если убрать эту строку K_name.Text = MainDataEnvironment.rscmdKlientsNew.Fields("klient_name").Value то все сохраняется нормально, но проблема в том, что изменения в textbox-e не отменяются и пользователь может подумать, что оно таким и останется, а на самом деле, если он выйдет, а потом зайдет снова, там будет первоначальное значение, кот он пытался изменить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 22:37 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Сори, туда попала лишняя строка, ну и чтобы не отвлекать внимание лишние условия пока тоже уберу Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 22:41 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Чесно, я уже ничего не понимаю. ЗА день сделал 6 попыток вьехать в происходящее и с позором отступил. Кто нибудь обьясните мне в чем все таки дело, если сами поняли? Кто после чего выбрасывает или не выбрасывает? Вот эта строка Код: plaintext вообще ни к чему никагого отношения не имеет. Главная проблема ведь это ошибка из триггера? Барышня, вы обьясняете настолько сумбурно что я скоро с катушек сьеду от непонимания устройства вселенной(с)ЛП Или я к вечеру уже отупел. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 22:56 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
прошу прошения объясняю я неочень... но на самом деле, очень сложно понять чужую программу и причину, почему не работает если не видеть всех тонкостей, а мне трудно понять что именно нужно показать Вам, что все стало ясно и мне все время кажется что мы ходим вокруг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 23:05 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
не буду мучить, вопрос снимается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 23:29 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Спокойствие, только спокойствие. Без паники, разберемся. По крайней мере постараемся. Начнем все сначала только медленно и четко. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 00:33 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Честно говоря, тоже ничего не понял.Так что Магнус, ты не одинок :) Особенно не понял, для чего откатывать транзакцию дважды. Сначала в тригере, а потом через рекордсет. Вспоминается старый анекдот про еврея на нудистком пляже."Рабинович или снимите крест, или оденьте трусы" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 01:07 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Значит, так. Триггер проверяет не ту таблицу в которую идет вставка а другую, так? Только немного извращенным способом. Лучше так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Что меня сбивает с толку так это ремарки вроде "вышли" "сохранили". Нифига не понимаю, откуда вышли и чего сохранили? авторсообщение уже выдалось и мы сделали CancelUpdate и сохранили. Сообщение выдалось - т.е. транзакцию откатили, зачем то сделали CancelUpdate и "сохранили"... что? Как ? Куда? Судя по коду, ничего кроме выхода из процедуры не происходит. Начнем с простого. Что нужно сделать? Пытаемся сделать апдейт, триггер проверяет и выдает ошибку. Кстати, почему проверка делается по ID? Вы же имя меняете? Не понимаю логику этого триггера. Вы проверяете не изменяется ли имя клиента с id уже существующим в другой таблице. У меня нездоровое ощущение что там должен быть FK. В таком случае вы его никогда не измените. Или он будет с другим ID, тогда вообще не вижу никакой логики в этой базе и в этом триггере. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 02:02 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
автор Кстати, почему проверка делается по ID? Вы же имя меняете? есть таблица tklient, в кот klient_id - это PK, klient_name и тп др таблица tdocument связана с tklient по полю klient_id - FK Соот-но, если пытаемся изменить значение поля klient_name в таблице tklient, а код для этого klient_name есть в табл tdocuments, тогда триггер откатывает транзакцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 17:09 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
я готова ответить на др вопросы, чтобы прояснить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 19:51 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Так я о том и говорю! Зачем он откатывает? Если есть FK так добавьте каскадное обновление и выкиньте триггер нафик. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 20:20 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Не нужно каскадного обновления. Нужно наоборот запретить обновление, если такой клиент есть в др таблице. Триггер верный - Вы не на том акцентируете внимание. Нужно именно в клиенте обработать это системное так сказать для клиента сообщение, кот исходит от триггера. Если триггер не делать придется всю проверку - есть ли такой клиент в др таблице- делать на VB, я же решила сделать это в SQL Server, а на VB просто перехватить сообщение от триггера и вернуть в TextBox старое значение тут же после того, как клиент нажмет ОК в сообщение от триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2004, 23:39 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Фух. Уже что то. Вы хотите запретить обновление. Наконец-то я что то начинаю понимать. В рекордсете могут быть обновления разных строк или только одна? Если одна то делать это нужно через Connection.Execute Если много, то одна неверная запись всегда будет забивать вам весь батч. Если триггер откатывает транзакцию то вызывать CancelUpdate не нужно. Кстати, его тоже подправьте как я показал. В этом случае следует использовать Inner Join. Далее. Вы хотите сохранить изменения в других полях одновременно отменив изменение на имя клиента если оно указано в апдейте и такой клиент уже существует в другой таблице так? Теперь с ошибкой. Как уже сказали, у ДЕь есть своя коллекция ошибок. Я им особо не пользуюсь, поэтому не уверен будет ли ошибка там, если нет, то в коллекции ошибок соеденения. Найдите в какой и очищайте ее. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2004, 00:08 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
на форме для отображения значений полей использованы TextBox, следовательно обрабатывается на данный момент только одна текущая запись из рекордсета и следовательно обновляется именно она. теперь... я не поняла про обновление, как это делается через Connection.Execute, это заместо строки MainDataEnvironment.rscmdKlientsNew.Update? автор Если триггер откатывает транзакцию то вызывать CancelUpdate не нужно. после отката посредством триггера в рекордсете все равно пока старое значение, следовательно надо сделать обновление его через Requery? Если Вы это имеете ввиду, то тогда там есть другая проблема, кот я опишу, если именно это и имелось ввиду. автор Далее. Вы хотите сохранить изменения в других полях одновременно отменив изменение на имя клиента если оно указано в апдейте и такой клиент уже существует в другой таблице так? я хочу только отменить изменения на имя, сохранять не надо, пока пользователь сам не захочет этого сделать. автор Теперь с ошибкой. Вы имеете в виду какую ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2004, 00:34 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
Если рекордсет содержит несколько записей и в них были сделаны изменения то колигество обновляемых записей зависит уже от типа курсора, если он динамический то одна, а если статический или keySet, то все имеющие изменения. Апдейт одной строки через соеденение Dim cn as ADODB.COnnection Set cn= New ADODB.Connection cn.OPen "Ваша строка подключения" Cn.Execute "Update MyTable Set Filed1='" & text1.text & "' , field2='" & Text2.Text & "'" cn.Close Set cn= Notring Так же можно использовать и уже открытое соеденение самого DE. авторследовательно надо сделать обновление его через Requery? ДА. Или Refresh. авторВы имеете в виду какую ошибку? Из триггера. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2004, 00:52 |
|
||
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#18+
А в табличке deleted точно одна запись ? Потому как из приведенного кода это совсем не следует. Какае данные содержит рекрдсет ? Может есть другое решение вашей проблемы и на ндо закикливаться на начальном способе. Можно задачу с самого начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2004, 12:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2169459]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 346ms |

| 0 / 0 |
