Grid error while editing data

Source code related resources

Moderator: Rathinagiri

Post Reply
User avatar
mol
Posts: 3789
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Grid error while editing data

Post by mol »

I have a strange error while editing data in Virtual Grid.
I declrare 6 columns, key Alt+A can be used to add empty row. Then, clicking in first column you can edit 5 columns, but next ENTER key doesn't move focus to column 6.
When I click by the mouse on the column 6, I can ener value, but it causes an error in VALID block which saves data to an array.

Can somebody try to compile my sample?

Code: Select all

#include "hmg.ch"

#define COL_RECNO	7

FUNCTION Main()

	public aStru 
	PUBLIC aData := {}

	private abValid := array(6)
	private bValid := {|| UpdateData()}
	
	
	SET LANGUAGE TO POLISH 
	HB_LANGSELECT('PL')
	HB_SETCODEPAGE("PL852") 
	SET DELETED ON
	SET CENTURY ON
	SET DATE TO GERMAN

	// tablica bloków walidacyjnych
	
	aFill(abValid, bValid)
	
	aStru := {;
		{ "NAZWA",     "C", 30, 0 },;
		{ "UZYTKOWNIK","C", 30, 0 },;
		{ "HASLO",     "C", 30, 0 },;
		{ "SCIEZKA",   "C", 80, 0 },;
		{ "FIRMA",     "C", 50, 0 },;
		{ "Link_d",    "C",254, 0 } }

	scr := ""
	if .not.file(scr+"linki.dbf")
		
		DBCREATE( scr+"LINKI.DBF", aStru )
	endif

   USE (scr+"LINKI.DBF") SHARED alias linki
   GO TOP


	// Insert data to an array
	aData:={}
	i=0
	DO WHILE !EOF()
		AADD(aData, { linki->nazwa, linki->uzytkownik, linki->haslo, linki->sciezka,linki->firma,linki->link_d, linki->(recNo()) })
		SKIP
		i+=1
	ENDDO
	
   DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 1500 HEIGHT 800 MAIN ;
      TITLE 'Link view/edit - Alt+A adds empty row to grid, try to edit it'

	@ 10,10 GRID Grid_1 ;
		WIDTH 1400 ;
		HEIGHT 700 ;
		HEADERS { "NAZWA", "UZYTKOWNIK", "HASLO", "SCIEZKA", "FIRMA","Link długi" } ;		
		WIDTHS { 200, 200, 200, 300, 200 ,400} ;
		ITEMS NIL ;
		EDIT ;
		VIRTUAL ;
		ON QUERYDATA Grid_1_OnQueryData();
		JUSTIFY { GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT};
		COLUMNVALID abValid


	@ 720, 10 BUTTON BT_Save ;
		CAPTION 'Zapisz zmiany' ;
		WIDTH 120 HEIGHT 28 ;
		ACTION SaveDBF()

   END WINDOW

	ON KEY ALT+Q OF FORM_1 ACTION FORM_1.RELEASE
	ON KEY ALT+A OF FORM_1 ACTION AddEmptyRowtoArray()
	Form_1.Grid_1.ItemCount := len(aData)
	Form_1.CENTER
   Form_1.ACTIVATE

RETURN NIL
*----------------------
function Grid_1_OnQueryData
	local nRow, nCol
	
	nRow := This.QueryRowIndex
	nCol := This.QueryColIndex
	
	if nRow>0 .and. nCol >0
		This.QueryData := aData[nRow, nCol]
	endif

return
*----------------------
function AddEmptyRowtoArray
	local i
	local aEmptyRow := {}
	
	for i:=1 to len(aStru)
		if aStru[i, 2] == "C"
			aAdd(aEmptyRow, "")
		elseif aStru[i, 2] == "N"
			aAdd(aEmptyRow, 0)
		elseif aStru[i, 2] == "L"
			aAdd(aEmptyRow, .f.)
		elseif aStru[i, 2] == "D"
			aAdd(aEmptyRow, 0d0)
		endif 
	next i
	// and one another clumn for #recno
	aAdd(aEmptyRow, 0)
	aAdd(aData, aEmptyRow)
	Form_1.Grid_1.ItemCount := len(aData)
	Form_1.Grid_1.Value := { len(aData), 1 }
return
*----------------------
FUNCTION UpdateData
	
	local nRow, nCol, xValue
	
	nRow := this.CellRowIndex
	nCol := this.CellColIndex
	xValue := this.CellValue
	
	MsGDebug("Writing to aData[" + hb_ntos(nRow) + ","+ hb_ntos(nCol)+"]", xValue)
	aData[nRow, nCol] := xValue
	
RETURN .t.
*----------------------
FUNCTION SaveDBF
	MsgStop("function in progress...")
RETURN
Error below:

Code: Select all

Date:08.09.2025 Time: 17:31:26
Error BASE/1132 Błąd zakresu tablicy: Nieprawidłowa liczba argumentów
Called from UPDATEDATA(128) 
Called from (b)MAIN(11) 
Called from _DOCONTROLEVENTPROCEDURE(6033) 
Called from _HMG_GRIDINPLACEEDITOK(1513) 
Called from (b)_HMG_GRIDINPLACEEDIT(1066) 
Called from _DOCONTROLEVENTPROCEDURE(6033) 
Called from EVENTS(821) 
Called from DOMESSAGELOOP(0) 
Called from _ACTIVATEWINDOW(5694) 
Called from _HMG_GRIDINPLACEEDIT(1299) 
Called from _HMG_GRIDINPLACEKBDEDIT(1753) 
Called from EVENTS(2213) 
Called from DOMESSAGELOOP(0) 
Called from _ACTIVATEWINDOW(5694) 
Called from DOMETHOD(9080) 
Called from MAIN(81) 
User avatar
nekbmm
Posts: 125
Joined: Sat Jul 16, 2016 3:16 am
DBs Used: DBF,SQLite
Location: Ivanjica, Serbia

