Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перестал создаваться Event от DevExpress / 3 сообщений из 3, страница 1 из 1
31.10.2017, 09:08:05
    #39545022
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал создаваться Event от DevExpress
Доброго времени суток, уважаемые комрады!

Подписка кончилась у DevExpress, не знаю, отвечают ли после :)

Есть у меня вот такая процедура
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
function MySchedulerAddEvent(AKind: SmallInt; var IDCommon: Integer; AED: TEventData): boolean;
  var
    AEvent: TcxSchedulerControlEvent;
    AInfo: TcxSchedulerEventEditInfo;
    AModified: Boolean;
    AEventReal: TcxSchedulerEvent;
    IsResult: Boolean;

    procedure ConstructForUsers;
    var
      ATempEventReal: TcxSchedulerEvent;
    begin
      with DM.RunQuery do
      try
        Close;
        if AEventReal.GetCustomFieldValueByName('ISCOMMON') = 1 then
        begin
          SelectSQL.Text := 'select ID from SPUSERS where IDCOMP=:IDCOMP and DELETED=0 order by SHORT';
          ParamByName('IDCOMP').AsInteger := GlobalCompID;
          Open;
          while not EOF do
          begin
            ATempEventReal := DM.SchedulerDBSOwn.CreateEvent;
            ATempEventReal.Assign(AEventReal);
            ATempEventReal.SetCustomFieldValueByName('IDUSER', Fields[0].AsInteger);
            ATempEventReal.Post;
            Next;
          end;
          Close;
        end else
        begin
          SelectSQL.Text := 'select ID from SPUSERS where IDCOMP=:IDCOMP and DELETED=0 and ID in ('+GlobalSchedulerIDUsers+') order by SHORT';
          ParamByName('IDCOMP').AsInteger := GlobalCompID;
          Open;
          while not EOF do
          begin
            ATempEventReal := DM.SchedulerDBSOwn.CreateEvent;
            ATempEventReal.Assign(AEventReal);
            ATempEventReal.SetCustomFieldValueByName('IDUSER', Fields[0].AsInteger);
            ATempEventReal.Post;
            Next;
          end;
          Close;
        end;

      finally
        Close;
      end;
    end;

  begin
    Result := False; IDCommon := 0;

    AEventReal := DM.SchedulerDBSOwn.CreateEvent;

    AEvent := TcxSchedulerControlEvent.Create(AEventReal);

    AInfo := TcxSchedulerEventEditInfo.Create();
    try
      AEvent.Caption := AED.Caption; 
      AEvent.Location := AED.Location; 
      AEvent.Message := AED.Msg; 
      if AKind = 1 then 
        AEvent.SetCustomFieldValueByName('IDDOC', AED.IDDoc);

      GlobalSchedulerIDUsers := AED.SchedulerUsersPattern;
      GlobalSchedulerIDCommon := DM.FIBDB.Gen_Id('TSCHEDULER_IDCOMMON_GEN', 1);
      GlobalSchedulerISCommon := 0;
      AEvent.SetCustomFieldValueByName('IDCOMMON', GlobalSchedulerIDCommon);
      AEvent.SetCustomFieldValueByName('ISCOMMON', 0);

      AInfo.AllowDelete := False;
      AInfo.Event := AEvent;
      AInfo.DialogsStyle := 'MyRibbon';
      AInfo.IsRemindersActive := True;
      AEvent.ReminderMinutesBeforeStart := 15;
      AEvent.Reminder := True;
      AEvent.Start := AED.Start; //Date + 1 + 10 * HourToTime;
      AEvent.Duration := AED.Duration; //60 * MinuteToTime;
      AEvent.EventType := etNone;
      AInfo.ShowModal := True;
      AInfo.ReadOnly := False;

      AModified := False;
      IsResult := cxShowEventEditorEx(AInfo, AModified);
      //в этот момент, если в диалоге нажали "сохранить", то в СУБД появляется запись о событии, правильная (но без доп. полей, так и было раньше).
      if IsResult then
      begin
        //в следующей строке при построчном выполнении может выскочить Access Violation (может не выскочить).
        AEventReal.SetCustomFieldValueByName('ISCOMMON', GlobalSchedulerISCommon);
        if ((GlobalSchedulerIDUsers = '') or (GlobalSchedulerIDUsers = IntToStr(GlobalUserID))) and (AEventReal.GetCustomFieldValueByName('ISCOMMON') = 0) then
          AEventReal.SetCustomFieldValueByName('IDUSER', GlobalUserID) else  
          AEventReal.SetCustomFieldValueByName('IDUSER', 0); 

        IDCommon := GlobalSchedulerIDCommon;
        //если сюда дошло (не было AV в пред. комменте), то после Post запись становится "пустой", заполнены только поля из CustomFields.
        AEventReal.Post;

        if AEventReal.GetCustomFieldValueByName('IDUSER') = 0 then //сюда идем, если назначили всем либо некоторым
        begin
          ConstructForUsers;
          DM.SchedulerDBSOwn.PostEvents;
          AEventReal.Delete;
        end else
          DM.SchedulerDBSOwn.PostEvents;

        DM.SchedulerDBSOwn.FullRefresh;
        Result := True;
      end;
    finally
      AInfo.Free();
      AEvent.Free();
    end;
