twbrowse+mysql utilizando recordset é possivel

twbrowse+mysql utilizando recordset é possivel

Postby MGA » Mon Jul 26, 2010 10:20 pm

twbrowse+mysql utilizando recordset é possivel?

Alguem teria um exemplo?


muito obrigado
Last edited by MGA on Wed Jul 28, 2010 4:47 pm, edited 2 times in total.
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: twbrowse+mysql utilizando recordset é possivel

Postby Ramon Paredes » Mon Jul 26, 2010 11:57 pm

SGS,

Si es posible, aqui te dejo un pequeÑo ejemplo como guia , altas, bajas y cambios con un Browse de la clase TWbrowse

#Include "FiveWin.ch"
#Include "Ado.ch"
#Include "Report.ch"

//====================
FUNCTION TABLAS()
//====================

Public dTipo[1],dNatural

dNatural :={"Deudora","Acreedora"}

PRIVATE oRs := TOLEAUTO():New("adodb.recordset")
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset
oRs:CursorLocation := adUseClient
oRs:ActiveConnection(oCon)
oRs:Source := "Select * from catalogo"
oRs:Open()

Public oDlg,
Public oBtnCancel,oLbx,oBtn

DEFINE DIALOG oDlg RESOURCE 14

REDEFINE LISTBOX oLbx FIELDS oRs:Fields("codigo"):Value, ;
oRs:Fields("nombre"):Value, ;
oRs:Fields("naturaleza"):Value, ;
oRs:Fields("eeff"):Value ,;
oRs:Fields("afectar"):Value ;
FIELDSIZES 100,250,100,250,50 ;
HEADERS "Codigo","Nombre de la Cuenta","Naturaleza","Ubic. EEFF","s/n" ;
COLOR CLR_HBLUE,CLR_WHITE ;
ID 108 of oFld:aDialogs[1]


oLbx:aJustify ={.F.,.F.,.f.,.f.,.f.}
oLbx:bLogicLen = { || oRs:RecordCount }
oLbx:bGoTop = { || oRs:MoveFirst() }
oLbx:bGoBottom = { || oRs:MoveLast() }
oLbx:bSkip = { | nSkip | Skipper( oRs, nSkip ) }
oLbx:cAlias = "ARRAY"


REDEFINE BUTTON ID 102 OF oDlg ACTION( EditC1(.t.,oLbx ), oLbx:Refresh() )
REDEFINE BUTTON ID 103 OF oDlg ACTION( EditC1(.f.,oLbx ),oLbx:Refresh() )
REDEFINE BUTTON ID 104 OF oDlg ACTION( BorrO( oLbx ), oLbx:Refresh() )
REDEFINE BUTTON ID 105 OF oDlg ACTION ( oDlg:End() )

RETURN NIL

//=================================
FUNCTION EditC1(SiNuevo, oLbx )
//=================================

Local oDlg, lSalvar := .f.

IF sinuevo = .t.
oRs:ADDNEW()
oRs:Fields("codigo"):value := SPACE(12)
oRs:Fields("nombre"):value := SPACE(45)
oRs:Fields("naturaleza"):value := SPACE(9)
oRs:Fields("eeff"):value := SPACE(50)
oRs:Fields("afectar"):value := 0
ENDIF

LoadLibrary("BWCC32.DLL")

DEFINE BRUSH oBrush FILENAME "OSXBack.bmp"

DEFINE DIALOG oDlg RESOURCE 23 BRUSH oBrush TRANSPARENT

REDEFINE GET oRs:Fields("codigo"):value ID 101 of oDlg
REDEFINE GET oRs:Fields("nombre"):value ID 102 of oDlg
REDEFINE COMBOBOX oRs:Fields("naturaleza"):value ID 103 of oDlg PROMPTS dNatural
REDEFINE COMBOBOX oRs:Fields("eeff"):value ID 104 of oDlg PROMPTS dTipo
REDEFINE CHECKBOX oRs:Fields("afectar"):value ID 105 of oDlg

REDEFINE BUTTON ID 106 OF oDlg action ( lSalvar := .T. , oDlg:End() )
REDEFINE BUTTON ID 107 OF oDlg ACTION ( lSalvar := .F. , oDlg:End() ) CANCEL

ACTIVATE DIALOG oDlg CENTERED

IF lSalvar
oRs:UPDATE()
IF !empty(oRs:Filter)
oRs:REQUERY()
ENDIF
ELSE
IF SiNuevo
oRs:DELETE()
oRs:REQUERY()
ENDIF
ENDIF

