Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с рекордсетом
|
|||
|---|---|---|---|
|
#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?fid=60&startmsg=32537781&tid=2169459]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 341ms |

| 0 / 0 |
