Page 1 of 1

fw + mysql + ado

Posted: Wed Sep 20, 2006 7:38 pm
by RMC
Hola,
Estoy haciendo un sistemita basico con FW y MYSQL. Ya tengo la conexion con ODBC y puedo conectarme y leer datos. lo que no puedo hacer es actualizar datos...

alguien tiene algun ejemplo basico de como actualizar datos utilizando variables del programa en FW y pasandolas a algo como esto ?

csql:="UPDATE prontuario set c11 = ' "+ STR(CANT) + " ' where cod = ' CODINST ' "

he visto que estan mencionando ADO como una mejor solucion para accesor BD SQl.

1.- Se puede usar con FW ?

2.- Alguien tiene un ejemplo de los pasos basicos ?

-- abrirla
-- consultar
-- actualizar por medio de bsuquedas etc...


Gracias

fw + mysql + ado

Posted: Fri Sep 22, 2006 2:23 am
by nazariosn
RMC

Ejemplo: Completo

*-
*- Programa : CAT_USU.PRG
*- Sistema : Nombre del Sistema
*- Ambiente : Clipper 5.X, FiveWin 1.95, Blinker 3.2
*- Autor : Sistemas 2002
*- Fecha : 08/11/04
*- Versión : Versión Genera 1.0, nazariosn@yahool.com.mx
*-
#INCLUDE 'FIVEWIN.CH' // Cabezera de FW
#INCLUDE 'REPORT.CH' // Cabezera de Reportes
#include "sql.ch"
#include "error.ch"

STATIC oLbx, oDlg // oLbx=Browser, oDlg=Datos
STATIC lEsAlta,; // Para el control de los Botones Activar/NoActivar
lEsModi,; // Para el control de los Botones Activar/NoActivar
lNoEdita,; // Para el control de los Botones Activar/NoActivar
lGuarda // Para el control de los Botones Activar/NoActivar
STATIC oGets,; // Optimizar el uso de la memoria, arreglo de Objetos para los Gets
oObjs,; // Optimizar el uso de la memoria, arreglo de Objetos para los Objetos
oSays,; // Optimizar el uso de la memoria, arreglo de Objetos para los Says
oBtns,; // Optimizar el Uso de los Botones
aRec // Coordenadas del Calendario, Ing. Alfredo Arteaga
STATIC T_Dir, T_Num

//------------------------------------------------------------------
FUNCTION CAT_USU(oOdbc)
LOCAL ocurDedo
LOCAL criterio := "SELECT * from Cat_USU Order By mater,juzas"
LOCAL oQuery
LOCAL Puntero:=oOdbc


DEFINE CURSOR oCurDedo RESOURCE "Dedo"

lEsAlta:=.F.
lEsModi:=.F.
lNoEdita:=.F.
lGuarda:=.F.

oGets :=ARRAY(3)
oObjs :=ARRAY(3)
oSays :=ARRAY(3)
oBtns :=ARRAY(12)
oQuery := oOdbc:Query(criterio)
// lDateAsStr := .t., Formato de Fecha "AAAA/MM/DD"
oQuery:lDateAsStr := .f.
oQuery:Open()
oQuery:Complete()
oQuery:Gotop()

DEFINE DIALOG oDlg RESOURCE "CAT_USU"
// DEFINICION DE BOTONES

REDEFINE BTNBMP oBtns[01] ID 1000 OF oDlg RESOURCE "Nuevo2" ;
TOOLTIP "Registro Nuevo" NOBORDER ;
ACTION ( IniCUSU(oLbx) ) When !lEsModi

REDEFINE BTNBMP oBtns[02] ID 2000 OF oDlg RESOURCE "Cambia2";
TOOLTIP "Modifica Registro" NOBORDER ;
ACTION ( CarCUSU(oLbx), lEsModi:=.T. ) when !lEsAlta

// CRLF=Salto de Linea
// MsgYesNo()=Mensaje y pide confirmaci½n, si/no
// Antes de borrar comprobar que no hay ningún movimiento contable

REDEFINE BTNBMP oBtns[03] ID 3000 OF oDlg RESOURCE "Borra2" ;
TOOLTIP "Elimina Registro" NOBORDER ;
ACTION (oQuery:=BorraCUSU(oODBC,oLbx),oQuery:Complete(),oQuery:GoBottom(),CarCUSU(oLbx) );
when !lEsAlta .AND. !lEsModi
*IF(MsgYesNo("¿ Deseas borrar éste Registro ? : "+CRLF+CRLF,"Confirma"),.T.,.T. );

