Algun ejemplo con ADO y TXBrowse ?

Post Reply
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Algun ejemplo con ADO y TXBrowse ?

Post by Armando »

Amigos del foro:

Estoy intentando mis primeros pasos con ADO y pretendo hacer un browse con TXBrowse, esto es parte de mi código

oBrw := TXBrowse():New( oWnd )

oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:lColDividerComplete := (.T.)
oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:nHeaderLines := 1
oBrw:nFooterLines:= 1
oBrw:nDataLines := 1
oBrw:lFooter:= (.T.)
oBrw:lHScroll:= (.F.)
oBrw:SetAdo(oDatos)

oBrw:bGoTop:= {|| oDatos:MoveFirst() }
oBrw:bGoBottom:= {|| oDatos:MoveLast() }
oBrw:bBof:= {|| oDatos:Bof() }
oBrw:bEof:= {|| oDatos:Eof() }
oBrw:bSkip:= { | nSkip | Skipper( oDatos, nSkip ) }
oBrw:bKeyCount:= {|| oDatos:RecordCount() }

aCol[ 1]:= oBrw:AddCol()
aCol[ 1]:bStrData := { || oDatos:Fields(0):Value}
aCol[ 1]:cHeader := "ESTILO"
aCol[ 1]:nHeadStrAlign:= AL_LEFT
aCol[ 1]:nDataStrAlign:= AL_LEFT
aCol[ 1]:nWidth:= 249

oBrw:CreateFromCode()

oWnd:SetControl( oBrw )

Como se puede apreciar solo estoy creando el browse con una sola columna a pesar de que el recordset esta creado con 2 campos, pues bien el browse se muestra con tres columnas, los _ del recordset más la columna que estoy creando, por qué ?, ademas el browse pinta solo el primer renglón, debo ir avanzando haca abajo del browse para que se muestren el resto de los renglones.

Seguramente hay algo que me esta faltando, pero que es ?, alguien que tenga un pequeño ejemplo para crear el browse con TXbrowse y RECORDSET ???

Muy agradecido por su apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Hola Armando,
lo primero que veo es que utilizas SetAdo antes de definir las columnas. SetAdo debieras colocarlo al final antes del CreateFromCode.

En el metodo SetAdo, si el Browse no tiene definido columnas, le añade todas las columnas del recordset que recibe de parametro. Ademas tambien define los codeblocks de movimiento si no estan definidos.

Pruebalo de la siguiente manera.

Code: Select all

oBrw := TXBrowse():New( oWnd ) 

oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW 
oBrw:lColDividerComplete := (.T.) 
oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY 
oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY 
oBrw:nHeaderLines := 1 
oBrw:nFooterLines:= 1 
oBrw:nDataLines := 1 
oBrw:lFooter:= (.T.) 
oBrw:lHScroll:= (.F.) 

aCol[ 1]:= oBrw:AddCol() 
aCol[ 1]:bStrData := { || oDatos:Fields(0):Value} 
aCol[ 1]:cHeader := "ESTILO" 
aCol[ 1]:nHeadStrAlign:= AL_LEFT 
aCol[ 1]:nDataStrAlign:= AL_LEFT 
aCol[ 1]:nWidth:= 249 

oBrw:SetAdo(oDatos)
oBrw:CreateFromCode() 

oWnd:SetControl( oBrw ) 
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post by Armando »

Biel:

Excelente explicación, el primer problema se ha solucionado, muchas gracias.

Tengo definida la función Skipper() así

STATIC FUNCTION Skipper( oDatos, nSkip )
LOCAL nRec := oDatos:AbsolutePosition
oDatos:Move( nSkip )
IF oDatos:EOF()
oDatos:MoveLast()
ENDIF
IF oDatos:BOF()
oDatos:MoveFirst()
ENDIF
RETURN(oDatos:AbsolutePosition - nRec)

Pero aún así me sigue mostrando solo el primer registro del recordset cuando tiene 5423 registros y al ir avanzando hacia abajo los va pintando. Que será ?

Saludos y muchas gracias nuevamente
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

La funcion skipper, parece correcta. De todas formas si utilizas el metodo SetAdo, no hace falta definas ningún codeblock de movimiento ni funcion skipper. tXBrowse ya lleva definida la funcion para salto de registros, y si no estan definidos, define todos los codeblock para movimiento dentro del cursor (bGoTop,bGoBottom,bSkip,bBof,bEof,bBookMark,bKeyno, bKeyCount).
Prueba a compilar con el codigo que te puse en el mensaje anterior, sin definir ningun codeblock, para ver que resultado obtienes.
Last edited by Biel EA6DD on Thu Sep 20, 2007 1:22 pm, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post by Armando »

Biel:

EXCELENTE !, ahora todo funciona muy bien.

Grande Maestro.

Un Abrazo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Post Reply