|
|
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
Вопрос очень часто разбирался, но ответов я не нашел. У меня на форме есть Grid заполненный локальным представлением vie. Есть кнопка новая строка на ней такой код PUBLIC nRecn SELECT vie nRecn =RECNO() GO BOTTOM in vie APPEND BLANK IN vie thisform.grid2.column1.text1.Value = NewID('vie') = TABLEUPDATE(.T.) Thisform.grid2.Refresh thisform.grid2.SetFocus() Строчка thisform.grid2.column1.text1.Value = NewID('vie') присваивает новое значение уникального ключа. На представлении стоит 3 буферизация. После нажатия на кнопку появляется новая строка с уник. ключом но как только я перехожу на другую появляется ошибка Cannot insert an empty row from a view into its base table(s) И ещё, при добавлении строки уник. ключ надо добавлять в представление или в таблицу по которой построено представление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:18 |
|
||
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
Уж сколько раз твердили миру... Грид ничем не может быть заполнен по определению. Он ничего в себе не хранит. Представление тоже ничего в себе не хранит. Это всего лишь SQL запрос. Все изменения надо вносить в исходные таблицы. Что, собственно, фокс и говорит в сообщении об ошибке. То есть вместо строки thisform.grid2.column1.text1.Value = NewID('vie') должно быть что-то вроде Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 15:17 |
|
||
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
Спасибо за объяснение. Я сделал вот так. PUBLIC nRecn SELECT disp3 nRecn =RECNO() GO BOTTOM in disp3 APPEND BLANK IN disp3 REPLACE code3 WITH NEWID('VIE'), code WITH 0 = TABLEUPDATE(.T.) Thisform.Refresh() где disp3 основная таблица. Но появилась проблема если нажимать на кнопку новая строка то строка не появляется, а появляется только после того как закрою форму и открою её снова. Как это исправить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 12:14 |
|
||
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
thisform.grid1.setfocus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 12:17 |
|
||
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
sanya_tirthisform.grid1.setfocus Не помогло, строка появляется только после перезапуска формы. Может кто глянет в чем у меня ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 12:53 |
|
||
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
Добавляешь в таблицу - грид на вьюхе. и чегой-то этой записи показываться ;-) REQUERY('VIE') поможет отцу русской демократии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 15:49 |
|
||
|
Добавление новой строки
|
|||
|---|---|---|---|
|
#18+
Это надо самые азы объяснять. Физически Local View - это результат работы команда Select-SQL. Т.е. это некая выборка из исходной таблицы, которая записывается в некоторую временную таблицу. Другими словами, Local View - это НЕ исходная таблица с наложенным фильтром. Это физически ДРУГАЯ таблица. Однако при определенных настройках FoxPro может взять на себя задачу синхронизации данных в Local View и в исходной таблице. Т.е. изменения, внесенные в Local View будут автоматически перенесены в исходную таблицу. Эти настройки делаются на закладке Update Criteria в дизайнере Local View. В данном случае принципиально важными являются следующие настройки: Переключатель "Send SQL Update" - будет ли вообще запущен процесс переноса данных из Local View в таблицу-источник Столбец под иконкой ключа - это поле или набор полей по значению которых будет происходить поиск записи в таблице-источнике при модификации данных. Столбец под иконкой карандаша - это те поля, значения которых будут обновлены значениями из Local View. Если необходимо, чтобы изменения, сделанные в ключевом поле Local View также попали в таблицу-источник, то для ключевого поля надо будет поставить птички в обеих колонках. И под иконкой ключа и под иконкой карандаша. Local View всегда находится в режиме оптимистической буферизации. По умолчанию, в строковой (3), но можно переключить в табличную (5). Отменить режим буферизации или переключиться в пессимистическую буферизацию для Local View - невозможно. Соответственно, процесс синхронизации (переноса изменений) с таблицей источником происходит в момент сброса буфера. Для строковой буферизации: При попытке перехода на другую запись При попытке закрытия Local View По команде TableUpdate() Для табличной буферизации - только по команде TableUpdate() и никак иначе. Однако следует понимать, что после операции сброса буфера в Local View содержимое этого самого Local View никак не изменится. Мы же не его меняли, а всего-лишь переносили данные из Local View в таблицу-источник. Чтобы обновить содержимое Local View свежими данными из таблицы-источника используется специальная функция Requery("MyLocalView") которая, по сути, выполняет перезапрос. Заново выполняет команду Select-SQL для наполнения Local View. Все старые данные, содержащиеся в Local View при этом теряются. ===================== По поводу NewID() Подобные функции записывают в хранимых процедурах контейнера базы данных (Stored Procedure), поскольку они напрямую связаны с целостностью базы данных. При этом отпадает необходимость прописывать путь доступа к этим процедурам или подключать их через SET PROCEDURE. Поскольку это функции генерации значений по умолчанию, то вызов этой функции делается в свойстве Default соответствующего поля. Подробнее об этом свойстве читай здесь Значение по умолчанию (Default) Для Local View также можно настроить значение Default. В конструкторе Local View самая первая закладка "Fields" внизу в середине есть кнопка "Properties". Генерить NewId в привязке к собственно Local View (в примере - по алиасу Local View) - бессмысленно. Ведь значение, которое отображается в Local View берется из таблицы-источника. Значит, надо вызвать эту функцию с параметром - таблицы-источника. Тогда создание новой записи примет примерно такой вид: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 16:23 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33895050&tid=1591075]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 344ms |

| 0 / 0 |