RETURN

//======================================
STATIC FUNCTION SKIPPER( oRs, nSkip )
//======================================

LOCAL nRec := oRs:AbsolutePosition

oRs:Move( nSkip )

IF oRs:EOF()
oRs:MoveLast()
ENDIF

IF oRs:BOF()
oRs:MoveFirst()
ENDIF

RETURN oRs:AbsolutePosition - nRec

//================================
STATIC FUNCTION BORRO( oLbx )
//================================

oRs:Delete()
oRs:Requery()

oLbx:Refresh()

RETURN


// Nota : la estructura de la tabla es la siguiente :
// NOMBRE : CATALOGO
// CODIGO CARACTER 12
// NOMBRE VARCHAR 40
// NATURALEZA CARACTER 10
// EEFF VARCHAR 35
// AFECTAR TYNINT 1
//=======================================================

espero te sea de utilidad,

Desde Managua Nicaragua

Ramon Paredes
... Desde la Tierra de lagos y Volcanes......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Re: twbrowse+mysql utilizando recordset é possivel

Postby MGA » Tue Jul 27, 2010 11:37 am

Ramon,

Muito obrigado por ter respondido.

Realmente o seu exemplo será de muita utilidade!

Eu uso SQLRDD (xharbour), é possível utilizar com o seu exemplo?

ex:
nID:=SR_GetActiveConnection() //Retorna o ID da conexão atualmente ativa

PRIVATE oRs := TOLEAUTO():New("adodb.recordset")
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset
oRs:CursorLocation := adUseClient
oRs:ActiveConnection(nID)
oRs:Source := "Select * from catalogo"

Isso é possível ?

Se não, vc poderia me mostrar a parte da conexão do seu codigo?

Muito obrigado Ramon :D

SGS
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: twbrowse+mysql utilizando recordset é possivel

Postby miragerr » Tue Jul 27, 2010 12:09 pm

Ola SGS

Tambem uso a SQLRDD e não ha a nescessidade de usar RECORDSET, vc pode usar como um DBF normal, basta utilizar USE <tabela> ALIAS <calias> NEW VIA "SQLRDD"

Qualquer coisa grite.
Jackson Douglas C. Brito
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
User avatar
miragerr
 
Posts: 140
Joined: Tue Oct 11, 2005 2:36 am
Location: Brasil

Re: twbrowse+mysql utilizando recordset é possivel

Postby MGA » Tue Jul 27, 2010 12:22 pm

Jackson,

Eu já utilizo assim hoje, porem:

Em um cliente especifico com um cadastro de produtos de mais de 200.000 itens, estamos instalando o sistema local e o banco remoto, do jeito que esta fica muito lento a consulta de produtos, por isso estou testanto o desempenho com RECORDSET.

De qualquer forma obrigado

SGS
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: twbrowse+mysql utilizando recordset é possivel

Postby miragerr » Tue Jul 27, 2010 12:34 pm

Ola amigo

Infelizmente para se fazer um BROWSE com 100 mil ou mais registros remotamente fica lento mesmo, isso sendo RECORDSET ou USE normal, vc tera que fazer via consulta e trazer o resultado da consulta, agora tem uma função na SQLRDD que limita o NR de REGISTROS a serem mostrados "só num lembro agora" pois deve servir para o seu proposito

Qualquer coisa grite
Jackson Douglas C. Brito
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
User avatar
miragerr
 
Posts: 140
Joined: Tue Oct 11, 2005 2:36 am
Location: Brasil

Re: twbrowse+mysql utilizando recordset é possivel

Postby Ramon Paredes » Tue Jul 27, 2010 3:23 pm

SGS,

Efectivamente como te indica miragerr aun con Recordsets tendrias el problema de lentitud, tendrias que crear querys para tus consultas de productos asi dinamizar el proceso a nivel remoto, ahora SQLRDD lo que crea realmente en tablas SQL es un record set cuando haces : USE "MITABLA" NEW SHARED ALIAS "MI_RECORDSET" VIA "SQLRDD" por lo que no ganarias mucho en velocidad usando ADO con ese volumen de registros.

Otra sugerencia es que crees indices condicionales desde codigo antes del recordset que efectivamente SQLRDD te lo permite y entonces ganas velocidad en procesos selectivos ,

Saludos desde Managua, Nicaragua