REDEFINE BTNBMP oBtns[04] ID 4000 OF oDlg RESOURCE "Busca2";
TOOLTIP "Buscar registro" NOBORDER ;
ACTION ( BusCUSU(oLbx)) when !lEsAlta .AND. !lEsModi

REDEFINE BTNBMP oBtns[05] ID 5000 OF oDlg RESOURCE "Inicio1" TOOLTIP "Primer Registro" NOBORDER ;
ACTION ( oQuery:Gotop(), CarCUSU(oLbx) ) ;
WHEN !lEsAlta .AND. !lEsModi

REDEFINE BTNBMP oBtns[06] ID 6000 OF oDlg RESOURCE "Antes1" TOOLTIP "Anterior Registro" NOBORDER ;
ACTION ;
( oQuery:Skip(-1),CarCUSU(oLbx) ) ;
WHEN !lEsAlta .AND. !lEsModi

REDEFINE BTNBMP oBtns[07] ID 7000 OF oDlg RESOURCE "Despues1" TOOLTIP "Siguiente Registro" NOBORDER ;
ACTION ( oQuery:Skip(+1),CarCUSU(oLbx) ) ;
WHEN !lEsAlta .AND. !lEsModi

REDEFINE BTNBMP oBtns[08] ID 8000 OF oDlg RESOURCE "Final1" TOOLTIP "Ultimo Registro" NOBORDER ;
ACTION ( oQuery:GoBottom(),CarCUSU(oLbx) ) ;
WHEN !lEsAlta .AND. !lEsModi

REDEFINE BTNBMP oBtns[09] ID 9000 OF oDlg RESOURCE "Imprime2" TOOLTIP "Imprimir Catálogo" NOBORDER ;
ACTION (oQuery:=ImprimeCUSU(oODBC),oQuery:Complete()) when !lEsAlta .AND. !lEsModi

REDEFINE BTNBMP oBtns[10] ID 10000 OF oDlg RESOURCE "Disco2" TOOLTIP "Guardar Datos" NOBORDER ;
ACTION ;
( lGuarda:=.T., IF(VALCUSU1(oODBC,oGets[1],oGets[2],oGets[3]),.t.,oQuery:=GuardaCUSU(oODBC, oLbx)),oQuery:Complete(),oQuery:GoBottom(),CarCUSU(oLbx) );
WHEN lEsAlta .Or. lEsModi

REDEFINE BTNBMP oBtns[11] ID 11000 OF oDlg RESOURCE "Cancela2" TOOLTIP "Cancelar Captura" NOBORDER ;
ACTION ;
(IniCUSU(oLbx), CarCUSU(oLbx), lGuarda:= .F.,lEsAlta:=.F.,lEsModi:=.F.)

REDEFINE BTNBMP oBtns[12] ID 12000 OF oDlg RESOURCE "Salida1","Salida2" TOOLTIP "Regresar" NOBORDER;
ACTION ( oDlg:End() )

//
// LISTBOX, SÓLAMENTE USAR CUANDO SEA NECESARIO
// El uso de Fechas y Números, Convertir a Caracter para mostralos
//
*REDEFINE LISTBOX oLbx FIELDS ;
* ON CHANGE ( CarCUSU(oLbx), lGuarda:=.F., lEsAlta:=.F., lEsModi:= .F. );
* ID 1013 OF oDlg
*
* oLbx:aJustify := {.F., .F.} // Justificaci¢n de Cabezeras IZQ, .T.=Centro
* oLbx:nLineStyle:=2 // Separador de datos
* oLbx:Refresh() // Estabiliza el browse/listbox
// ( Pinta los datos nuevamente )

// Muestra la descripción Correctamente de los SAY´S
REDEFINE SAY ID 1 OF oDlg
REDEFINE SAY ID 2 OF oDlg
REDEFINE SAY ID 3 OF oDlg

// Muestra la descripción Correctamente de los GET´S
REDEFINE GET oObjs[1] VAR oGets[1] ID 101 OF oDlg PICTURE "@!";
When lEsAlta
REDEFINE GET oObjs[2] VAR oGets[2] ID 102 OF oDlg PICTURE "99";
When lEsAlta .and. !empty(oGets[1])
REDEFINE GET oObjs[3] VAR oGets[3] ID 103 OF oDlg PICTURE "@!";
When lEsAlta .OR. lEsModi
* VALID !VALCUSU1(oODBC,oGets[1],oGets[2],oGets[3]);

