|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
Существует процедура, в которой в зависимости от значения входного параметра nvar открываем удалённые вьюхи. Затем эти вьюхи используются в вызываемой далее форме, но так как в итоге создаётся только одна вьюха, то во всех четырёх вариантах присваиваем создаваемой вьюхе один и тот же алиас. с ним мы будем работать в форме Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
ПОля, указанные во вьюхе выводим на вызываемой форме. понадобилось одно поле редактировать и сохранять в БД создал кнопку на форме в метод Click которой записал код Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Во вьюхах на закладке Update Criteria поставил галочку Send SQL Updates выделил в качестве ключей поля, указал, что столбец field1 и filed2 (в зависимости от используемой в представлении таблицы) можно редактировать Но всё равно возникли проблемы с обновлениями таблиц. Причём tableupdate возвращает .T. (появляется сообщение, что новое значение сохранено) но на самом деле значения в любой таблице (их четыре по числу вариантов значения параметра nvar) не изменяются Что я делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 11:45 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
А каким образом вызыватся метод Click()? Если просто "нажали кнопку", то значения параметров будут пустыми. Как следствие, значение полей не изменится. Для справки Изменение полей текущей записи выполняется при помощи команды REPLACE. Например, Код: sql 1.
Если Вам надо узнать имя файла SCX, то этом можно сделать при помощи функции SYS(1271) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Наконец, если указать в свойстве ControlSource объекта соответствующее поле таблицы, то модификация поля будет выполняться автоматически при изменении объекта на форме. В Click() кнопки надо будет всего-лишь дать команду TableUpdate(). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 13:57 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
малость не полно написал. код с tableupdate находится в отдельной процедуре, которая вызывается из Click с нужными параметрами. Так-то при отладке я вижу, что параметры не пустые (да хоть бы и пустые, тогда бы пусть бы null записывался бы) В ControlSource прописан алиас (v_workdata), который собственно ссылается не на таблицу, а на вьюху. Непосредственно имя вюьхи (чтоб автоматом обновляло) прописать не могу, так как там может использоваться четыре разных представления. У которых обновляемые поля имеют разное название. Replace думаю тут не повлияет на результат, так как после gather memvar, если открыть v_workdata в нужных полях стоят новые значения. А вот после TABLEUPDATE, несмотря на то, что вернулось .Т. в таблицах на сервере, на которые ссылаются вьюхи, спрятанные за алиасом v_workdata изменений никаких нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 14:45 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
Mr.Fontaineмалость не полно написал. код с tableupdate находится в отдельной процедуре, которая вызывается из Click с нужными параметрами. Так-то при отладке я вижу, что параметры не пустые (да хоть бы и пустые, тогда бы пусть бы null записывался бы) В случае пустых параметров в Вашем коде ни один IF не выполняется. Как следствие, нет никаких модификаций. Mr.FontaineReplace думаю тут не повлияет на результат, так как после gather memvar, если открыть v_workdata в нужных полях стоят новые значения. А вот после TABLEUPDATE, несмотря на то, что вернулось .Т. в таблицах на сервере, на которые ссылаются вьюхи, спрятанные за алиасом v_workdata изменений никаких нет. 1. У Вас View создан на основе таблиц DBF или на основе других View? Сами исходные таблицы DBF находятся в каком-либо режиме буферизации? Т.е. не получается ли сброс буфера не в исходные таблицы, а в другой буфер, который надо дополнительно сбросить? 2. Можете привести листинг View из окна SQL дизайнера View? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 14:57 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
1. таблицы на сервере MS SQL. Если буферизация определяется Код: sql 1. 2.
то я эти строчки писал перед scatter memvar не помогло. потом я их удалил. Может там какой парметр надо другой ставить, а не 5? 2. В листинге ничего интересного нет. Там условия с закладки Update Criteria не отображаются SELECT *; FROM dbo.first_plan first_plan; WHERE first_plan.date = ?pp470; ORDER BY first_plan.p083, first_plan.p015 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 15:58 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
В листинге итересует не сам запрос, а настройки DBSetProp(), чтобы не переспрашивать факт установки разных птичек и галочек в окне дизайнера View. Или у Вас версия младше VFP9? Кстати, раз речь идет о MS SQL, то попробуйте в профайлере MS SQL отловить какая команда передается по команде TableUpdate(). И еще, приведенный код метода Click() - это все, что есть? Может, Вы даете команду TableUpdate() не на ту рабочую область? Попробуйте явным образом указать рабочую область примерно так Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 16:16 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
ок. буду пробовать. завтра отпишусь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 16:27 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
так-то работал не в 9-й версии. FoxPro 7 рабочая для этой программы. Посмотрел файл database.dbc с помощью девятки. Получил листинг представления: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
Гляжу вроде всё нормально. Поля обновляемы, в свойствах вьюшки SendUpdates стоит true А при выполнении TABLEUPDATE профайлер на SQL-сервере молчит.... Причём результат выполнения TABLEUPDATE возвращает true Никак не могу понять, почему так происходит ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2012, 07:07 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
Может быть проблема в том, что вьюшка называется database!v_fisrt_plan, а я обращаюсь к ней как v_workdata? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2012, 07:18 |
|
Проблема с tableupdate
|
|||
---|---|---|---|
#18+
По описанию похоже на то, что команда TableUpdate() дается в другой рабочей области. Попробуйте явно указать где именно должен быть выполнен сброс буфера. Код: sql 1. 2. 3. 4. 5. 6.
PS: Название объекта никакой роли не играет. Обращение идет либо по алиасу рабочей области, либо по таблице, открытой в текущей рабочей области. Весь вопрос в том, какая рабочая область текущая на момент подачи команды TableUpdate(). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2012, 14:32 |
|
|
start [/forum/topic.php?fid=41&fpage=53&tid=1583518]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 408ms |
0 / 0 |