Lock table overflow, increase -L on server (915)

PrJlndni

Member
Good day everyone,

I would like to ask your help regarding my troubles in debugging my program.
Below is my syntax. Whenever the program collects a lot of data, this error Lock table overflow, increase -L on server (915) appeared. What are your suggested solution to this? Thank you very much for your help. :)


t_HeadTitle02 = string(t_DateFrom) + " to " + string(t_DateTo) + " with " + string(cb_Description) + " and " + string(cb_AcctType).
DISPLAY t_HeadTitle02 WITH FRAME f_MainProc.
FOR EACH CustService.CustTrans WHERE (CustService.CustTrans.Transac-Date GE t_DateFrom AND CustService.CustTrans.Transac-Date LE t_DateTo), EACH CustService.Customer WHERE CustService.Customer.RecAddrs = CustService.CustTrans.RecAddrs, EACH CustService.LU_TransactionCodes WHERE (CustService.LU_TransactionCodes.trans-code-1 = CustService.CustTrans.Trans-Code-1 AND CustService.LU_TransactionCodes.trans-code-2 = CustService.CustTrans.Trans-Code-2) NO-LOCK.
t_counter = t_counter + 1.
t_total = t_total + CustService.CustTrans.Amount.
END.
ENABLE t_QryCustTrans1 WITH FRAME f_QryCustTrans1. OPEN QUERY t_QryCustTrans1 FOR EACH CustService.CustTrans WHERE (CustService.CustTrans.Transac-Date GE t_DateFrom AND CustService.CustTrans.Transac-Date LE t_DateTo), EACH CustService.Customer WHERE CustService.Customer.RecAddrs = CustService.CustTrans.RecAddrs, EACH CustService.LU_TransactionCodes WHERE (CustService.LU_TransactionCodes.trans-code-1 = CustService.CustTrans.Trans-Code-1 AND CustService.LU_TransactionCodes.trans-code-2 = CustService.CustTrans.Trans-Code-2) BY CustService.CustTrans.Transac-Date.
WAIT-FOR F4, F9, F3 OF t_QryCustTrans1 IN FRAME f_QryCustTrans1 FOCUS t_QryCustTrans1.
 
Last edited by a moderator:

Frank Spaniak

New Member
Assuming This is a report,

The first two record buffers (CustService.CustTrans and CustService.Customer) in the for each are getting share locks which is the progress default. Only the third one is reading no-lock. Underlined the code changes below.

FOR EACH CustService.CustTrans NO-LOCK WHERE
(CustService.CustTrans.Transac-Date GE t_DateFrom AND CustService.CustTrans.Transac-Date LE t_DateTo), EACH
CustService.Customer NO-LOCK WHERE CustService.Customer.RecAddrs = CustService.CustTrans.RecAddrs,
EACH CustService.LU_TransactionCodes WHERE
(CustService.LU_TransactionCodes.trans-code-1 = CustService.CustTrans.Trans-Code-1 AND CustService.LU_TransactionCodes.trans-code-2 = CustService.CustTrans.Trans-Code-2) NO-LOCK.

Good Luck
 

TheMadDBA

Active Member
While you certainly should do as Frank suggested and fix the share lock issue (and get in the habit of doing that always)... Unless you already have a transaction open you will not get a lock table overflow for share locks. Adding the NO-LOCK "might" make the issue go away temporarily, but you still have a transaction scoping issue and sooner or later it is going to bite you.

You need to compile your code with the listing option:

COMPILE <YourProgram> LISTING <sometextfile>.

Open the text file you specified and scroll towards the end until you see the section that has the File Name,Blk Type and Tran columns. If you see yes in the Tran column that line is starting a transaction. You can use the line number provided to search the rest of the file to see where your transaction is starting.
 

TomBascom

Curmudgeon
Also -- use the [ C O D E ] tag when posting code. It makes it readable. Like so:

Code:
t_HeadTitle02 = string(t_DateFrom) + " to " + string(t_DateTo) + " with " + string(cb_Description) + " and " + string(cb_AcctType).

DISPLAY t_HeadTitle02 WITH FRAME f_MainProc.

FOR
 EACH CustService.CustTrans
    WHERE (CustService.CustTrans.Transac-Date GE t_DateFrom AND CustService.CustTrans.Transac-Date LE t_DateTo),
  EACH CustService.Customer
    WHERE CustService.Customer.RecAddrs = CustService.CustTrans.RecAddrs,
 EACH CustService.LU_TransactionCodes
    WHERE (CustService.LU_TransactionCodes.trans-code-1 = CustService.CustTrans.Trans-Code-1 AND CustService.LU_TransactionCodes.trans-code-2 = CustService.CustTrans.Trans-Code-2) NO-LOCK:

  t_counter = t_counter + 1.
  t_total = t_total + CustService.CustTrans.Amount.

END.

ENABLE t_QryCustTrans1 WITH FRAME f_QryCustTrans1.

OPEN QUERY t_QryCustTrans1
  FOR
   EACH CustService.CustTrans
     WHERE (CustService.CustTrans.Transac-Date GE t_DateFrom AND CustService.CustTrans.Transac-Date LE t_DateTo),
   EACH CustService.Customer
     WHERE CustService.Customer.RecAddrs = CustService.CustTrans.RecAddrs,
   EACH CustService.LU_TransactionCodes
     WHERE (CustService.LU_TransactionCodes.trans-code-1 = CustService.CustTrans.Trans-Code-1 AND CustService.LU_TransactionCodes.trans-code-2 = CustService.CustTrans.Trans-Code-2)
   BY CustService.CustTrans.Transac-Date
.

WAIT-FOR F4, F9, F3 OF t_QryCustTrans1 IN FRAME f_QryCustTrans1 FOCUS t_QryCustTrans1.
 
Top