ACTIVATE DIALOG oDlg CENTER ON INIT CarCUSU(oLbx)

RETURN Puntero

//------------------------------------------------------------------
Function ValCUSU1(oODBC,materia, juzgado,dire)
*LOCAL criterioVal := "SELECT mater,juzas FROM Cat_USU WHERE mater='" + alltrim(materia)+"'" + " and juzas =" + alltrim(str(juzgado))+;
* ' and direccion = "'+ alltrim(dire)+'"'
Local criterioVal := "SELECT mater,juzas FROM Cat_USU WHERE direccion = '"+ alltrim(dire)+"'"
LOCAL oQueryVal
LOCAL encontre:=.F.
LOCAL SiHay:=0

oQueryVal := oOdbc:Query(criterioVal)
oQueryVAL:Open()
oQueryVAL:Complete()
oQueryVal:GoTop()
SiHay:=oQueryVal:RecCount()
oQueryVal:End()
* Msginfo(sihay)
If SiHay >0
encontre:=.T.
MsgInfo("La Dirección YA EXISTE"," Verifica . . . :"+Materia+ ", "+Alltrim(str(juzgado)))
Else
encontre:=.F.
EndIF
Return encontre

//------------------------------------------------------------------
Static Function BorraCUSU(oODBC,oLbx)
LOCAL BorraCriterio := 'DELETE FROM Cat_USU WHERE mater = "' + alltrim(oGets[1])+'"'+ ' and juzas =' + alltrim(str(oGets[2])) +;
' and direccion = "'+ t_dir + '" and numero = "'+t_num+'"'
LOCAL XCriterio:="SELECT * from Cat_USU Order By mater, juzas"
LOCAL oQuery
LOCAL correcto

IF !oOdbc:Execute(BorraCriterio,"DELETE",,correcto)
MsgAlert("Error al Eliminar en el Catálogo de Usuarios")
EndIF

oQuery := oOdbc:Query(xcriterio)
// lDateAsStr := .t., Formato de Fecha "AAAA/MM/DD"
oQuery:lDateAsStr := .f.
oQuery:Open()
oQuery:Complete()
oQuery:GoBottom()

IniCUSU(oLbx)
lGuarda:= .F.
lEsAlta:=.F.
lEsModi:=.F.
*oLbx:Refresh()
Return oQuery
//------------------------------------------------------------------
Static Function GuardaCUSU(oODBC,oLbx)
LOCAL AltaCriterio
LOCAL ModiCriterio
LOCAL XCriterio:="SELECT * from Cat_USU Order By mater,juzas"
LOCAL oQueryReg
LOCAL correcto
LOCAL oQuery

? ALLTRIM(oGets[1])
? oGets[2]
IF !Empty(oGets[1]) .AND. oGets[2] >0
AltaCriterio := 'INSERT INTO Cat_USU (mater,juzas,direccion,numero) values ("' + alltrim(oGets[1]) + '",'+;
alltrim(str(oGets[2])) +',"' + alltrim(oGets[3])+'","NOHAY")'
ModiCriterio := 'UPDATE Cat_USU SET direccion= "' + alltrim(oGets[3]) + '", numero= "NOHAY"' +;
' WHERE mater = "' + alltrim(oGets[1])+'"'+ ' and juzas = ' + alltrim(str(oGets[2])) +;
' and direccion = "'+ t_dir + '" and numero = "'+t_num+'"'
IF lGuarda
IF lEsAlta
msginfo(altacriterio)
IF !oOdbc:Execute(AltaCriterio,"INSERT",,correcto)
MsgAlert("Error al Addcionar en el Catálogo de Usuarios")
EndIF
Else
msginfo(modicriterio)
IF !oOdbc:Execute(ModiCriterio,"UPDATE",,correcto)
MsgAlert("Error al Modificar en el Catálogo de Usuarios")
EndIF
EndIf
ENDIF
EndIF
oQuery := oOdbc:Query(xcriterio)
// lDateAsStr := .t., Formato de Fecha "AAAA/MM/DD"
oQuery:lDateAsStr := .f.
oQuery:Open()
oQuery:Complete()
oQuery:GoBottom()

IniCUSU(oLbx)
lGuarda:= .F.
lEsAlta:=.F.
lEsModi:=.F.

*oLbx:Refresh()
Return oQuery

