Some time ago (change from 18.0 to 18.1) I had my first "Dead lock".
Allan Kim Eriksen helps with a workaround to run the program.
But we don´t have make the change to 18.1 (too afraid of problems).
We have removed 2 of 3 alias (not more needed in this application).
The application is using a SQL database.
There is a pkg : debuglock.pkg with some changes by Garrett Mott for SQL.
I can do what I want, the message is "default" instead "No Locks"
Please have a look at:
gera_gr is the master
gera_gr2 is the alias
gera_gr.dd
Code:
Open Gera_Gr
Open St_Gera
Open Disp_Gr
Open Nummer2
Register_Object su_ggru
Register_Object su_ggru2
Register_Object su_text
Class Gera_Gr_DataDictionary is a cKusDataDict
// Define_Fields:
// This procedure is used to set up all data-dictionary rules.
Procedure Construct_Object
Forward Send Construct_Object
Set Main_File To Gera_Gr.File_Number
Set Foreign_Field_Option DD_KEYFIELD DD_AUTOFIND to True
Set Foreign_Field_Option DD_KEYFIELD DD_NOPUT to True
Set Foreign_Field_Option DD_KEYFIELD DD_FINDREQ to True
Set Foreign_Field_Option DD_INDEXFIELD DD_NOPUT to True
Set Foreign_Field_Option DD_INDEXFIELD DD_FINDREQ to True
Set Foreign_Field_Option DD_DEFAULT DD_DISPLAYONLY to True
// Child (Client) file structure................
Set Add_Client_File to St_Gera.File_Number
// External (System) file structure.............
Set Add_System_File to Nummer2.File_Number DD_LOCK_ON_ALL
Set Field_Auto_Increment Field Gera_Gr.Numm to File_Field Nummer2.Gera_Gr
// Field-based properties.......................
Set Field_Prompt_Object Field Gera_Gr.Such to su_ggru
Set Field_Prompt_Object Field Gera_Gr.Numm to su_ggru2
Set Field_Checkbox_Values Field Gera_Gr.Kze To "J" ""
Set Field_Option Field Gera_Gr.Kze DD_CAPSLOCK to True
Set Field_Prompt_Object Field Gera_Gr.STEXT to su_text
End_Procedure // Construct_Object
Procedure Field_Defaults
Forward Send Field_Defaults
End_Procedure // Field_Defaults
End_Class // Gera_Gr_DataDictionary
#IFDEF Is$WebApp
#ELSE
Use su_text.sl
Use su_ggru.sl // su_ggru
Use su_ggru2.sl // su_ggru2
#ENDIF
and gera_gr2.dd
Code:
Register_Object su_ggru
Register_Object su_ggru2
Use gera_gr.DD
Open gera_gr2
Open DISP_GR
Set_Attribute DF_FILE_ALIAS of gera_gr2.File_number to DF_FILE_IS_ALIAS
Class Gera_gr2_DataDictionary is a Gera_Gr_DataDictionary
Procedure Construct_Object
Forward Send Construct_Object
Set Foreign_Field_Option DD_KEYFIELD DD_AUTOFIND to False
Set Foreign_Field_Option DD_INDEXFIELD DD_FINDREQ to False
Set Alias_File to gera_gr2.File_Number
Set pbForeignReadOnly to True
Set pbUseDDRelates to True
Set pbNoCascadeDeleteStrict to True
// Set Main_File to Gera_Gr2.File_Number
Set Add_Client_File to DISP_GR.File_Number
// Field-based properties.......................
Set Field_Prompt_Object Field Gera_Gr2.Such to su_ggru
Set Field_Prompt_Object Field Gera_Gr2.Numm to su_ggru2
//Set Field_Auto_Increment Field gera_gr2.NUMM to 0 0
Set Field_Checkbox_Values Field Gera_Gr2.Kze to "J" ""
Set Field_Option Field Gera_Gr2.Kze DD_CAPSLOCK to True
End_Procedure // Construct_Object
Procedure Update
End_Procedure
Procedure Backout
End_Procedure
Procedure Deleting
End_Procedure
Procedure Creating
End_Procedure
Function Validate_Save Returns Integer
End_Function
Function Validate_Delete Returns Integer
End_Function
Function Validate_Cascade_Delete Returns Boolean
End_Function
Procedure OnSaveRecord
End_Procedure
Procedure OnPreFind Integer eMessage
End_Procedure
Procedure OnPostFind Integer eMessage Boolean bFound
End_Procedure
Procedure OnConstrain
End_Procedure
// Field_Defaults:
// This procedure is used to establish default field values.
// Procedure Field_Defaults
// Forward Send Field_Defaults
// End_Procedure // Field_Defaults
End_Class
#IFDEF Is$WebApp
#ELSE
Use su_ggru.sl // su_ggru
Use su_ggru2.sl // su_ggru2
#ENDIF