como programar en clarion con mysql
Guillermo:
Tu primera opción es seguir haciendo tus reportes y consultas como si usaras tps. Es transparente, no cambias tu código. No aprovechas todas las características de mysql pero ya tienes una bd estable.
La segunda es usar sentencias sql para acelerar tus programas.
Por ejemplo, en los reportes:
Investiga la teoría de la tabla boba.
Lo que yo hago es realizar una consulta y el resultado lo guardo en una queue, para despues imprimir la queue.
El código en el init es
SETCURSOR(CURSOR:Wait)
LOC:SQL = 'SELECT ORDETA.numerocontrol, ORDENES.Semana, ORDENES.fechacaptura, COUNT(DISTINCT ORDETA.numerocontrol, ACTIVIDA.diametro) AS REPETIDOS ' & |
' FROM ordeta, activida, ordenes ' & |
' WHERE ORDETA.IdActividad = ACTIVIDA.IdActividad ' & |
' AND ORDETA.numerocontrol = ORDENES.numerocontrol ' & |
' AND ORDENES.Semana = ' & LOC:Semana & |
' GROUP BY ORDETA.numerocontrol ' & |
' HAVING REPETIDOS > 1 '
!!' ORDER BY REPETIDOS DESC LIMIT 20'
TablaBoba{prop:sql} = LOC:SQL
IF ERRORCODE() THEN STOP( FILEERROR()) end
FREE(QREPORTE)
loop
NEXT(TablaBoba)
if ERRORCODE() then break end
clear(QREPORTE)
QRE:NumeroControl = CLIP(TAB:C01)
QRE:Semana = deformat(TAB:C02)
QRE:FechaCaptura = deformat(TAB:C03,@D10-)
QRE:Total = deformat(TAB:C04)
ADD(QREPORTE)
END
sort(QREPORTE,QRE:NumeroControl)
SETCURSOR()
En los browses, una maneja de aprovechar mysql es con los filtros, por ejemplo
LlenaFiltro ROUTINE
DATA
CODE
if (LOC:IdDepartamento = '' or LOC:IdDepartamento = 'TODOS') and (LOC:IdSubdepa = '' or LOC:IdSubdepa = 'TODOS') and LOC:Entrada = ''
brw1.SetFilter('')
elsif (LOC:IdDepartamento = '' or LOC:IdDepartamento = 'TODOS') and (LOC:IdSubdepa = '' or LOC:IdSubdepa = 'TODOS') and LOC:Entrada <> ''
brw1.SetFilter('SQL(Descripcion like(''%'& CLIP(LOC:Entrada)&'%''))')
elsif LOC:IdDepartamento <> 'TODOS' and LOC:IdSubdepa = 'TODOS' and LOC:Entrada = ''
brw1.SetFilter('SQL(IdSubdepa IN (SELECT IdSubdepa FROM DEPASUB WHERE IdDepartamento = ' & chr(39)& LOC:IdDepartamento & chr(39)& '))')
elsif LOC:IdDepartamento <> 'TODOS' and LOC:IdSubdepa = 'TODOS' and LOC:Entrada <> ''
brw1.SetFilter('SQL(IdSubdepa IN (SELECT IdSubdepa FROM DEPASUB WHERE IdDepartamento = ' & chr(39)& LOC:IdDepartamento & chr(39)& ')) AND SQL(Descripcion like(''%'& CLIP(LOC:Entrada)&'%'')) ')
elsif LOC:IdDepartamento <> 'TODOS' and LOC:IdSubdepa <> 'TODOS' and LOC:Entrada = ''
brw1.SetFilter('SQL(IdSubdepa = ' & chr(39)& LOC:IdSubdepa & chr(39)& ')')
elsif LOC:IdDepartamento <> 'TODOS' and LOC:IdSubdepa <> 'TODOS' and LOC:Entrada <> ''
brw1.SetFilter(' SQL(IdSubdepa = ' & chr(39)& LOC:IdSubdepa & chr(39)& ') AND SQL(Descripcion like(''%'& CLIP(LOC:Entrada)&'%'')) ')
else
!! do llenabrowse
end
ThisWindow.Reset(1)
EXIT
saludos y espero que esta información te sea útil.
Atte
Francisco