Algun ejemplo con ADO y TXBrowse ?

Algun ejemplo con ADO y TXBrowse ?

Postby Armando » Wed Sep 19, 2007 1:24 pm

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 dos campos 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
Armando
 
Posts: 3070
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby Biel EA6DD » Wed Sep 19, 2007 3:50 pm

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  Expand view
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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Armando » Wed Sep 19, 2007 4:31 pm

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
Armando
 
Posts: 3070
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby Biel EA6DD » Thu Sep 20, 2007 7:17 am

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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Armando » Thu Sep 20, 2007 1:15 pm

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
User avatar
Armando
 
Posts: 3070
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 16 guests