//------------------------------------------------------------------
STATIC Function CarCUSU(oLbx) // OK, ODBC
oGets[1]:=FieldGet(1)//Clave
oGets[2]:=FieldGet(2)//Descripción
oGets[3]:=FieldGet(3)//dirección
**** oGets[4]:=FieldGet(4)//Número
T_Dir:=FieldGet(3)//dirección
T_Num:=FieldGet(4)//Número
oObjs[1]:Refresh()
oObjs[2]:Refresh()
oObjs[3]:Refresh()
****oObjs[4]:Refresh()
*oLbx:Refresh()
Return .T.
//------------------------------------------------------------------

STATIC Function IniCUSU(oLbx)
lEsAlta:=.T.
oGets[1]:=SPACE(2)
oGets[2]:=0
oGets[3]:=SPACE(17)
****oGets[4]:=SPACE(30)
T_Dir:=""
T_Num:=""
oObjs[1]:Refresh()
oObjs[2]:Refresh()
oObjs[3]:Refresh()
****oObjs[4]:Refresh()
*oLbx:Refresh()
Return .T.
//------------------------------------------------------------------
STATIC FUNCTION BusCUSU()
RETURN NIL
//------------------------------------------------------------------
STATIC FUNCTION ImprimeCUSU(oOdbc)
LOCAL oPen1, oPen2
LOCAL oFon1, oFon2, oFon3
LOCAL oReport
Local oQueryRep
Local RepCriterio:= "SELECT * from Cat_USU Order By mater, juzas"
Local aDatos
Local nField
Local Sihay,i

oQueryRep := oOdbc:Query(RepCriterio)
// lDateAsStr := .t., Formato de Fecha "AAAA/MM/DD"
oQueryRep:lDateAsStr := .f.
oQueryRep:Open()
oQueryRep:Complete()
oQueryRep:Gotop()
SiHay:=oQueryRep:RecCount()

aDatos := {}
For i=1 To SiHay
AADD(aDatos,{oQueryRep:FieldGet(1), oQueryRep:FieldGet(2), oQueryRep:FieldGet(3), oQueryRep:FieldGet(4)} )
oQueryRep:Skip()
Next
*oQueryRep:End()

IF len(aDatos) == 0
MsgStop("No Existe Información")
oQueryRep:Gotop()
RETURN oQueryRep
ENDIF

DEFINE PEN oPen1 WIDTH 0.7
DEFINE PEN oPen2 WIDTH 0.5
DEFINE FONT oFon1 NAME "Arial" SIZE 0,-11
DEFINE FONT oFon2 NAME "Arial" SIZE 0,-8
DEFINE FONT oFon3 NAME "COURIER NEW" SIZE 0, 10 // Para Imprimir MEMOS

nField:=1
REPORT oReport TITLE "Listado de Usuarios";
CAPTION "Catálogo : Usuarios";
HEADER "Tribunal Superior de Justicia del Distrito Federal", ;
"Fecha: "+DToC(DATE()),;
"Página: "+STR(oReport:nPage,3);
FOOTER "- Catálogo de Usuarios -" CENTER;
FONT oFon1, oFon2, oFon3 ;
PEN oPen1, oPen2; // Tipo de linea a usar en Cabezera
PREVIEW

COLUMN TITLE "Clave de","Materia" DATA aDatos[nfield,1]+", "+dameMateria(aDatos[nfield,1]) FONT 2 CENTER //Val_Materias(oOdbc,aDatos[nfield,1]) //arreglos.prg
COLUMN TITLE "Juzgado" DATA alltrim(str(aDatos[nField,2])) FONT 2 CENTER
COLUMN TITLE "Dirección" DATA AllTRIM(aDatos[nField,3]) FONT 2 LEFT
COLUMN TITLE "Número" DATA AllTRIM(aDatos[nField,4]) FONT 2 LEFT
END REPORT
oReport:bSkip := {|| nField++}
oReport:CellView()
ACTIVATE REPORT oReport WHILE nField <= len(aDatos);
ON INIT oReport:oTitle:aFont[1] := { || 3 };

oPen1:End()
oPen2:End()
oFon1:End()
oFon2:End()
oFon3:End()
oQueryRep:Gotop()
RETURN oQueryRep
//------------------------------------------------------------------
STATIC FUNCTION BitMaps(oReport)
oReport:SayBitmap( 0.6,5, "ArchivoBMP.bmp", 1.9, 1.9, 2 )
RETURN NIL