Ramon Paredes
... Desde la Tierra de lagos y Volcanes......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Re: twbrowse+mysql utilizando recordset é possivel

Postby MGA » Tue Jul 27, 2010 4:54 pm

Obrigado Ramon :)
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: twbrowse+mysql utilizando recordset é possivel

Postby MGA » Wed Jul 28, 2010 11:01 am

Ola Ramon,

Testei a minha base com mais de 200.000 registros com recordset e ficou muito bom, demora um pouquinho para carregar no inicio mais depois é uma maravilha.

Porem, tenho um problema:

Estou usando esta configuração:

oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenDynamic
oRs:CursorLocation := adUseClient

Com esta configuração não estou conseguindo visualizar as alterações feitas por outros usuários. Tenho que fazer mais alguma coisa?

Obrigado

SGS
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Ramon - twbrowse+mysql utilizando recordset é possivel

Postby miragerr » Wed Jul 28, 2010 11:35 am

Ola amigos

SGS esse é um dos problemas quando vc carrega todos os registros para o CACHE do computador local, ele não atualiza os dados, a não ser que vc recarregue novamente o CACHE, como lhe falei vc esta lidando com SQL que é totalmente diferente de DBF, tambem tive este problema, e tive que mudar minha forma de desenvolver, mais se vc quer que apareçam todos os dados de forma RÁPIDA e que venhan sempre com as alterações igual se faz com DBF, lhe aconcelho a testar o ADS SERVER, esse sim meu amigo, é rápido em tudo, mesmo via remoto, só tem um porem, é caro.

Espero ter ajudado
Jackson Douglas C. Brito
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
User avatar
miragerr
 
Posts: 140
Joined: Tue Oct 11, 2005 2:36 am
Location: Brasil

Re: Ramon - twbrowse+mysql utilizando recordset é possivel

Postby jbrita » Wed Jul 28, 2010 1:16 pm

Amigos con Ado se puede solo tienes que paginar el browse , como lo hace google y listo

Saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Ramon - twbrowse+mysql utilizando recordset é possivel

Postby MGA » Wed Jul 28, 2010 3:03 pm

jbrita,

tem um exemplo?
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: twbrowse+mysql utilizando recordset é possivel

Postby jbrita » Thu Jul 29, 2010 1:57 pm

Amigo aca va una imagen
http://yfrog.com/jwimagennlj
la idea es pagina con botones de paginacion ejemplo
Boton Inicio
Boton Atras
Boton Siguente
Boton Fin

FUNCTION paginar_Adelante(oLbx,oRcs,oTabla,oCbx,cIndice)
*--------------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
Local campo
If (oRcs:RecordCount) # 0
oRcs:MoveLast()
campo:=oRcs:Fields(oOrden):value
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" WHERE "+oOrden+" > '" + Alltrim(campo) +"' ORDER BY "+oOrden+" LIMIT 100", oConexion, 1, 3)
If (oRcs:RecordCount) == 0
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" DESC LIMIT 100", oConexion, 1, 3)
oRcs:Sort:=oOrden
Endif
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
Endif
RETURN(.t.)

FUNCTION paginar_Atras(oLbx,oRcs,oTabla,oCbx,cIndice)
*-----------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
Local campo
If (oRcs:RecordCount)# 0
oRcs:MoveFirst()
campo:=oRcs:Fields(oOrden):value
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" WHERE "+oOrden+" < '" + AllTrim(campo) +"' ORDER BY "+oOrden+" desc LIMIT 100", oConexion, 1, 3)
If (oRcs:RecordCount) == 0
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" LIMIT 0,100",oConexion, 1, 3)
Endif
If (oRcs:RecordCount) < 100
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" ORDER BY "+oOrden+" LIMIT 100",oConexion, 1, 3)
Endif
oRcs:Sort:=oOrden
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
Endif
RETURN(.t.)

FUNCTION paginar_Inicio(oLbx,oRcs,oTabla,oCbx,cIndice)
*------------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]

oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" LIMIT 0,100",oConexion, 1, 3)
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
RETURN(.t.)

FUNCTION paginar_Fin(oLbx,oRcs,oTabla,oCbx,cIndice)
*---------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]

oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" DESC LIMIT 100", oConexion, 1, 3)
oRcs:Sort:=oOrden
oRcs:Refresh()
oLbx:Refresh(.t.)
oLbx:SetFocus()

RETURN(.t.)
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 73 guests