Re: Grid performance terribly slow on a file share, browse works well
Posted: Sat Feb 10, 2018 11:16 pm
With MEMIO you can create an in-memory dbf and/or index file
Exclusive forum for HMG, a Free / Open Source xBase WIN32/64 Bits / GUI Development System
http://www.hmgforum.com/
Code: Select all
#include <hmg.ch>
REQUEST HB_MEMIO
FUNCTION MAIN
/****************/
if !file('p:\franco\inv.dbf')
CF := {}
aADD(CF,{'NUM1' ,'C' , 15,0})
aADD(CF,{'NUM2' ,'C' , 15,0})
DBCREATE( 'p:\franco\INV.DBF',CF )
USE
USE p:\franco\INV EXCLUSIVE NEW
DO WHILE RECNO()< 100000
INV->( DBAPPEND())
INV->( FIELDPUT(1, 'P' + ALLTRIM(STR(20 + RECNO())) ))
INV->( FIELDPUT(2, 'PARTS' ))
LOOP
ENDDO
USE
ENDIF
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 1000 ;
HEIGHT 610 ;
TITLE 'Browse Test' ;
MAIN
@ 10,10 BUTTON Button_1 CAPTION 'Browse' WIDTH 75 HEIGHT 75 MULTILINE ;
NOTABSTOP TOOLTIP 'Browse Inv' ;
ACTION { || BRWCRS(87, 228, 220, 100, 390, 'ITEM', 'OH ', "INV", 'NUM1', 'NUM2') }
@ 100,10 BUTTON Button_2 CAPTION 'Insert' WIDTH 75 HEIGHT 75 MULTILINE ;
NOTABSTOP TOOLTIP 'Insert Inv' ;
ACTION Append_Record()
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
function brwcrs
LOCAL WID1, OSEL
PARAMETERS R1, C1, W1, W2, H1, H2, H3, T1, FC1, FC2 // TA, W1, W2, C1, R1, H1, I1, D1, FC1, FC2
// R1 = ROW.... C1 = COLUMN.... W1 = WIDTH OD FIRST FIELD.... W2 = WIDTH OF SECONFD FIELD
// H1 = HEIGHT.... H2 = HEADER 1.... H3 = HEADER 2.... T1 = TABLE.... FC1 = FIELD1.... FC2 = FIELD 2
If IsWIndowActive (frmQSMain)
DoMethod ('frmQSMain' , 'Release' )
ENDIF
OPNFLS()
IF W2 = 0
WID1 := 'FC1'
ELSE
WID1 := 'FC1 , FC2'
ENDIF
DEFINE WINDOW frmQSMain ;
AT R1+80, C1+10 ;
WIDTH W1+W2+40 ; //GetDesktopWidth() * 0.75 ;
HEIGHT H1+20 ; // GetDesktopHeight() * 0.75 ;
WINDOWTYPE CHILD ;
TITLEBAR .F. ;
ON RELEASE CLSFLS();
ON KEY ESCAPE ACTION { || MKEY := .T., frmQSMain.Release}
DEFINE BROWSE brwItems
ROW 0 //133
COL 0 //211
WIDTH W1 + W2+25 // 400
HEIGHT H1 //290
BACKCOLOR { 255, 255, 255}
FONTCOLOR { 0, 0, 0 }
HEADERS {H2 , H3}
WIDTHS {W1, W2}
WORKAREA &T1 //inv
FIELDS { &WID1}
ONDBLCLICK { || EDITINV(this.value), frmQSMain.Release }
// ONLOSTFOCUS { || dbgoto(this.value), frmQSMain.Release }
// ONCHANGE { || dbgoto(this.value) }
TOOLTIP 'Press Escape to Exit'
NOLINES .F.
END BROWSE // brwItems
DEFINE TEXTBOX textSearch
ROW 1 //R1
COL 1 //232
WIDTH 1 // 200 can make 1 so you cannot see
HEIGHT 24
ONCHANGE { || DBSEEK( UPPER( this.Value ), .T. ), frmQSMain.brwItems.value := &T1->(RECNO() ) }
ONENTER { || frmQSMain.brwItems.SETFOCUS }
ONLOSTFOCUS { || frmQSMain.brwItems.SETFOCUS}
END TEXTBOX // tbxSearch
END WINDOW // frmQSMain
frmQSMain.textSEARCH.SETFOCUS
frmQSMain.Activate
return
FUNCTION OPNFLS()
/**************/
LOCAL CF
SELECT 1
USE p:\franco\INV SHARED
INDEX ON NUM1 TO mem:NUM1
RETURN
FUNCTION CLSFLS()
/*************/
CLOSE ALL
RETURN
FUNCTION Append_Record()
/***********************/
OPNFLS()
INV->( DBAPPEND())
INV->( FIELDPUT(1, 'a' + ALLTRIM(STR(20 + RECNO())) ))
INV->( FIELDPUT(2, 'PARTa' ))
CLSFLS()
FUNCTION EDITINV(tvalue)
/***************************/
OPNFLS()
GOTO(tvalue)
MSGINFO ( NUM1 + ' ' + NUM2)
CLSFLS()