Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
ВнизСохранение изменений в бд. Найти похожие ветки
← →
ph (2002-04-03 12:01) [0]Как сохранить изменения в бд сразу же после того как была изменено значение ячейки DBGrid (пока выделена эта ячейка)? Если вставлять Table1.Post в Table1field1Change, BGrid1Columns0UpdateData, то программа зацикливается и возникает ошибка Stack overflow.
← →
Anatoly Podgoretsky (2002-04-03 12:10) [1]Делай в OnExit
Только у тебя пропадает возможность отменить редактирование, не любишь ты пользователя или ты применяешь еще и дополнительные методы для это цели?
← →
Johnmen (2002-04-03 12:11) [2]OnSetText
А вообще, зачем это надобно-то ?
← →
ph (2002-04-03 12:15) [3]отменять редактирование не нужно.
OnExit не подходит - надо чтобы изменения сохранялись по мере работы с бд
на OnSetText вообще не реагирует никак.
← →
Johnmen (2002-04-03 12:19) [4]>...надо чтобы изменения сохранялись по мере работы с бд ...
А зачем же сохраниять изменение значения каждого поля ???!!!
← →
Anatoly Podgoretsky (2002-04-03 12:22) [5]Странное желание сохранять частично законченное редактирование, хуже глюка не увидеть. Так ты и сохраняй в On ColExit, а не всего Grid
← →
ph (2002-04-03 12:23) [6]это нужно чтобы сразу расчитывался Footer, а не после перехода на другую строку
← →
ph (2002-04-03 12:27) [7]OnColExit тоже не работает
← →
Aleksandr (2002-04-03 12:35) [8]Ну-ну... А по какому признаку у тебя считается, что редактирование закончилось?
← →
ph (2002-04-03 12:41) [9]признак: редактирование закончилось - хорошо бы если б было Table1field1Change, BGrid1Columns0UpdateData, но программа зацикливается.
← →
Aleksandr (2002-04-03 13:03) [10]Млин, я не про это... Вот пишет у тебя кто-то в ячейке, пишет, пишет... И когда считать, что он писать закончил и надо сохранять? После каждого введенного символа, что ли?
← →
ph (2002-04-03 13:08) [11]После нажатия Enter
← →
Aleksandr (2002-04-03 13:19) [12]Ну тогда можешь делать так:
добавляешь метод на нажатие клавиши у гриды:
DBGrid.OnKeyDown:
if (Key=VK_Return) and (Table.State IN [dsInsert,dsEdit]) then begin
Table.Post;
// и поищи в хелпе, чего там надо отправить гриде, чтобы она из состояния Editing вышла, если сама не выйдет
Key:=0
end;
Вариант 2 : создать Action с тем же кодом:
if Table.State in [dsInsert,dsEdit] then
Table.Post;
А вообще, это моветон - разрешать редактировать прямо в гриде... Обычно для редактирования юзают модальные формы. Ведь грида далеко не все типы данных могет отображать.
← →
Aleksandr (2002-04-03 13:20) [13]ЗЫ
В смысле, Экшн создать с этим кодом и шорткутом Enter...
← →
Johnmen (2002-04-03 13:35) [14]>Aleksandr ©
>...моветон - разрешать редактировать прямо в гриде...
Позволю себе не согласиться !
Могу привести кучу примеров, когда редактирование с помощью грида и только его решает задачу !
← →
Aleksandr (2002-04-03 13:41) [15]Johnmen ©
Позволю себе с Вами согласиться, что простенькие задачки можно решать и одной гридой... Но приведите пример, когда без гриды задача не решается? Я таких не встречал :)
← →
Johnmen (2002-04-03 13:56) [16]>Aleksandr © Special for your !
Вводим содержание некоего документа, типа расходная накладная.
Ввели шапку и начинаем вводить содержимое.
Для каждой записи указываем наименование, количество, цену.
И вот вопрос на засыпку : сколько тебе понадобится времени,
набивая каждую запись из модальной формы, если наименований - 100 шт. , накладных - 50 шт., а выделено тебе на это - максимум 30 мин. ?
← →
Aleksandr (2002-04-03 14:05) [17]Johnmen ©
Совершенно немного... В процесс добавляется два нажатия клавиш: Insert - для вызова окна добавления и Enter - для сохранения... Переход по полям - те же табуляторы; удобства в том, что выпадающие списки можно без перехода на мышь выбирать...
← →
deleon (2002-04-03 14:07) [18]Сделать свой грид на основе TDbGrid и добавить ему событие OnCellExit :-)))
← →
Erlend (2002-04-03 14:13) [19]Просто при выходе из модальной формы пишешь:
if ((Table1.State in [tsEdit]) or Table1.Modified then Table1.Post;
← →
Johnmen (2002-04-03 14:19) [20]>Aleksandr © :
1. А выпадающие списки и так без мыши - <Alt>+<стрелка вниз/вверх> ...
2. У тебя лишних как минимум 2 нажатия - Insert и Enter
а также лишняя форма...
← →
Aleksandr (2002-04-03 14:26) [21]Johnmen © :
1. Да, но всегда ли такое сочетание удобно?
2. Ну, сударь, они в гриде заменены на нажатия стрелок... А лишняя форма погоды не сделает - если один раз forms был подключен, дальше много памяти не убудет...
← →
Johnmen (2002-04-03 15:03) [22]>Aleksandr © : Я вот чего не могу понять - если задачу можно решить меньшими телодвижениями и меньшими ресурсами, то почему же так не делать ?
← →
Aleksandr (2002-04-03 15:21) [23]Johnmen © :
1. Критерий надежности. Если пользователь, заполня только первую колонку, случайно нажмет стрелку вверх, и останутся истчо обязательные для заполнения колонки?
2. А как в гриде будут отображаться данные блобовых типов?
← →
ph (2002-04-03 15:31) [24]Спасибо, Aleksandr
DBGrid.OnKeyDown:
if (Key=VK_Return) and (Table.State IN [dsInsert,dsEdit]) then begin
Table.Post;
Key:=0
end;
работает. А как сделать если есть колонка CheckBox-ов и надо обрабатывать клики мыши таким же образом?
← →
ph (2002-04-03 15:39) [25]уже разобрался. Всем спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c