end;



Смысл такой, что событие создается, пользователь может выбрать для каких пользователей (или вообще для всех) создается это событие. И программа все делала правильно (ну, по крайней мере, работало как требовалось). ( Вот тут мой вопрос им был по поводу как это все организовать )
Внезапно эта процедура перестала работать. Ей особо не пользовались, сейчас вот решили, а оно не работает, но точно работало при тестировании! ))
После if IsResult then AEventReal - не nil, но при выполнении к нему иногда просто AV, без объявления войны, с выходом из процедуры; иногда выполняется, затирая созданную только что запись о событии.
Вот так выглядит лог sql запросовApplication:
Object: ""
Operation:Prepare:>> Time 31.10.2017 8:03:38
select gen_id(TSCHEDULER_ID_GEN, 1) from RDB$DATABASE

Application:
Object: ""
Operation:TrID=60234 Execute query:>> Time 31.10.2017 8:03:38
select gen_id(TSCHEDULER_ID_GEN, 1) from RDB$DATABASE

Application:
Object: "DM.FIBDSSchedulerOwn.InsertQuery"
Operation:Prepare:>> Time 31.10.2017 8:03:38
insert into TSCHEDULER (ID, ACTUALFINISH, ACTUALSTART, CAPTION, EVENTTYPE, FINISH, GROUPID, LABELCOLOR, LOCATION, MESSAGE, OPTIONS, PARENTID, RECURRENCEINDEX, RECURRENCEINFO, REMINDERDATE, REMINDERMINUTESBEFORESTART, REMINDERRESOURCESDATA, RESOURCEID, STARTTIME, STATE, TASKCOMPLETEFIELD, TASKINDEXFIELD, TASKLINKSFIELD, TASKSTATUSFIELD, IDCOMP, IDDOC, IDCONTRACT, PARAMS, IDAUTH, LASTEDITDATE, IDCOMMON, ISCOMMON, IDUSER) values (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , 2, current_timestamp, ? , ? , ? )

Application:
Object: "DM.FIBDSSchedulerOwn.InsertQuery"
Operation:TrID=60245 Execute query:>> Time 31.10.2017 8:03:38
insert into TSCHEDULER (ID, ACTUALFINISH, ACTUALSTART, CAPTION, EVENTTYPE, FINISH, GROUPID, LABELCOLOR, LOCATION, MESSAGE, OPTIONS, PARENTID, RECURRENCEINDEX, RECURRENCEINFO, REMINDERDATE, REMINDERMINUTESBEFORESTART, REMINDERRESOURCESDATA, RESOURCEID, STARTTIME, STATE, TASKCOMPLETEFIELD, TASKINDEXFIELD, TASKLINKSFIELD, TASKSTATUSFIELD, IDCOMP, IDDOC, IDCONTRACT, PARAMS, IDAUTH, LASTEDITDATE, IDCOMMON, ISCOMMON, IDUSER) values (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , 2, current_timestamp, ? , ? , ? )

Params[0]='107'
Params[1]=''
Params[2]=''
Params[3]='Контроль исполнения документа: № проект от 30.10.2017'
Params[4]='0'
Params[5]='01.11.2017 11:00:00'
Params[6]=''
Params[7]='536870912'
Params[8]='ГАУ ВО "РЦЦС Волгоградской области"'
Params[9]='Контроль исполнения документа: № проект от 30.10.2017'
Params[10]='4'
Params[11]=''
Params[12]=''
Params[13]=(0,8)
Params[14]='01.11.2017 9:45:00'
Params[15]='15'
Params[16]=(0,0)
Params[17]=(0,0)
Params[18]='01.11.2017 10:00:00'
Params[19]='0'
Params[20]=''
Params[21]=''
Params[22]=(0,0)
Params[23]=''
Params[24]='1'
Params[25]='1055'
Params[26]='0'
Params[27]=(0,0)
Params[28]='84'
Params[29]='0'
Params[30]=''
Application:
Object: "DM.TRNScheduler"
Operation:CommitRetaining(TransactionID=60245) >> Time 31.10.2017 8:03:38
TransactionParams:
write
nowait
rec_version
read_committed

Application:
Object: "DM.FIBDSSchedulerOwn.UpdateQuery"
Operation:Prepare:>> Time 31.10.2017 8:03:38
update TSCHEDULER set ID=? , ACTUALFINISH=? , ACTUALSTART=? , CAPTION=? , EVENTTYPE=? , FINISH=? , GROUPID=? , LABELCOLOR=? , LOCATION=? , MESSAGE=? , OPTIONS=? , PARENTID=? , RECURRENCEINDEX=? , RECURRENCEINFO=? , REMINDERDATE=? , REMINDERMINUTESBEFORESTART=? , REMINDERRESOURCESDATA=? , RESOURCEID=? , STARTTIME=? , STATE=? , TASKCOMPLETEFIELD=? , TASKINDEXFIELD=? , TASKLINKSFIELD=? , TASKSTATUSFIELD=? , IDCOMP=? , IDDOC=? , IDCONTRACT=? , PARAMS=? , IDAUTH=2, LASTEDITDATE=current_timestamp, IDCOMMON=? , ISCOMMON=? , IDUSER=? where ID=?

