|
|
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
На Grid1.Column2.Header1.Text1 прописал такой код LPARAMETERS nKeyCode, nShiftAltCtrl SELECT disp1 ON ERROR * IF nKeyCode = 13 NODEFAULT IF this.ReadOnly = .T. this.ReadOnly = .F. this.BackColor= RGB(104,166,179) this.ForeColor= RGB(128,0,128) this.FontBold = .T. ELSE If MESSAGEBOX("Сохранить изменения?",4+32,"Сохранение") = 6 = TABLEUPDATE(.T.) IF TABLEUPDATE()=.T. MESSAGEBOX('сохранено') endif this.BackColor= RGB(255,255,255) this.ForeColor= RGB(0,0,0) ENDIF this.ReadOnly = .T. ENDIF endif Чтобы по нажатию на enter вводились или изменялись данные ,по второму нажатию они сохранялись. Но проблема в том что пока форма открыта изменнённые данные видны ,если закрыть и открыть форму то изменённые данные иногда сохраняются , а иногда нет,т.е. ячейка остаётся пустой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 09:47 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Вот здесь надо проверить, что вернула ф-ия, а так же хорошо использовать все параметры ф-ии включая алиас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 09:55 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
1. Если хочешь изменять содержимое ячейки Grid-а, то зачем выдумывать велосипед. Прямо в Grid-е и изменяй. И обновляешь данные. 2. Если изменяются все записи этого поля, то лучше наверное вызывать новую форму при Click-е на заголовок колонки Grid-а. И при нажатии OK этой новой формы производишь изменения в таблице и соответственно в Grid-е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 10:00 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
А как именно проверить, я понимаю что через Debuger, но как ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 10:08 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
А при чем тут дебагер? Это обычная функция, возвращающая огическое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 10:55 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
PaulWist Код: plaintext Вот здесь надо проверить, что вернула ф-ия, а так же хорошо использовать все параметры ф-ии включая алиас. Я проверяю IF TABLEUPDATE()=.T. MESSAGEBOX('сохранено') endif и всегда при выполнении возникает надпись ('сохранено').Но после нового открытия формы новых значений нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 11:02 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. PaulWist Код: plaintext Вот здесь надо проверить, что вернула ф-ия, а так же хорошо использовать все параметры ф-ии включая алиас. Я проверяю IF TABLEUPDATE()=.T. MESSAGEBOX('сохранено') endif и всегда при выполнении возникает надпись ('сохранено').Но после нового открытия формы новых значений нет. Так это уже совсем другая проверка... Вот если бы Вы проверили: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 11:13 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
Станислав С МашкоБ.В. PaulWist Код: plaintext Вот здесь надо проверить, что вернула ф-ия, а так же хорошо использовать все параметры ф-ии включая алиас. Я проверяю IF TABLEUPDATE()=.T. MESSAGEBOX('сохранено') endif и всегда при выполнении возникает надпись ('сохранено').Но после нового открытия формы новых значений нет. Так это уже совсем другая проверка... Вот если бы Вы проверили: Код: plaintext 1. 2. 3. Да я и так проверил выскакивает ('сохранено') но значение после перезапуска не появляется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 11:20 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
выхожу на асфальт в лыжи обутая, то ли лыжи не едут, то ли .... = TABLEUPDATE(.T.) IF TABLEUPDATE()=.T. это че за тайное шаманство? один разочек это делать нужно да и что за тайный смысл отслеживать количество нажатий ентера? наверное азбука морзе пишется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 11:37 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
= TABLEUPDATE(0,.F.,"Data_head"). Он вам изменения может не в той таблице сохраняет. Вот и все. Укажите алиас. И второй параметр тоже поставьте какой надо. А вообще действительно, прямо в гриде редактировать не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 14:41 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
Solmyr= TABLEUPDATE(0,.F.,"Data_head"). Он вам изменения может не в той таблице сохраняет. Вот и все. Укажите алиас. И второй параметр тоже поставьте какой надо. А вообще действительно, прямо в гриде редактировать не пробовали? Послушав советов написал я такое Grid1.Column2.Header1.text1.keypress= LPARAMETERS nKeyCode, nShiftAltCtrl SELECT disp1 ON ERROR * IF nKeyCode = 13 NODEFAULT IF this.ReadOnly = .T. this.ReadOnly = .F. this.BackColor= RGB(104,166,179) this.ForeColor= RGB(128,0,128) this.FontBold = .T. ELSE If MESSAGEBOX("Сохранить изменения?",4+32,"Сохранение") = 6 = TABLEUPDATE(0,.T.,"disp1.name") this.BackColor= RGB(255,255,255) this.ForeColor= RGB(0,0,0) ENDIF this.ReadOnly = .T. ENDIF endif Но вводимые данные то отображаются, то нет. А насчет прямого обращения через Grid, я что-то не понял, а я как обращаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 00:52 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
Читай посты внимательнее и синтаксис посмотри ф-ии TableUpdate Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 09:34 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
PaulWistЧитай посты внимательнее и синтаксис посмотри ф-ии TableUpdate Код: plaintext 1. 2. 3. 4. 5. 6. 7. Спасибо , я переписал так LPARAMETERS nKeyCode, nShiftAltCtrl SELECT disp1 ON ERROR * IF nKeyCode = 13 NODEFAULT IF this.ReadOnly = .T. this.ReadOnly = .F. this.BackColor= RGB(104,166,179) this.ForeColor= RGB(128,0,128) this.FontBold = .T. ELSE If MESSAGEBOX("Сохранить изменения?",4+32,"Сохранение") = 6 IF TABLEUPDATE(0,.T.,"disp1") MESSAGEBOX('OK') ELSE MESSAGEBOX('BAD') endif this.BackColor= RGB(255,255,255) this.ForeColor= RGB(0,0,0) ENDIF this.ReadOnly = .T. ENDIF endif Не помогло, я просмотрел таблицу после закрытия формы данные в ней присутствуют, но если занова запустить форму то данных втаблице нет. Если кому несложно посмотрите (создайте несколько строк и заполните их через enter) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 19:05 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
1. Восстановить ON ERROR без всяких звездочек 2. Сюда, результаты Код: plaintext 3. Зачем эта конструкция Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 10:02 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
PaulWist1. Восстановить ON ERROR без всяких звездочек 2. Сюда, результаты Код: plaintext 3. Зачем эта конструкция Код: plaintext ?Cursorgetprop('Buffering','disp1') возвращает 5 т.е таблица в режиме оптимистической буферизации. Может надо как-то по другому вводить данные. IF this.ReadOnly = .T. это надо для проверки , чтобы пользователь не ввел случайный стмвол ляпая по клавиатуре. Помогите очень срочно надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 10:25 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
У любого визуального объекта FoxPro есть собственный буфер. Т.е., хотя и кажется, что введенная информация сразу попадает в поле таблицы, но на самом деле это не так. Сначала, ты набираешь текст в объекте на форме. Далее, по определенному событию, происходит сброс набранного текста из буфера объекта в связанное с этим объектом поле таблицы. Применительно к ячейке Grid этим событием является, в том числе, и нажатие клавиши Enter. Однако первой же командой NODEFAULT ты говоришь FoxPro: оставь этот буфер где он есть. В самой ячейке. Не надо его переписывать в поле таблицы. Дальнейший TableUpdate() уже ничего не меняет. Просто потому, что в буфер таблицы содержимое экранной ячейки просто не попало. Нечего сбрасывать из буфера таблицы. В данном случае тебе надо озаботится принудительной записью текста, введенного в экранной ячейке в поле таблицы. Это можно сделать прямой командой REPLACE примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А почему все-таки иногда информация попадала? Потому, что не только нажатие Enter приводит к записи информации из буфера экранной ячейки в поле таблицы. Собственно, любой способ выхода из ячейки (почти) приводит к подобному сбросу. Повторное нажатие Enter как раз и приводило к записи информации. Хотя, сама концепция организации редактирования не очень хорошая. Слишком не очевидная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 12:45 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Хотя, сама концепция организации редактирования не очень хорошая. Слишком не очевидная. Я полностью согласен . Но Программа пишется для диспетчира(женщина)45-50лет. И ей надо как было в старой DOS-программе , я чтобы ввести что-то новое более удобное полдня ей объясняю , показываю что-так лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 04:06 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. ВладимирМ Хотя, сама концепция организации редактирования не очень хорошая. Слишком не очевидная. Я полностью согласен . Но Программа пишется для диспетчира(женщина)45-50лет. И ей надо как было в старой DOS-программе , я чтобы ввести что-то новое более удобное полдня ей объясняю , показываю что-так лучше. С моей точки зрения, простое решение для пользоватиеля - что ввел в Grid, то и записалось. Никаких "дурацких" вопросов и сообщений. Никаких "подсветок". Глупости это все. Никто на них внимания не обращает, особенно "45-50 лет". С точки зрения пользователя, что он видит на экране, то и должно быть сохранено в таблице. Это логично и понятно. А когда начинается: нажмите эту клавишу, дождитесь сообщения, прочтите сообщение, примите решение - у пользователя голова кругом и он не знает что делать. Просто в ступор впадает. Для этой логики все проще. В событии BeforRowColChange, если переход на другую строку (свойство InList(Grid.RowColChange,1,3)=.T. ), то просто предпринимаем попытку сброса буфера по TableUpdate() безо всяких "дурацких" вопросов. А вот если НЕ удалось сбросить буфер, то NODEFAULT и "плакат" с сообщением об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 12:01 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
[quot ВладимирМС моей точки зрения, простое решение для пользоватиеля - что ввел в Grid, то и записалось. Никаких "дурацких" вопросов и сообщений. Никаких "подсветок". Глупости это все. Никто на них внимания не обращает, особенно "45-50 лет". Для этой логики все проще. В событии BeforRowColChange, если переход на другую строку (свойство InList(Grid.RowColChange,1,3)=.T. ), то просто предпринимаем попытку сброса буфера по TableUpdate() безо всяких "дурацких" вопросов. А вот если НЕ удалось сбросить буфер, то NODEFAULT и "плакат" с сообщением об ошибке.[/quot] Наверное вы правы, если я правильно понял то код должен быть таким Grid.BeforRowColChange LPARAMETERS nColIndex if INLIST(thisform.grid1.RowColChange,1,3)=.T. = TABLEUPDATE(0,.T.,"disp1") thisform.grid1.Refresh ELSE MESSAGEBOX("ошибка") ENDIF endif но текст не сохраняется,т.е. из буфера он исчезает. Не согли бы рассказать как правильно обрабатывать такие случаи. Буду очень признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 12:56 |
|
||
|
Сохранение
|
|||
|---|---|---|---|
|
#18+
Здесь та же проблема, что и в начальном вопросе. В событии BeforRowColChange() содержимое ячейки еще не переписано в буфер поля таблицы. Поэтому надо сделать это явно. Перенести код в AftreRowColChange() нельзя, поскольку в случае проблем сохранения надо будет блокировать выход из записи, а в AfterRowColChange() это делать уже поздно. Код будет примерно таким Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Разумеется, код достаточно условный, но, думаю, дальше доработаешь по месту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 14:00 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34111064&tid=1590187]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 410ms |

| 0 / 0 |
