Page 2 of 2

PostPosted: Wed Feb 20, 2008 4:40 pm
by leandro
Biel Muchas gracias era lo que necesitaba. :D

PostPosted: Wed Feb 20, 2008 8:04 pm
by sysctrl2
Sin duda tenemos que reconocer que los aportes sobre el tema de ADO

en este foro es cada dia mas comun,,

el blog del colega Biel es exelente,,

felicidades Gabriel,

PostPosted: Wed Feb 20, 2008 11:17 pm
by Armando
César:

Totalmente de acuerdo contigo. Biel me ha aportado mucho y su blog esta en mis favoritos.

Saludos

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Mon Nov 08, 2010 10:56 pm
by goosfancito
hola.

estoy incursionando oracle con ado y resulta que siempre recordCount() me devuelve -1, pero esto es falso, tengo datos.

porque pasa esto?

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Tue Nov 09, 2010 1:54 am
by Adolfo
Goosfancito...

recordcount solo funciona si se cumplen estas 2 condiciones

If ::oRcs:Supports(adApproxPosition) .and. ::oRcs:Supports(adBookmark)
nLastRec:= ::oRcs:RecordCount
Endif

Si no tendras un -1, o un 0... porque ?

Para un cursor FORWARD-ONLY el valor es -1, Si el cursor es ESTATICO o KEYSET, recordcount() te entrega el total de los registros del Recordset. En cambio si es dinamico, ahi tenemos 1 problema, puede devolver - 1 o el total de registros, pero eso depende SOLO DEL "DATA SOURCE", en este caso, ORACLE.

Como solucionas el problema.... ?

SIMPLE..

Create una funcion a la que le pases 1 parametro, el mismo cSelect con el que creas el recordset, esta funcion es muy muy rapida pues es solo un comando, o sea son solo 2 milisegundos

Code: Select all  Expand view

Function Contar(cSelect)  
Local nCount:=0
Local oCmd
Local oRsCmd

   oCmd:=TOleAuto():New("ADODB.Command")
   oCmd:CommandText := "select count(*) from " + (cSelect)
   oCmd:CommandType := adCmdText
   oCmd:ActiveConnection:=oCon

    oRsCmd:=oCmd:Execute()
    nCount:=oRsCmd:Fields( 0 ):value

    oRsCmd:Close()

Return nCount
 



Espero que te sirva..

Saludos desde Chile
Adolfo

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Tue Nov 09, 2010 2:16 pm
by goosfancito
gracias

probe hacerle tambien un movefirst y ahi me dice correctamente el numero. en fin...

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Mon Jan 24, 2011 2:46 pm
by goosfancito
hola.
tengo problemas al visualizar los datos con el xbrowse en esta situacion:
hago un select (ADO-recordset) a una tabla que existe pero no devuelve datos.
Hay manera de que el xbrowse muestre los encabezados asi no existan datos?


gracias.

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Tue Jan 25, 2011 5:46 am
by nageswaragunupudi
goosfancito wrote:hola.

estoy incursionando oracle con ado y resulta que siempre recordCount() me devuelve -1, pero esto es falso, tengo datos.

porque pasa esto?

Serverside recordsets return -1 as RecordCount.
We need to open recordsets on clientside, by using adUseClient, for browsing. Default is adUseServer.

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Tue Jan 25, 2011 5:48 am
by nageswaragunupudi
goosfancito wrote:hola.
tengo problemas al visualizar los datos con el xbrowse en esta situacion:
hago un select (ADO-recordset) a una tabla que existe pero no devuelve datos.
Hay manera de que el xbrowse muestre los encabezados asi no existan datos?


gracias.

Even if the table does not contain any records we can browse the empty recordset and xbrowse shows column names with blank data. I have tested this on access and mssql server.
I have not tested this with Oracle.

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Tue Jan 25, 2011 12:06 pm
by goosfancito
Even if the table does not contain any records we can browse the empty recordset and xbrowse shows column names with blank data. I have tested this on access and mssql server.
I have not tested this with Oracle.


Podes por favor poner un ejemplo, en mi caso si el Recordset no tiene datos el xBrowse me tira error.

gracias.

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Tue Jan 25, 2011 12:30 pm
by nageswaragunupudi
If XBrowse is giving error on blank recordsets, there are two possibilities:
#1. Your xbrowse version is very old.
or
#2. Instead of depending on XBrowse's default behavior you may be providing your own codeblocks for navigation or column's bstrdata,etc.

Please test the following simple code:
Code: Select all  Expand view

#include 'fivewin.ch'

function Main()

    local oRs

    oRs := <Your function which returns a blank recordset>
    xbrowse( oRs )

return nil
 

If your FWH is not very old and if the recordset is valid recordset, even if it is blank, xbrowse works perfectly. It shows all column headers and shows blank for data.

If this program errors out, your FWH version could be very old. Even in that case, please post error.log here.

Re: Ejemplo del uso del un recorset con xbrowse

PostPosted: Mon Mar 07, 2011 7:42 pm
by jfafive
Buenas,

Tengo un XBrowse con Recordset. Es algo sencillito, donde lo unico que hago es editar las celdas y
modificar valores directamente.

El caso es que si modifico la celda con un valor distinto al anterior, al pulsar INTRO se guarda y actualiza. Pero si escribo el mismo valor o solo pulso INTRO, se me bloquea.

Aquí les dejo un trozo de mi codigo pues yo no he encontrado donde puede estar el problema.

Un saludo y gracias por adelantado. -)
Code: Select all  Expand view

.....

REDEFINE XBROWSE oXbrB ;
   RECSET oRsB ID ID_XBRCLI OF oDlgSC AUTOSORT

oXbrB:nColDividerStyle    := LINESTYLE_LIGHTGRAY
oXbrB:nRowDividerStyle    := LINESTYLE_LIGHTGRAY

oXbrB:nMarqueeStyle       := MARQSTYLE_HIGHLROW
oXbrB:bClrSelFocus        := { || { CLR_WHITE, CLR_BLUE } }
oXbrB:bClrStd             := { || { CLR_BLACK, CLR_YELLOW } }
oXbrB:lColDividerComplete := .t.
oXbrB:lAllowRowSizing     := .f.
oXbrB:lAllowColSwapping   := .t.
oXbrB:lAllowColHiding     := .f.
oXbrB:lHScroll            := .f.
oXbrB:lVScroll            := .t.
oXbrB:l2007               := .t.
oXbrB:lHeader             := .t.
oXbrB:nRowHeight          := 30

.....

ACTIVATE DIALOG oDlgSC CENTER ;
   ON INIT ( oDlgSC:lHelpIcon := .f.,;
             oXbrB:aCols[2]:nEditType := 1,; // donde las columnas 2 y 3 son las editables.
             oXbrB:aCols[3]:nEditType := 1,;
             oXbrB:aCols[1]:nWidth    := 40 ) ;
   VALID !( GetKeyState(27) )