Application:
Object: "DM.FIBDSSchedulerOwn.UpdateQuery"
Operation:TrID=60255 Execute query:>> Time 31.10.2017 8:03:38
update TSCHEDULER set ID=? , ACTUALFINISH=? , ACTUALSTART=? , CAPTION=? , EVENTTYPE=? , FINISH=? , GROUPID=? , LABELCOLOR=? , LOCATION=? , MESSAGE=? , OPTIONS=? , PARENTID=? , RECURRENCEINDEX=? , RECURRENCEINFO=? , REMINDERDATE=? , REMINDERMINUTESBEFORESTART=? , REMINDERRESOURCESDATA=? , RESOURCEID=? , STARTTIME=? , STATE=? , TASKCOMPLETEFIELD=? , TASKINDEXFIELD=? , TASKLINKSFIELD=? , TASKSTATUSFIELD=? , IDCOMP=? , IDDOC=? , IDCONTRACT=? , PARAMS=? , IDAUTH=2, LASTEDITDATE=current_timestamp, IDCOMMON=? , ISCOMMON=? , IDUSER=? where ID=?

Params[0]='107'
Params[1]=''
Params[2]=''
Params[3]=''
Params[4]=''
Params[5]=''
Params[6]=''
Params[7]=''
Params[8]=''
Params[9]=''
Params[10]=''
Params[11]=''
Params[12]=''
Params[13]=(0,0)
Params[14]=''
Params[15]=''
Params[16]=(0,0)
Params[17]=(0,0)
Params[18]=''
Params[19]=''
Params[20]=''
Params[21]=''
Params[22]=(0,0)
Params[23]=''
Params[24]='1'
Params[25]=''
Params[26]=''
Params[27]=(0,0)
Params[28]=''
Params[29]='0'
Params[30]=''
Params[31]='107'
Application:
Object: "DM.TRNScheduler"
Operation:CommitRetaining(TransactionID=60255) >> Time 31.10.2017 8:03:38
TransactionParams:
write
nowait
rec_version
read_committed

Application:
Object: "DM.FIBDSSchedulerOwn.UpdateQuery"
Operation:TrID=60256 Execute query:>> Time 31.10.2017 8:03:38
update TSCHEDULER set ID=? , ACTUALFINISH=? , ACTUALSTART=? , CAPTION=? , EVENTTYPE=? , FINISH=? , GROUPID=? , LABELCOLOR=? , LOCATION=? , MESSAGE=? , OPTIONS=? , PARENTID=? , RECURRENCEINDEX=? , RECURRENCEINFO=? , REMINDERDATE=? , REMINDERMINUTESBEFORESTART=? , REMINDERRESOURCESDATA=? , RESOURCEID=? , STARTTIME=? , STATE=? , TASKCOMPLETEFIELD=? , TASKINDEXFIELD=? , TASKLINKSFIELD=? , TASKSTATUSFIELD=? , IDCOMP=? , IDDOC=? , IDCONTRACT=? , PARAMS=? , IDAUTH=2, LASTEDITDATE=current_timestamp, IDCOMMON=? , ISCOMMON=? , IDUSER=? where ID=?

Params[0]='107'
Params[1]=''
Params[2]=''
Params[3]=''
Params[4]=''
Params[5]=''
Params[6]=''
Params[7]=''
Params[8]=''
Params[9]=''
Params[10]=''
Params[11]=''
Params[12]=''
Params[13]=(0,0)
Params[14]=''
Params[15]=''
Params[16]=(0,0)
Params[17]=(0,0)
Params[18]=''
Params[19]=''
Params[20]=''
Params[21]=''
Params[22]=(0,0)
Params[23]=''
Params[24]='1'
Params[25]=''
Params[26]=''
Params[27]=(0,0)
Params[28]=''
Params[29]='0'
Params[30]='2'
Params[31]='107'
Application:
Object: "DM.TRNScheduler"
Operation:CommitRetaining(TransactionID=60256) >> Time 31.10.2017 8:03:38
TransactionParams:
write
nowait
rec_version
read_committed

Помогите, пожалуйста, что и где посмотреть?

Спасибо!
...
Рейтинг: 0 / 0
31.10.2017, 10:39:23
    #39545071
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал создаваться Event от DevExpress
Очень много кода, следует разбить на мелкие куски и убедиться, что они работают по отдельности.

SQL-логи показывают, что при клонировании события сохраняются пустые данные в базу (ConstructForUsers)?
...
Рейтинг: 0 / 0
31.10.2017, 15:33:19
    #39545330
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал создаваться Event от DevExpress
Вообще чудеса какие-то. Потратил 2 дня.
Если у TcxSchedulerDBStorage включаю параметр UseIndexedID (поле в БД, естественно, Indexed) - то все, перестает работать.
Если этот параметр выключить - все отлично работает, как когда-то и было написано и задумано.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перестал создаваться Event от DevExpress / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]