Hola,
Este post de Mr. Rao es muy interesante y ahorra mucho código:
viewtopic.php?f=3&t=27180
Este post de Mr. Rao es muy interesante y ahorra mucho código:
viewtopic.php?f=3&t=27180
#include "fivewin.ch"
#include "xbrowse.ch"
#include "adodef.ch"
REQUEST DBFCDX
static aHead
static cFolder := "c:\fwh\samples\\"
//----------------------------------------------------------------------------//
function Main()
local cust_table
cust_table := OpenCust()
BrowseTable( cust_table )
CloseTable ( cust_table )
return nil
//----------------------------------------------------------------------------//
// TESTING XBROWSE BUILTIN ADD/EDIT/DELETE
//----------------------------------------------------------------------------//
static function BrowseTable( uData )
local oDlg, oBrw, oFont, oRec
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
DEFINE DIALOG oDlg SIZE GetSysMetrics(0) * 0.9,400 PIXEL FONT oFont ;
TITLE "XBROWSE/ADD/EDIT/DELETE : " + FWVERSION
@ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg DATASOURCE uData ;
AUTOCOLS AUTOSORT FOOTERS CELL LINES NOBORDER
WITH OBJECT oBrw
:bEdit := { |oRec| CustEditDlg( oRec ) }
if ValType( uData ) == 'A'
:cHeaders := aHead
endif
:nEditTypes := EDIT_GET
:Married:SetCheck()
:CreateFromCode()
END
@ 10, 10 BUTTON "Edit" SIZE 40,12 PIXEL OF oDlg ACTION oBrw:Edit()
@ 10, 60 BUTTON "Append" SIZE 40,12 PIXEL OF oDlg ACTION oBrw:Edit( .t. )
@ 10,110 BUTTON "Delete" SIZE 40,12 PIXEL OF oDlg ACTION oBrw:Delete()
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
//----------------------------------------------------------------------------//
static function OpenCust()
local nChoice, cust_table
nChoice := Alert( "Choose DataSource", { "DBF", "ARRAY", "TDATABASE", "ADO", "Quit" }, "DATASOURCE" )
if nChoice <= 3
USE ( cFolder + "CUSTOMER" ) NEW ALIAS CUST SHARED VIA "DBFCDX"
if nChoice == 1
cust_table := Alias()
elseif nChoice == 2
cust_table := FW_DbfToArray()
aHead := ArrTranspose( DbStruct() )[ 1 ]
DBCLOSEAREA()
else
DATABASE cust_table
endif
elseif nChoice == 4
cust_table := FW_OpenRecordSet( cFolder + "xbrtest.mdb", "CUSTOMER" )
else
QUIT
endif
return cust_table
//----------------------------------------------------------------------------//
static function CloseTable( cust_table )
if ValType( cust_table ) == 'C'
( cust_table )->( DbCloseArea() )
elseif ValType( cust_table ) == 'O'
cust_table:Close()
if cust_table:ClassName() == "TOLEAUTO"
cust_table:ActiveConnection:Close()
endif
endif
return nil
//----------------------------------------------------------------------------//
init procedure PrgInit
SET DATE ITALIAN
SET CENTURY ON
SET DELETED ON
SET EXCLUSIVE OFF
XbrNumFormat( 'A', .t. )
SetKinetic( .f. )
SetGetColorFocus()
return
//----------------------------------------------------------------------------//
static function CustEditDlg( oRec )
local oDlg, oFont, oGrp
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
DEFINE DIALOG oDlg SIZE 618,382 PIXEL FONT oFont TITLE "CUSTOMER"
@ 0, 4 GROUP oGrp TO 168, 305 OF oDlg PIXEL
@ 12, 10 SAY "First:" OF oDlg SIZE 15, 8 PIXEL
@ 10, 44 GET oRec:First OF oDlg SIZE 105, 12 PIXEL UPDATE
if oRec:FieldPos( "ID" ) > 0
@ 12, 200 SAY If( oRec:RecNo == 0, "NEW RECORD", "ID " + cValToChar( oRec:ID ) ) SIZE 80,8 PIXEL UPDATE
else
@ 12, 200 SAY If( oRec:RecNo == 0, "NEW RECORD", "RecNo " + cValToChar( oRec:RecNo ) ) SIZE 80,8 PIXEL UPDATE
endif
@ 26, 10 SAY "Last:" OF oDlg SIZE 15, 8 PIXEL
@ 24, 44 GET oRec:Last OF oDlg SIZE 105, 12 PIXEL UPDATE
@ 40, 10 SAY "Street:" OF oDlg SIZE 21, 8 PIXEL
@ 38, 44 GET oRec:Street OF oDlg SIZE 155, 12 PIXEL UPDATE
@ 54, 10 SAY "City:" OF oDlg SIZE 13, 8 PIXEL
@ 52, 44 GET oRec:City OF oDlg SIZE 155, 12 PIXEL UPDATE
@ 68, 10 SAY "State:" OF oDlg SIZE 19, 8 PIXEL
@ 66, 44 GET oRec:State OF oDlg SIZE 15, 12 PIXEL UPDATE
@ 82, 10 SAY "Zip:" OF oDlg SIZE 12, 8 PIXEL
@ 80, 44 GET oRec:Zip OF oDlg SIZE 55, 12 PIXEL UPDATE
@ 96, 10 SAY "Hiredate:" OF oDlg SIZE 29, 8 PIXEL
@ 94, 44 GET oRec:Hiredate OF oDlg SIZE 44, 12 PIXEL UPDATE
@ 108, 44 CHECKBOX oRec:Married PROMPT "&Married:" OF oDlg SIZE 43, 12 PIXEL UPDATE
@ 124, 10 SAY "Age:" OF oDlg SIZE 15, 8 PIXEL
@ 122, 44 GET oRec:Age OF oDlg SIZE 12, 12 PIXEL UPDATE PICTURE "99"
@ 138, 10 SAY "Salary:" OF oDlg SIZE 21, 8 PIXEL
@ 136, 44 GET oRec:Salary OF oDlg SIZE 40, 12 PIXEL UPDATE PICTURE "999999.99"
@ 152, 10 SAY "Notes:" OF oDlg SIZE 21, 8 PIXEL
@ 150, 44 GET oRec:Notes OF oDlg SIZE 255, 12 PIXEL UPDATE
@ 172, 175 BUTTON "&Undo" OF oDlg SIZE 42, 14 PIXEL WHEN oRec:Modified() ACTION ( oRec:UnDo(), oDlg:Update() )
@ 172, 219 BUTTON "&Save" OF oDlg SIZE 42, 14 PIXEL WHEN oRec:Modified() ACTION ( oRec:Save(), oDlg:Update() )
@ 172, 263 BUTTON "&Close" OF oDlg SIZE 42, 14 PIXEL CANCEL ACTION ;
( If( oRec:Modified() .and. MsgYesNo( "Save Changes ?" ), oRec:Save(), nil ), oDlg:End() )
AEval( oDlg:aControls, { |o| If( o:ClassName == "TGET", o:bValid := { || oDlg:AEvalWhen(), .t. }, nil ) } )
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nilMuchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.