Delphi7:потеря данных в гриде при деактивации форм

Игорь18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
10.09.2011

Есть ошибка в Delphi 7, с которой у меня не получается разобраться. Нужна помощь в исправлении ошибки, скорее всего - исправление бага в исходниках DBGrid.

Работа оценена предположительно в 1000р., оплата через вебмани.

------------------------------------------------

Есть Delphi 7 + MS SQL Server Express, в базе табличка с двумя полями - int Identity и varchar.

Есть грид в форме, TDBGrid-TDataSource-TADOQuery-TADOconnection. Мы используем ехлибовский грид, но в стандартном проблема тоже воспроизводится.

На FormDeactivate повешено

with query do if (State=dsEdit) or (State=dsInsert) then Post;

цель - при выходе из формы должно происходить сохранение данных. Но вот беда - если у грида align=alNone, post происходит и данные сохраняются. А если у грида align=alBottom, то пост происходит, но введенные в поле данные теряются.

Я пробовал упростить задачу: убрал все попытки сохранения.

Изменяю значение в гриде, перехожу к другой форме, потом возвращаюсь. Если у грида align=alNone, то вижу в ячейке то значение, которое ввел перед переходом, и могу продолжить его редактировать. Если у грида align=alBottom, то значение теряется. Если у грида align=alNone, то значение DBGrid1.InplaceEditor.text в FormDeactivate правильное, то которое я вводил. Если align=alBottom, то введенный мной текст в момент FormDeactivate уже утерян.

------------------------------------------------

Тестовый проект прилагается.

------------------------------------------------

Проверил предложение Дмитрия Беляева - не помогло. Если включен хотя бы один из якорей akRight или akBottom, данные при переходе к другой форме также теряются. Можно повесить событие на ресайз, и изменять размер грида в этом событии - если не получится разобраться с ошибкой, так и сделаем.