If you would like to change the data of Presta direct, try this code. Just tried it myself and working (change your data, PW,..)
Second a folder with some Xbrowses.
static function Prestabeheer()
聽 聽local oDlg, oFont, nWild := 1, cZoek:=""
聽 聽local cList, aFlds, aHdrs, oBold
聽 聽local nChoice, uDataSource, nCombo1:= 1 , nCombo2:= 1
聽 聽local aTabs:={"Kleuren","Volgorde"}
聽 聽local oBrw[5]
聽 聽Public oRsATT
聽 Public cServer 聽 聽 := "YOUR DATA HERE"
聽 Public cDataBase 聽 := ""
聽 Public cUser 聽 聽 聽 := ""
聽 Public cPassWord 聽 := ""
聽 Public oCn, oRs, oRsATT, oRsVolgorde
聽 FWCONNECT oCn HOST cServer USER cUser PASSWORD cPassword DATABASE cDatabase
聽 if oCn == nil
聽 聽 聽? "Failed to connect"
聽 聽 聽return nil
聽 endif
聽 oRsProduct := oCn:RowSet( "select * from ps_product_lang " )
聽 xbrowse(oRsProduct)
聽 cZoek := "1"
聽 oRs := oCn:RowSet( "select * from `ps_attribute` where `id_attribute` = ? ", { cZoek } )
聽 oRsAtt:= oCn:RowSet( "SELECT * FROM `ps_attribute_lang` where `id_lang` = ? ORDER BY id_attribute", { "1" } )
聽 cDbf:="c:\data\temp.dbf"
聽 oRsAtt:savework(cDbf)
聽 oRsGroepen:= oCn:RowSet( "SELECT * FROM `ps_category_lang` where `id_lang` = ? ", { "1" } )
聽 cZoekProduct := "77"
聽 oRsvolgorde:= oCn:RowSet( "SELECT * FROM `ps_category_product` where `id_category` = ? ", { cZoekProduct } )
聽 oRsvolgorde:= oCn:RowSet( "SELECT *,P.description_short AS PName FROM ps_category_product C LEFT JOIN ps_product_lang P ON C.id_product WHERE id_category = ?" )
聽 聽DEFINE FONT oBold NAME 'CALIBRI' SIZE 0,-12 BOLD
聽 聽DEFINE FONT oFont NAME "CALIBRI" SIZE 0,-12
聽 聽DEFINE FONT oFontS NAME "Segoe UI" SIZE 0,-09
聽 聽DEFINE DIALOG oDlg SIZE 1410,800 PIXEL TRUEPIXEL ;
聽 聽STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU,WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_THICKFRAME );
聽 聽TITLE "Ploegen";
聽 聽GRADIENT { { 1, nRGB( 125, 155, 175 ), nRGB( 125, 155, 175 ) } }
聽 聽DEFINE BUTTONBAR oBar OF oDlg SIZE 56,56 2007
聽 聽@ 90,05 FOLDER oFld SIZE 1400,700 PIXEL OF oDlg ITEMS aTabs
///////////////////////////////////////////////////////////////// 聽BRW FOLDER 1 /////////////////////////////////////////////////
聽 聽aVelden1 := 聽{ ;
聽 聽{ "id_attribute" 聽 , "ID" 聽 聽 聽 聽 聽,nil, 聽50 }, ; // 1
聽 聽{ "id_lang" 聽 聽 聽 聽, "Taal" 聽 聽 聽 聽,nil, 聽50 }, ; // 2
聽 聽{ "name" 聽 聽 聽 聽 聽 , "Kleurnaam" 聽 ,nil, 100 }} 聽 // 9
聽 聽@ 1,1 XBROWSE oBrw[1] size 1400,100 PIXEL OF 聽oFld:aDialogs[ 1 ] font oFont ;
聽 聽 聽 DATASOURCE oRsATT;
聽 聽 聽 COLUMNS aVelden1;
聽 聽 聽 AUTOSORT CELL LINES NOBORDER FOOTERS
聽 聽 聽 //FASTEDIT
聽 聽 聽oBrw[1]:nEditTypes = EDIT_GET
聽 聽 聽oBrw[1]:SetChecks()
聽 聽 聽oBrw[1]:lF2KeyToEdit := .t. 聽// Edit when F2 is pressed
聽 聽 聽oBrw[1]:nHeadStrAligns 聽:= AL_CENTER
聽 聽WITH OBJECT oBrw[1]
聽 聽 聽 :lColChangeNotify := .t.
聽 聽 聽 :oHeaderFonts 聽 聽 := oBold
聽 聽 聽 :bClrEdits 聽 聽 聽 聽:= { || { CLR_BLACK, CLR_YELLOW }}
聽 聽 聽 :bClrRowFocus 聽 聽 := { || { CLR_BLACK, RGB(185,220,255) } }
聽 聽 聽 :nColDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :nRowDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :bClrRowFocus 聽 聽 := { || { CLR_BLACK, RGB(185,220,255) } }
聽 聽 聽 :nMarqueeStyle 聽 聽:= MARQSTYLE_HIGHLROWMS
聽 聽 聽 :bOnChange 聽 聽 := { || oRs:Requery( { oBrw[1]:ID:Value } ), oBrw[2]:refresh() }
聽 聽 聽 :bRClicked 聽 聽 聽 聽:= {|nRow, nCol| Prestapop( nRow,nCol, oBrw[1], oRsATT ),oBrw[1]:refresh() }
聽 聽 聽 :bKeyDown 聽 := { |nKey| If( nKey == VK_DELETE, 聽oBrw[1]:kleurnaam:varput("##DEL"+oBrw[1]:kleurnaam:value), nil ) 聽}
聽 聽 聽 :lFooter 聽 聽 聽 聽 聽:= .t.
聽 聽 聽 :bRecSelHeader 聽 聽:= { || "RowNo" }
聽 聽 聽 :bRecSelData 聽 聽 聽:= { |o| o:KeyNo }
聽 聽 聽 :bRecSelFooter 聽 聽:= { |o| o:nLen }
聽 聽 聽 :oRecSelFont 聽 聽 聽:= oFont 聽// optional
聽 聽 聽 :nRecSelWidth 聽 聽 := "99999" // required size
聽 聽END
聽 聽oBrw[1]:CreateFromCode()
///////////////////////////////////////////////////////////////// 聽BRW FOLDER 2 /////////////////////////////////////////////////
聽 聽aVelden2 := 聽{ ;
聽 聽{ "id_attribute" 聽 聽 聽, "ID" 聽 聽 聽 ,nil, 聽50 }, ; // 1
聽 聽{ "id_attribute_group", "Groep" 聽 聽,nil, 聽50 }, ; // 2
聽 聽{ "color" 聽 聽 聽 聽 聽 聽 , "Kleur" 聽 聽,nil, 聽55 }, ; 聽 // 9
聽 聽{ "id_attribute" 聽 聽 聽, "File" 聽 聽 ,nil, 聽70 }} 聽 // 9
聽 聽@ 105,1 XBROWSE oBrw[2] size 1400,200 PIXEL OF 聽oFld:aDialogs[ 1 ] font oFont ;
聽 聽 聽 DATASOURCE oRs;
聽 聽 聽 COLUMNS aVelden2;
聽 聽 聽 AUTOSORT CELL LINES NOBORDER FOOTERS
聽 聽 聽oBrw[2]:nRowHeight:= 70
聽 聽 聽oBrw[2]:nEditTypes = EDIT_GET
聽 聽 聽oBrw[2]:SetChecks()
聽 聽 聽oBrw[2]:lF2KeyToEdit := .t. 聽// Edit when F2 is pressed
聽 聽 聽oBrw[2]:nHeadStrAligns 聽:= AL_CENTER
聽 聽 聽oBrw[2]:kleur:bClrStd := { || showcolors(oBrw[2]:kleur:Value) 聽}
聽 聽WITH OBJECT oBrw[2]
聽 聽 聽 :lColChangeNotify := .t.
聽 聽 聽 :oHeaderFonts 聽 聽 := oBold
聽 聽 聽 :nColDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :nRowDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 WITH OBJECT :file
聽 聽 聽 聽:bStrImage 聽 聽 := { || "d:\pictures\kleuronline\"+alltrim(str(oBrw[2]:SelectedCol():Value))+".jpg" }
聽 聽 聽 聽:oDataFont 聽 聽 := oFontS
聽 聽 聽 聽:nDataStrAlign := AL_CENTER + AL_BOTTOM
聽 聽 聽 聽:nDataBmpAlign := AL_CENTER
聽 聽 聽 聽:aImgRect 聽 聽 聽:= { nil, nil, -10, nil }
聽 聽 聽 聽END
聽 聽END
聽 聽oBrw[2]:CreateFromCode()
///////////////////////////////////////////////////////////////// 聽/////////////////////////////////////////////////
聽 聽aVelden4 := 聽{ ;
聽 聽{ "id_category" 聽 聽, "Cat_ID" 聽 聽 聽 聽 聽,nil, 聽50 }, ; // 1
聽 聽{ "name" 聽 聽 聽 聽 聽 , "Naam" 聽 聽 聽 聽 聽 聽,nil, 聽200 }, ; // 2
聽 聽{ "position" 聽 聽 聽 , "Pos" 聽 聽 聽 聽 聽 聽 ,nil, 聽50 }} 聽 // 9
聽 聽@ 1,1 XBROWSE oBrw[4] size 1100,100 PIXEL OF 聽oFld:aDialogs[ 2 ] font oFont ;
聽 聽 聽 DATASOURCE oRsgroepen;
聽 聽 聽 COLUMNS aVelden4;
聽 聽 聽 AUTOSORT CELL LINES NOBORDER FOOTERS
聽 聽 聽 //FASTEDIT
聽 聽 聽oBrw[4]:nEditTypes = EDIT_GET
聽 聽 聽oBrw[4]:SetChecks()
聽 聽 聽oBrw[4]:lF2KeyToEdit := .t. 聽// Edit when F2 is pressed
聽 聽 聽oBrw[4]:nHeadStrAligns 聽:= AL_CENTER
聽 聽WITH OBJECT oBrw[4]
聽 聽 聽 :lColChangeNotify := .t.
聽 聽 聽 :oHeaderFonts 聽 聽 := oBold
聽 聽 聽 :bClrEdits 聽 聽 聽 聽:= { || { CLR_BLACK, CLR_YELLOW }}
聽 聽 聽 :bClrRowFocus 聽 聽 := { || { CLR_BLACK, RGB(185,220,255) } }
聽 聽 聽 :nColDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :nRowDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :bClrRowFocus 聽 聽 := { || { CLR_BLACK, RGB(185,220,255) } }
聽 聽 聽 :nMarqueeStyle 聽 聽:= MARQSTYLE_HIGHLROWMS
聽 聽 聽 :lFooter 聽 聽 聽 聽 聽:= .t.
聽 聽 聽 :bRecSelHeader 聽 聽:= { || "RowNo" }
聽 聽 聽 :bRecSelData 聽 聽 聽:= { |o| o:KeyNo }
聽 聽 聽 :bRecSelFooter 聽 聽:= { |o| o:nLen }
聽 聽 聽 :oRecSelFont 聽 聽 聽:= oFont 聽// optional
聽 聽 聽 :nRecSelWidth 聽 聽 := "99999" // required size
聽 聽 聽 :bOnChange 聽 聽 := { || oRSNewGroep(oBrw[4]:cat_id:Value), oBrw[3]:refresh() }
聽 聽END
聽 聽oBrw[4]:CreateFromCode()
///////////////////////////////////////////////////////////////// 聽BRW FOLDER 3 /////////////////////////////////////////////////
聽 聽aVelden3 := 聽{ ;
聽 聽{ "id_category" 聽 聽, "Cat_ID" 聽 聽 聽 聽 聽,nil, 聽50 }, ; // 1
聽 聽{ "id_product" 聽 聽 , "Product_ID" 聽 聽 聽,nil, 聽70 }, ; // 2
聽 聽{ "position" 聽 聽 聽 , "Pos" 聽 聽 聽 聽 聽 聽 ,nil, 聽50 }, ; 聽 // 9
聽 聽{ "oRsProduct:description_short" 聽 聽 聽 , "Naam" 聽 聽 聽 聽 聽 聽 ,nil, 聽150 }} 聽 // 9
聽 聽@ 110,1 XBROWSE oBrw[3] size 1100,200 PIXEL OF 聽oFld:aDialogs[ 2 ] font oFont ;
聽 聽 聽 DATASOURCE oRsvolgorde;
聽 聽 聽 COLUMNS aVelden3;
聽 聽 聽 AUTOSORT CELL LINES NOBORDER FOOTERS FASTEDIT
聽 聽 聽//oBrw[3]:nEditTypes = EDIT_GET
聽 聽 聽oBrw[3]:SetChecks()
聽 聽 聽oBrw[3]:lF2KeyToEdit := .t. 聽// Edit when F2 is pressed
聽 聽 聽//oBrw[3]:nHeadStrAligns 聽:= AL_CENTER
聽 聽WITH OBJECT oBrw[3]
聽 聽 聽 :lColChangeNotify := .t.
聽 聽 聽 //:oHeaderFonts 聽 聽 := oBold
聽 聽 聽 :bClrEdits 聽 聽 聽 聽:= { || { CLR_BLACK, CLR_YELLOW }}
聽 聽 聽 :bClrRowFocus 聽 聽 := { || { CLR_BLACK, RGB(185,220,255) } }
聽 聽 聽 :nColDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :nRowDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 :bClrRowFocus 聽 聽 := { || { CLR_BLACK, RGB(185,220,255) } }
聽 聽 聽 :nMarqueeStyle 聽 聽:= MARQSTYLE_HIGHLROWMS
聽 聽 聽 //:bOnChange 聽 聽 := { || oRs:Requery( { oBrw[1]:ID:Value } ), oBrw[2]:refresh() }
聽 聽 聽 :lFooter 聽 聽 聽 聽 聽:= .t.
聽 聽 聽 :bRecSelHeader 聽 聽:= { || "RowNo" }
聽 聽 聽 :bRecSelData 聽 聽 聽:= { |o| o:KeyNo }
聽 聽 聽 :bRecSelFooter 聽 聽:= { |o| o:nLen }
聽 聽 聽 :oRecSelFont 聽 聽 聽:= oFont 聽// optional
聽 聽 聽 :nRecSelWidth 聽 聽 := "99999" // required size
聽 聽END
聽 聽oBrw[3]:CreateFromCode()
///////////////////////////////////////////////////////////////// 聽/////////////////////////////////////////////////
// 聽 BrwBarploegen( oBar, oBrw )
聽 聽ACTIVATE DIALOG oDlg CENTERED
聽 聽RELEASE FONT oFont
聽 聽oCn:close()
return nil