Eu preferia utilizar xharbour 1.23 ou harbour 3.2 com fivewin + maridb ou mysql que vem nativo no fivewin
Agora tudo depende do sistema que voce estar fazendo as alterações, porem já que vai fazer alterações eu passaria para fivewin com banco de dados nativo ( mariadb ou mysql )! eu utilizava o sqlrdd e estou mudando tudo para mariadb nativo do fivewin.
este exemplo pode ser compilado com xharbour e também com harbour neste caso expecifico o banco de dado estar nas nuvens!
function Main()
local oCn, oRs , oDlg, oBrw
FWNumFormat( "A", .t. )
oCn := FW_DemoDB(1)
// Faz a conexão com o banco de dados nas nuvens mas você apontar para o ip desejado.
// outra coisa pode embutir o sql no executável e assim dispensar a instalação do sql.
// Pra usar basta copiar em uma pasta
aStates := oCn:Execute( "SELECT CODE,NAME FROM states" )
oRs := oCn:RowSet( "SELECT ID,FIRST,CITY,SALARY FROM customer" )
DEFINE DIALOG oDlg SIZE 500,600 PIXEL TRUEPIXEL TITLE "Editar Registros "
@ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE oRs AUTOCOLS COLSIZES -4, -20, -20 CELL LINES NOBORDER FOOTERS
WITH OBJECT oBrw
:Salary:nFooterType := AGGR_SUM
:MakeTotals()
:CreateFromCode()
END
@ 20, 20 BTNBMP PROMPT "Adicionar" SIZE 100,30 PIXEL FLAT OF oDlg ACTION oRs:EditBaseRecord( nil, .t., { |oRec| MyEditDlg( oRec ) }, oBrw )
@ 20,130 BTNBMP PROMPT "Alterar" SIZE 100,30 PIXEL FLAT OF oDlg ACTION oRs:EditBaseRecord( nil, .f., { |oRec| MyEditDlg( oRec ) }, oBrw )
ACTIVATE DIALOG oDlg CENTERED
return nil
static function MyEditDlg( oRec )
local lNew := ( oRec:RecNo == 0 )
local oDlg, oFont
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE DIALOG oDlg SIZE 400,470 PIXEL TRUEPIXEL FONT oFont TITLE If( lNew, "Adicionar ", "Alterar" ) + " RECORD"
@ 030,020 SAY "ID :" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 060,020 SAY "First" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 090,020 SAY "Last" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 120,020 SAY "Street" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 150,020 SAY "City" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 180,020 SAY "State" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 210,020 SAY "Zip" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 240,020 SAY "HireDate" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 270,020 SAY "Married" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 300,020 SAY "Age" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 330,020 SAY "Salary" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 360,020 SAY "Notes" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 030,120 GET oRec:ID SIZE 100,22 PIXEL OF oDlg READONLY RIGHT
@ 060,120 GET oRec:First SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:First )
@ 090,120 GET oRec:Last SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:Last )
@ 120,120 GET oRec:Street SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:Street )
@ 150,120 GET oRec:City SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:City )
@ 180,120 DBCOMBO oRec:State SIZE 240,300 PIXEL OF oDlg ALIAS aStates ITEMFIELD "1" LISTFIELD "2"
@ 210,120 GET oRec:Zip SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:Zip )
@ 240,120 GET oRec:HireDate SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:HireDate )
@ 270,120 CHECKBOX oRec:Married PROMPT "" SIZE 22,22 PIXEL OF oDlg
@ 300,120 GET oRec:Age SIZE 240,22 PIXEL OF oDlg PICTURE "99" RIGHT VALID ( oRec:Age >= 20 )
@ 330,120 GET oRec:Salary SIZE 240,22 PIXEL OF oDlg PICTURE "999,999.99" RIGHT VALID ( oRec:Salary > 0 )
@ 360,120 GET oRec:Notes SIZE 240,22 PIXEL OF oDlg
@ 420,020 BTNBMP PROMPT "Salvar" SIZE 150,30 PIXEL FLAT OF oDlg ACTION ( If( oRec:Modified(), oRec:Save(), nil ), oDlg:End() )
@ 420,240 BTNBMP PROMPT "Cancelar" SIZE 150,30 PIXEL FLAT OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED ON PAINT oDlg:Box( 15, 10, 395, 390 )
return nil
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017