Последняя версия DataExpress 3 beta от 15 ноября 2020 года.

Изображение Скачать | Изображение Что нового?



Объявление:

Если вам понравилась программа и вы ее интенсивно используете - замолвите словечко о ней на вашем сайте (блоге, форуме, твитере, краской на подъезде, ютуб-канале и т.д.) с активной (по-возможности) ссылкой на сайт программы/форум. Тем самым вы можете внести небольшой вклад в seo-карму проекта в виде входящих ссылок.
Спасибо! Администрация :)


>> Обсудить <<


Внимание! Кража данных


Открытие записи в режиме редактирования

Все вопросы, связанные с написанием скриптов и SQL-запросов.
Аватара пользователя
Иван
Интересующийся
Сообщения: 215
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 33 раза
Поблагодарили: 51 раз

Открытие записи в режиме редактирования

Сообщение Иван » 03 июн 2019, 11:07

Есть запрос, в нем 3 источника. На формах источников есть поля с имененами формы и номером записи (их выводим в запрос). Скриптом открывает все как нужно для редактирования. Если отредактировать и нажать Ок все четко. Но если Cancel или Close возвращает запись при следующем открытии в режиме просмотра (и потом это можно снять только монитором пользователей).

Как можно прописать что б корректно отработало при отмене редактирования и вернуло при следующем открытии формы режим редактирования?

Код: Выделить всё

var
   T: TdxForm;
   ggg: string;
   kkk: integer;

procedure OpenFormCl (Sender:TObject);
begin
   ggg:= EvalExpr('get("Запрос256","Имяформы")', self);
   kkk:= EvalExpr('get("Запрос256","id_rec")', self);
   T:=TdxForm.Create(ggg);
   T.OpenRecord(kkk);
   T.Edit;
   if T.EditWindow.ShowModal = mrOk then
   T.Post;
   T.Close;
   if T<>nil then T.Free;
end;

procedure Form_Create;
begin
   dxQueryGrid1.OnDblClick:= @OpenFormCl;
end; 

Аватара пользователя
Develop-Soft
Сообщения: 1940
Зарегистрирован: 05 мар 2019, 18:09
Благодарил (а): 123 раза
Поблагодарили: 540 раз
Контактная информация:

Re: Открытие записи в режиме редактирования

Сообщение Develop-Soft » 03 июн 2019, 11:24

1.

Код: Выделить всё

if T.EditWindow.ShowModal = mrOk then
   T.Post
else
   T.Cancel;

2. if T<>nil then T.Free; необязательно, достаточно T.Free;
3. Вместо EvalExpr('get("Запрос","Поле")', self); можно использовать Self.Queries['Запрос']['Поле'];
4. Перед созданием формы желательно поставить проверку if Self.Queries['Запрос'].RecordCount=0 then exit;
5. Если база сетевая, желательно проверять TAccessStatus в T.Edit и прекращать выполнение, если запись занята или была удалена.
6. Название темы побило местные рекорды.

Аватара пользователя
Иван
Интересующийся
Сообщения: 215
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 33 раза
Поблагодарили: 51 раз

Re: Открытие записи в режиме редактирования

Сообщение Иван » 03 июн 2019, 12:14

Огромная благодарность. Вот так живешь не обращая внимания на разницу свойств Close и Cancel.
Отдельно спасибо за вот эту структуру Self.Queries['Запрос']['Имя поля']; давно искал решение прямого обращения к полю.

Рабочий вариант для справки соискателей.

Код: Выделить всё

procedure OpenFormCl (Sender:TObject);
begin
   ggg:= Self.Queries['Запрос256']['Имяформы'];
   kkk:= Self.Queries['Запрос256']['id_rec'];
   T:=TdxForm.Create(ggg);
   if Self.Queries['Запрос256'].RecordCount=0 then exit;
         T.OpenRecord(kkk);
         If (T.State <> dsInsert) and (T.State <> dsEdit) and (T.CanEdit = asOk) then
               T.Edit;
                if T.EditWindow.ShowModal = mrOk then
                       T.Post
                else
                       T.Cancel;
   T.Free;
end;

drts
Эксперт
Сообщения: 384
Зарегистрирован: 29 окт 2016, 23:35
Откуда: Новороссийск
Благодарил (а): 32 раза
Поблагодарили: 7 раз

Re: Открытие записи в режиме редактирования

Сообщение drts » 03 июн 2019, 13:34

Иван писал(а):давно искал решение прямого обращения к полю.

А еще такое есть:

Код: Выделить всё

qrName.Fields['Поле']
? где qrName - имя компонента запроса (TdxQueryGrid) ))))

Аватара пользователя
Develop-Soft
Сообщения: 1940
Зарегистрирован: 05 мар 2019, 18:09
Благодарил (а): 123 раза
Поблагодарили: 540 раз
Контактная информация:

Re: Открытие записи в режиме редактирования

Сообщение Develop-Soft » 03 июн 2019, 16:39

drts писал(а):А еще такое есть:

Код: Выделить всё

qrName.Fields['Поле']
? где qrName - имя компонента запроса (TdxQueryGrid) ))))

Ну тогда можно и так:

Код: Выделить всё

qrName['Поле']


Вернуться в «Программирование в DataExpress»