Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-80837
Андрей Брусов
2002-04-04 09:13
2002.04.25
Языковые драйверы в BDE


3-80758
Sergant
2002-04-01 16:25
2002.04.25
Вопросы по MS SQL 6.5


14-81058
Somebody_
2002-03-20 11:31
2002.04.25
новый трейд ПРО ЭТО.....


3-80782
Mikeee
2002-04-03 16:21
2002.04.25
Что бы это значило :


1-80923
K@tusha
2002-04-11 13:33
2002.04.25
Перевеси цветную палитру в черно-белую





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский