Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Доброе время суток. Значит, элементарная ситуация - есть датасет, есть грид, по гриду бродит юзер. Заходит в запись, меняет, двигается дальше. В момент движения происходит Post, на каковой хочется повесить диалог вида "Сохранить? Да/Нет/Отмена". Сделал так: procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet); begin Case MessageDlg('Save changes?',mtConfirmation,[mbYes, mbNo, mbCancel],0) of mrNo:DataSet.Cancel; mrCancel:Abort; end; end; При нажатии на No пишет "Not in edit mode". Ставил точку останова, проверял state - dsEdit. Если вместо TIBDataset использовать TTable BDE, сообщение имеет вид "Key violation". Что за притча? И еще, чтоб ветки не плодить: в эх-гриде установлено свойство AutoFitColWidth=True. Если поля в колумн-эдиторе не заданы, то масштабирует ширину отлично. Если же поля добавить в список колонок, он просто делает все колонки одинаковой ширины. Это так и должно быть, или можно вылечить? Поможите, плиз! PS дело происходит на D7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 06:28 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Посмотри, что попадает в dataset из базы. Может там встречаются две одинаковых записи и неизвестно с какой из них работать. Ключ в datasetе сидит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 13:42 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
if MessageDlg('Update Record?', mtConfirmation, [mbYes, mbNo], 0) = mrNo else Abort; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 13:43 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
To VVD: Когда пытался с TTable, использовал DemoDB, таблица customers. Вроде, всё должно быть ОК - при записи изменений ведь никаких вопросов не возникает. To Lelikk: Нужен именно диалог с тремя вариантами - сохраняем (Yes), не сохраняем и выходим из редактирования (No), не сохраняем и продолжаем редактировать (Cancel) Вообще, в документации сказано, что если датасет не в dsEdit, Cancel does nothing. А тут - ругается... У кого еще какие идеи есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 14:42 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Что то у меня схожее было ... procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet); begin if (not DataSet.Edit ) begin DataSet.Edit(); end Case MessageDlg('Save changes?',mtConfirmation,[mbYes, mbNo, mbCancel],0) of mrNo:DataSet.Cancel; mrCancel:Abort; end; end; Что то в таком духе , правда за точность приведенного мной кода не гарантирую, двно на делфях уже не пишу. _______ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 14:53 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Попробовал для TClientDataSet - не ругается, но делает полную чепуху. Как гипотеза : Post и Cancel - одноранговые противоположные операции и канселить хоть и before но уже пост плохой тон. Может Post можно только заабортить ? Самому интересно стало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 16:02 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
To JibSkeart: Та же песня. В том-то и дело, что проверять state в коде тут бесполезно - он dsEdit. To VVD: Да тут уже не моветон, тут уже concrete wall situation. :) Но гипотеза о неиспользовании BeforePost для вывода подтверждающего диалога отражается в документации: if MessageDlg('Update Record?', mtConfirmation, [mbYes, mbNo], 0)=mrYes then MyData.Post else MyData.Cancel; (Cancel example, D7 on-line help) ИМХО, помещать такой код в BeforePost бесполезно, ибо он сам вызывает Post, который опять вызовет событие BeforePost, с уходом в бесконечность. Видимо, предполагается использование в каом-то другом месте. А куда еще поместить вызов подтверждающего диалога, чтоб любые изменения датасета перехватывать в одном месте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 18:48 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Решение найдено. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Парадоксально, но факт. Причем таким образом датасет обратно в эдит не выходит - после этого происходит post. "О, сколько нам открытий чудных..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 20:15 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Облом - при этом решении всё одно происходит post неизменненой строки. Что никуда не годится. Эхххх.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 20:30 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Ладно, остановился пока на этом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При этом из эдита датасет не хочет выходить, но хоть пост не происходит, и запись до начального вида восстанавливает. И то хлеб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 20:40 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2003, 11:41 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
Попробуй последовать совету JibSkeart 12 дек 03, 14:53 только даже без проверки dsEdit, просто IBDataSet1->Edit(). То что у тебя State=dsEdit - это ни есть факт, а есть продукт работы некого ПО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2003, 10:08 |
|
||
|
Чайниковый вопрос по TDataset/TIBDataset+DBGridEh
|
|||
|---|---|---|---|
|
#18+
А может стоит с BeforeScroll работать, а не с BeforePost? BeforePost наверняка ведь работает примерно так: Код: plaintext 1. 2. 3. 4. 5. Так чему же удивляться, что оно хочет state=dsEdit? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 14:03 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=58&tid=2115441]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 412ms |

| 0 / 0 |
