Este es un ejemplo de practica para ir entendiendo el manejo nativo de mysql
Code: Select all
#include "fivewin.ch"
STATIC oConn
Function main()
local lDBOk, aStru, cQuery, oQry
FWCONNECT oConn HOST "127.0.0.1" USER "root" PASSWORD "1234" DB "fwhnativo" PORT 3306
IF oConn==nil
? "ERROR DE CONEXION"
RETURN NIL
ENDIF
//-----------------------------------------------------------------
aStru := { { "id_cliente", "+", 11, 0 },;
{ "name", "C", 100, 0,"utf8" } }
oConn:DropTable( "clientes" )
oConn:CreateTable( "clientes", aStru, , "utf8" )
oConn:Insert( "clientes", "name", { 'Distribuidora Pepe' } )
oConn:Insert( "clientes", "name", { 'Estacion de Servicio YPF' } )
oConn:Insert( "clientes", "name", { 'Agropecuaria Venado' } )
//-----------------------------------------------------------------
aStru := { { "id_venta", "+", 11, 0 },;
{ "id_cliente", "INT", 11, 0 },;
{ "fecha", "D", 8, 0 },;
{ "cpte", "C", 15, 0,"utf8" },;
{ "importe", "N", 12, 2 } }
oConn:DropTable( "ventas" )
if !oConn:TableExists( "ventas" )
oConn:CreateTable( "ventas", aStru, , "utf8" )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 1,'2019-07-01','Factura',1200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 2,'2019-07-01','Factura',2400 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 3,'2019-07-01','Factura',3500 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 2,'2019-07-01','Factura', 200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 3,'2019-07-01','Factura',1000 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 1,'2019-07-01','Factura', 950 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 2,'2019-07-01','Factura', 350 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 2,'2019-07-01','Factura',9500 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 3,'2019-07-01','Factura',2200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 2,'2019-07-01','Factura',3200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 1,'2019-07-01','Factura',4200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 3,'2019-07-01','Factura',5200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 3,'2019-07-01','Factura',5200 } )
oConn:Insert( "ventas", "id_cliente,fecha,cpte,importe", { 1,'2019-07-01','Factura',6200 } )
ENDIF
//-----------------------------------------------------------------
if !oConn:TableExists( "ventas_item" )
oConn:CreateTable( "ventas_item", { ;
{ "id_item", '+', 11, 0 }, ;
{ "id_venta", "REFERENCES ventas(id_venta) ON UPDATE CASCADE ON DELETE CASCADE" },;
{ "cantidad", 'N', 12, 2 }, ;
{ "precio_unitario", 'N', 12, 2 }, ;
{ "fecha_creada", '=', 8, 0 };
}, nil, "utf8" )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 1,2,600 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 2,3,800 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 3,1,3500 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 4,2, 100 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 5,2, 500 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 6,1, 950 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 7,1, 350 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 8,1,9500 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", { 9,2,1100 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", {10,1,3200 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", {11,1,4200 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", {12,1,5200 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", {13,1,5200 } )
oConn:Insert( "ventas_item", "id_venta,cantidad,precio_unitario", {14,1,6200 } )
endif
brw()
Return nil
// EDICION DE VENTAS CON LEFT JOIN A CLIENTES
function brw()
local oDlg, oQry, oBrw
oQry := oConn:RowSet("SELECT t1.*, t2.name FROM ventas t1 LEFT JOIN clientes t2 ON t1.id_cliente=t2.id_cliente WHERE t1.id_venta=6")
xbrowse(oQry)
DEFINE DIALOG oDlg SIZE 400,470 PIXEL TRUEPIXEL
@ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg;
DATASOURCE oQry AUTOCOLS;
COLSIZES -4, -20, -20;
CELL LINES NOBORDER FOOTERS
oQry:EditBaseRecord( nil, .f., { |oRec| MyEditDlg( oRec ) }, oBrw )
ACTIVATE DIALOG oDlg
xBrowse(oQry)
return nil
//--------------------------------------------------------------------------
function MyEditDlg( oRec )
local lNew := ( oRec:RecNo == 0 )
local oDlg, oFont
LOCAL cCliente // :=oRec:aData["name"]
xbrowse(oRec:aData)
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE DIALOG oDlg SIZE 400,470 PIXEL TRUEPIXEL FONT oFont;
TITLE If( lNew, "ADD NEW ", "EDIT" ) + " RECORD"
@ 030,020 SAY "ID Cliente:" 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 "Cliente" SIZE 80,20 PIXEL OF oDlg RIGHT
@ 030,120 GET oRec:id_cliente SIZE 100,22 PIXEL OF oDlg READONLY RIGHT
@ 060,120 GET oRec:fecha SIZE 240,22 PIXEL OF oDlg VALID !Empty( oRec:fecha )
@ 090,120 GET oRec:importe SIZE 240,22 PIXEL OF oDlg PICTURE "999999.99" VALID !Empty( oRec:importe )
@ 120,120 GET cCliente SIZE 240,22 PIXEL OF oDlg READONLY
@ 420,020 BTNBMP PROMPT "Save" SIZE 150,30 PIXEL FLAT OF oDlg ;
ACTION ( If( oRec:Modified(), oRec:Save(), nil ), oDlg:End() ) WHEN oRec:Modified()
@ 420,240 BTNBMP PROMPT "Cancel" SIZE 150,30 PIXEL FLAT OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
//ON PAINT oDlg:Box( 15, 10, 395, 390 )
xBrowse(oRec:aData)
return nil
//--------------------------------------------------------------------------
Saludos