Re: Grid error while editing data

Post by nekbmm »

mol wrote: Mon Sep 08, 2025 3:36 pm I have a strange error while editing data in Virtual Grid.
I declrare 6 columns, key Alt+A can be used to add empty row. Then, clicking in first column you can edit 5 columns, but next ENTER key doesn't move focus to column 6.
When I click by the mouse on the column 6, I can ener value, but it causes an error in VALID block which saves data to an array.

Can somebody try to compile my sample?

It's the same for me!
I'm using hmg 3.44.

Pozdrav NEX.
User avatar
gfilatov
Posts: 1095
Joined: Fri Aug 01, 2008 5:42 am
Location: Ukraine
Contact:

Re: Grid error while editing data

Post by gfilatov »

Hi Marek,

I confirm also this issue.

There is a workaround for the problem: your last column should have a lenght to show this column on screen entirely at initializing your grid.

Please review the updated working code below.

Code: Select all

#include "hmg.ch"

#define COL_RECNO	7

FUNCTION Main()

	public aStru 
	PUBLIC aData := {}

	private abValid := array(6)
	private bValid := {|| UpdateData()}
	
	
	SET LANGUAGE TO POLISH 
	HB_LANGSELECT('PL')
	HB_SETCODEPAGE("PL852") 
	SET DELETED ON
	SET CENTURY ON
	SET DATE TO GERMAN

	// tablica bloków walidacyjnych
	
	aFill(abValid, bValid)
	
	aStru := {;
		{ "NAZWA",     "C", 30, 0 },;
		{ "UZYTKOWNIK","C", 30, 0 },;
		{ "HASLO",     "C", 30, 0 },;
		{ "SCIEZKA",   "C", 80, 0 },;
		{ "FIRMA",     "C", 50, 0 },;
		{ "Link_d",    "C",254, 0 } }

	scr := ""
	if .not.file(scr+"linki.dbf")
		
		DBCREATE( scr+"LINKI.DBF", aStru )
	endif

   USE (scr+"LINKI.DBF") SHARED alias linki
   GO TOP


	// Insert data to an array
	aData:={}
	i=0
	DO WHILE !EOF()
		AADD(aData, { linki->nazwa, linki->uzytkownik, linki->haslo, linki->sciezka,linki->firma,linki->link_d, linki->(recNo()) })
		SKIP
		i+=1
	ENDDO
	
   DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 1400 HEIGHT 800 MAIN ;
      TITLE 'Link view/edit - Alt+A adds empty row to grid, try to edit it'

	@ 10,10 GRID Grid_1 ;
		WIDTH 1350 ;
		HEIGHT 700 ;
		HEADERS { "NAZWA", "UZYTKOWNIK", "HASLO", "SCIEZKA", "FIRMA","Link długi" } ;		
		WIDTHS { 200, 200, 200, 300, 200 ,400} ;
		ITEMS NIL ;
		EDIT ;
		CELLNAVIGATION ;
		VIRTUAL ;
		ON QUERYDATA Grid_1_OnQueryData();
		JUSTIFY { GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT,GRID_JTFY_LEFT};
		COLUMNVALID abValid


	@ 720, 10 BUTTON BT_Save ;
		CAPTION 'Zapisz zmiany' ;
		WIDTH 120 HEIGHT 28 ;
		ACTION SaveDBF()

   END WINDOW

	ON KEY ALT+Q OF FORM_1 ACTION FORM_1.RELEASE
	ON KEY ALT+A OF FORM_1 ACTION AddEmptyRowtoArray()
	Form_1.Grid_1.ItemCount := len(aData)
	Form_1.Grid_1.ColumnWidth(6) := 230
	Form_1.CENTER
   Form_1.ACTIVATE

RETURN NIL
*----------------------
function Grid_1_OnQueryData
	local nRow, nCol
	
	nRow := This.QueryRowIndex
	nCol := This.QueryColIndex
	
	if nRow>0 .and. nCol >0
		This.QueryData := aData[nRow, nCol]
	endif

return
*----------------------
function AddEmptyRowtoArray
	local i
	local aEmptyRow := {}
	
	for i:=1 to len(aStru)
		if aStru[i, 2] == "C"
			aAdd(aEmptyRow, "")
		elseif aStru[i, 2] == "N"
			aAdd(aEmptyRow, 0)
		elseif aStru[i, 2] == "L"
			aAdd(aEmptyRow, .f.)
		elseif aStru[i, 2] == "D"
			aAdd(aEmptyRow, 0d0)
		endif 
	next i
	// and one another clumn for #recno
	aAdd(aEmptyRow, 0)
	aAdd(aData, aEmptyRow)
	Form_1.Grid_1.ItemCount := len(aData)
	Form_1.Grid_1.Value := { len(aData), 1 }
return
*----------------------
FUNCTION UpdateData
	
	local nRow, nCol, xValue
	
	nRow := this.CellRowIndex
	nCol := this.CellColIndex
	xValue := this.CellValue
	
	MsgDebug("Writing to aData[" + hb_ntos(nRow) + ","+ hb_ntos(nCol)+"]", xValue)
	aData[nRow, nCol] := xValue
	
RETURN .t.
*----------------------
FUNCTION SaveDBF
	MsgStop("function in progress...")
RETURN
Kind Regards,
Grigory Filatov

"Everything should be made as simple as possible, but no simpler." Albert Einstein
User avatar
mol
Posts: 3789
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: Grid error while editing data

Post by mol »

Yes, I saw that error doesn't occur when last column is whole visible.
Thank you Grigorij for your solution!
Post Reply