Página 1 de 1

Problemas de control con el filtro en MYSQL

Publicado: Mié May 28, 2008 12:34 pm
por correo
Este código :
//Cambio de filtro en un DBBrowse + SQLQUery
oSender:OnFilterChange:={|o,n|if(n=1,(o:oDataSet:lUpdLinked :=
..f.,o:oDataSet:Close(),o:oDataSet:cSelect:="Select * from SubCuentas
"+if(!empty(alltrim(o:aCols[1]:cFilter))," WHERE NUMERO LIKE
'"+alltrim(o:aCols[1]:cFilter)+"%'",""),o:aCols[1]:cFilter:= "",
o:oDataSet:lUpdLinked :=
..t.,o:oDataSet:Open(),msginfo(o:oDataSet:RecCount()), o:refresh() ),)}
Permite crear un tSQLQuery sobre un DBBrowse cada vez que yo cambio el
filtro de la 1ª columna que es el nº de cuenta (NUMERO)
Funcionamiento :
1º) Aparece toda la base de datos al arrancar el formulario
2º) Al poner algo en el filtro de la columna (ejem 430) , cierra el
DataSet (o:oDataSet) , cambio el cSelect y vuelvo a abrir el dataSet .El
resultado es que me aparece un nuevo SQLQuery filtrado segun mis deseos
, en este caso (WHERE NUMERO LIKE '430%')
3º) Borro el filtro y refresco el DbBrowse
Problema. Si vuelvo a cambiar el filtro me aparece 1 registro o ninguno.
El msginfo(o:oDataSet:RecCount()) me devuelve 0 ó 1
¿Por qué ?
Realmente la 1ª y la 2ª vez direcciona sobre el mismo DataSource.
Gracias.

Problemas de control con el filtro en MYSQL

Publicado: Mié May 28, 2008 2:03 pm
por correo
JJG Soft escribió:
> Este código :
>
> //Cambio de filtro en un DBBrowse + SQLQUery
> oSender:OnFilterChange:={|o,n|if(n=1,(o:oDataSet:lUpdLinked :=
> .f.,o:oDataSet:Close(),o:oDataSet:cSelect:="Select * from SubCuentas
> "+if(!empty(alltrim(o:aCols[1]:cFilter))," WHERE NUMERO LIKE
> '"+alltrim(o:aCols[1]:cFilter)+"%'",""),o:aCols[1]:cFilter:= "",
> o:oDataSet:lUpdLinked :=
> .t.,o:oDataSet:Open(),msginfo(o:oDataSet:RecCount()), o:refresh() ),)}
>
> Permite crear un tSQLQuery sobre un DBBrowse cada vez que yo cambio el
> filtro de la 1ª columna que es el nº de cuenta (NUMERO)
>
> Funcionamiento :
>
> 1º) Aparece toda la base de datos al arrancar el formulario
> 2º) Al poner algo en el filtro de la columna (ejem 430) , cierra el
> DataSet (o:oDataSet) , cambio el cSelect y vuelvo a abrir el dataSet .El
> resultado es que me aparece un nuevo SQLQuery filtrado segun mis deseos
> , en este caso (WHERE NUMERO LIKE '430%')
> 3º) Borro el filtro y refresco el DbBrowse
>
> Problema. Si vuelvo a cambiar el filtro me aparece 1 registro o ninguno.
>
> El msginfo(o:oDataSet:RecCount()) me devuelve 0 ó 1
>
> ¿Por qué ?
> Realmente la 1ª y la 2ª vez direcciona sobre el mismo DataSource.
> Gracias.
>
Esto si funciona
//Cambio de filtro
oSender:OnFilterChange:={|o,n|if(n=1,(o:oDataSet:lUpdLinked :=
..f.,o:oDataSet:Close(),o:oDataSet:oDataSource:=AppData:MYSQ L,o:oDataSet:cSelect:= "Select
* from SubCuentas "+if(!empty(alltrim(o:aCols[1]:cFilter))," WHERE
NUMERO LIKE '"+alltrim(o:aCols[1]:cFilter)+"%'",""),
o:oDataSet:lUpdLinked :=
..t.,o:oDataSet:Open(),msginfo(o:oDataSet:RecCount()), o:refresh() ),)}
He incluido o:oDataSet:oDataSource:=AppData:MYSQL ,es decir vuelvo a
asignar el Datasource y !!! funciona !!!