helio1361303486 Posted September 21, 2007 Report Share Posted September 21, 2007 Caros amigos, Fica bem lento usar Browses com MySQL. Já ouvi dizer que temos que trabalhar com Arrays nas browses, aà eu pergunto: como fazer isso? tem algum exemplo? Hélio xHarbour 0.99.71/WS Quote Link to comment Share on other sites More sharing options...
helio1361303486 Posted September 21, 2007 Author Report Share Posted September 21, 2007 Caros amigos, Fica bem lento usar Browses com MySQL. Já ouvi dizer que temos que trabalhar com Arrays nas browses, aà eu pergunto: como fazer isso? tem algum exemplo? Hélio xHarbour 0.99.71/WS Quote Link to comment Share on other sites More sharing options...
evandro Posted September 21, 2007 Report Share Posted September 21, 2007 Olá, aAcessos:=SQLArray( cCmdSql, SqlGetConn() ) DEFINE DIALOG oDlg RESOURCE 'ACESSOS' REDEFINE LISTBOX oLbx FIELDS aAcessos[oLbx], aAcessos[oLbx], aAcessos[oLbx]; HEADERS 'Data', 'Hora', 'Nome' OF oDlg ID 1101 SIZES 30, 40, 80 oLbx:setArray(aAcessos) ACTIVATE DIALOG oDlg CENTERED id=code>id=code>[]s, Evandro G. de Paula Curvelo - MG evandro@skillnet.com.br (Escr. - na Cidade) imortal@skillnet.com.br (Res. - na Roça) FWH 2.6+PellesC+MyMake+xHarbour.org 0.99.5+SqlLib V ENCONTRO FIVEWIN - NOVEMBRO/2007 - EU VOU "TRAVÊIS" Quote Link to comment Share on other sites More sharing options...
siscat Posted September 21, 2007 Report Share Posted September 21, 2007 lento em que sentido voce diz? eu uso SQL, e todas as minhas rotinas possuem browse, tanto com tables com poucos registros como com tables com milhares de registros... comparando um browse SQL com um DBF o DBF é um pouco mais rápido sim... más nada que impessa o uso dos browses com SQL... A alternativa que o Evandro te passou é funcional... más torna o browse estático, ou seja, em ambiente de rede uma estação nao vai ter os dados atualizados no browse quando outra estação executar alguma edição.. a não ser que voce execute o select novamente... []s.. Marllon Figueiredo Analista de Sistemas ERP/CRM Porto Alegre - RS siscatsoftware@hotmail.com Sistema Integrado de Gestão - SIGLCS FWH for (x)Harbour ADS Server, DB SQL c/ SQLRDD @Say com MUITO Orgulho! Quote Link to comment Share on other sites More sharing options...
Vitor Reis Posted September 21, 2007 Report Share Posted September 21, 2007 eu tbem senti isso.. na sqllib, inclusive já falei com vailton, e me parece que tem solução. eu senti lentidao assim.. se o usuario arrastar o browse com o mouse, por exemplo até a metade do listview.. nossa, demora pra caramba pra estabilizar em um registro, se navegar uma a uma.. beleza... inicio e fim.. tbem vai beleza... no meio é que é problema testei numa tabela de produtos com 6 mil registros. user array realmente num é nada pratico... Vitor s.b.c. fwh 2.3 Quote Link to comment Share on other sites More sharing options...
personal Posted September 21, 2007 Report Share Posted September 21, 2007 Estou operando neste momento com uma tabela com relacionamento que o final passa de 500.000 registros, não percebi nada de lentidão. Melhor seria voce mostra como esta fazendo, quem sabe possamos ajudar. Oliveira, Sérgio A. PERSONAL Comp. e Sitemas.id=green> FWH 2.5, xharbour 0.99.4, SqlLib,AdoRDD, MySql, xMate. TWBrowse(),C5Menu,vPrinter. Quote Link to comment Share on other sites More sharing options...
hcunha Posted September 21, 2007 Report Share Posted September 21, 2007 Ola pessoal, Eu tambem tive problemas com o browse no mysql. Nas minhas rotinas de cadastro tem um browse. Se tiver muitos registros fica lento sim e isso é um problema da SqlLib eu acho. Pra resolver meu problema eu tirei os browses e coloquei um botao que abre um browse quando o usuario quer pesquisar algum registro e ao clicar no registro selecionado ele retorna os valores pra dialog. Helio Cunha GControl Tecnologia hfcunha@hotmail.com xHarbour 0.99 - xMate - MySql 4.1 - SqlLib Quote Link to comment Share on other sites More sharing options...
hcunha Posted September 21, 2007 Report Share Posted September 21, 2007 Essa lentidão acontece com mais frequencia quando damos um refresh na dialog. Helio Cunha GControl Tecnologia hfcunha@hotmail.com xHarbour 0.99 - xMate - MySql 4.1 - SqlLib Quote Link to comment Share on other sites More sharing options...
helio1361303486 Posted September 21, 2007 Author Report Share Posted September 21, 2007 Segue o Código fonte: #include "fivewin.ch" #include "tsbrowse.ch" #include 'sqllib.ch' #include 'ord.ch' REQUEST SQLLIB REQUEST MySQL ************************************************************FUNCTION Main() host := "mysql01.MeuProvedor.com.br" db := "teste" user := "teste" pwd := "senha" SQL CONNECT ON host; PORT 3306 ; DATABASE db ; USER user ; PASSWORD pwd ; OPTIONS SQL_NO_WARNING ; LIB "MySQL" IF SQL_ErrorNO() > 0 MsgAlert( OEMTOANSI("Não foi possÃvel conectar ao banco de dados, Segue erro de retorno:")+CRLF+CRLF+SQL_ErrorMsg() ) QUIT ENDIF RDDSetDefault('MySQL') USE cli ALIAS cli NEW if !file( "cli.cdx" ) INDEX ON clicod TAG Tag1 TO cli.cdx INDEX ON clinom TAG Tag2 TO cli.cdx endif SET INDEX TO cli.cdx DbSelectArea("cli") ;cli->(DbSetOrder(2)) ;cli->(DbGotop()) DEFINE DIALOG oDlg RESOURCE "Cliente1" REDEFINE BROWSE oBrw ID 1000 OF oDlg ADD COLUMN TO oBrw; HEADER CRLF+OEMTOANSI("Código") SIZE 45; DATA FieldWBlock( "clicod", Select("cli") ); 3DLOOK TRUE EDITABLE MOVE DT_MOVE_LEFT ALIGN DT_LEFT, DT_LEFT; TAG "Tag1" ADD COLUMN TO oBrw; HEADER CRLF+OEMTOANSI("Nome") SIZE 400; DATA FieldWBlock( "clinom", Select("cli") ); 3DLOOK TRUE EDITABLE MOVE DT_MOVE_LEFT ALIGN DT_LEFT, DT_LEFT; TAG "Tag2" oBrw:lSeek:=.T. oBrw:SetIndexCols( 1, 2 ) oBrw:nHeightCell += 6 oBrw:nHeightHead += 7 DbSelectArea("cli") ;cli->(DbGotop()) ** GET PARA PESQUISA, Hà DEMORA TB. PARA LOCALIZAR O REGISTRO DIGITANDO LETRA POR LETRA. REDEFINE Get oChar VAR cChar PICTURE "@!" Id 2101 OF oDlg; ON CHANGE Pesquisa(nKey,"cli",oBrw,oChar) oBrw:Gobottom() ;oBrw:Gotop() ;oBrw:refresh() oDlg:lHelpIcon:=.f. ACTIVATE DIALOG oDlg CENTERED Return Nil ************************************************************FUNCTION Pesquisa(nKey,Alias,oBrw,oGet) LOCAL nOldRecno:=(Alias)->(Recno()) IF nKey==VK_BACK IF LEN(cChav) > 0 cChav:=LEFT(cChav,LEN(cChav)-1) cChar:=cChav ELSE cChar:=SPACE(50) oGet:SetPos(0) RETURN(.F.) ENDIF ENDIF IF (nKey>=32 .AND. nKey<=255) .OR. nKey=VK_BACK IF nKey!=VK_BACK cChav+=CHR(nKey) ENDIF IF !(Alias)->(dbSeek(cChav)) (Alias)->(dbGoto(nOldRecno)) ;tone(400,1) ;tone(400,1) ENDIF oBrw:UpStable() ;oBrw:Refresh() ;oBrw:SetFocus() ;SysWait(.001) oGet:SetPos( LEN(cChav)+1 ) oGet:SetFocus() ENDIF RETURN(.T.) *------------------------ No Browse o PageDown e PageUp e Scroll fica lento, principalmente quando arrasta-se a barra de rolagem para o meio do browse. Testei com ListBox, Browse nativo do five, e agora com a Tsbrowse. Também não acho prático trabalhar com array, já que neste caso não fica on-line em rede. Não gostaria de retirar as browses dos meus sistemas. Será que tem uma solução? Hélio xHarbour 0.99.71/WS Quote Link to comment Share on other sites More sharing options...
laurenti Posted September 22, 2007 Report Share Posted September 22, 2007 Tive esse problema em um supermercado e resolvi dessa forma , até agora está funcionando blz com 36000 intens e varios terminais consultando, pode usar com array() tambem, fica até mais rapido. /////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////// static function localizaprod( nkey, olbx, aoGets, aDados ) cnomeap := '' if nKey==VK_F2 .and. len( alltrim(cpesq) ) <= 0 retur nkey else if nKey==VK_BACK if len( alltrim( cpesq ) ) >= 1 cpesq := substr( alltrim( cpesq ),1,len( alltrim(cpesq) )-1 ) elseif len( alltrim( cpesq ) ) <= 0 cpesq := '' produtos->( sqlfilter('') ) produtos->( dbgotop() ) endif endif If ( nKey >= 32 .and. nKey <= 255 ) .or. nKey=VK_BACK If nKey!=VK_BACK cpesq += upper( chr( nkey ) ) Endif Endif aDados[9]:=cPesq aoGets[9]:refresh() if len( alltrim( cPesq ) ) >0 produtos->( sqlfilter('descricao like"'+alltrim( cpesq )+'%" ' ) ) produtos->( dbgotop() ) endif oLbx:SetFocus() oLbx:gotop() oLbx:Refresh() endif return .t. FW26/XH9950/Pelles/Mysql/aprendiz(Java/PHP) laurentinocarlos@gmail.com Rio de Janeiro/Montes/Curvel Claros MG Quote Link to comment Share on other sites More sharing options...
diakonov Posted September 22, 2007 Report Share Posted September 22, 2007 Uma opção e usar o tdbfvirtual para manipular os dados do browse, que torna o processo mais simples. Jean Kecio sophon_diakonov@yahoo.com.br Quote Link to comment Share on other sites More sharing options...
personal Posted September 22, 2007 Report Share Posted September 22, 2007 Neste caso o banco de dados tem mais de 2mi de registros, o retorno pode superar a casa dos 800m de registros. SqlCmd:="" SqlCmd+="Select cab.numped,cab.notped,cab.emiped,cab.cliped,cab.totped,cab.staped," SqlCmd+= "cli.codcli,cli.nomcli" SqlCmd+=" FROM pedcab as cab, arqcli as cli" SqlCmd+=" WHERE cab.notped = '0'" SqlCmd+=" AND cab.totped > '0'" SqlCmd+=" AND cab.staped = 'P'" SqlCmd+=" AND cab.cliped = cli.codcli" SqlCmd+=" ORDER By cab.emiped ASC,cab.numped ASC, cli.nomcli ASC" Use SQL SqlCmd Via "MySql" Alias "TMP" New INTO xBanco **--[ itens dos pedidos selecionados ]--** SqlIte:="" SqlIte+="Select ite.numped,ite.codpro,ite.eanpro,ite.codfab,ite.despro,ite.unipro,ite.qtdpro,ite.vlrpro,ite.totpro,ite.seqped" SqlIte+=" FROM pedite as ite" SqlIte+=" Where ite.numped = "+Any2Sql(TMP->numped) SqlIte+=" ORDER BY ite.seqped ASC" Use SQL SqlIte Via "MySql" Alias "ITE" New INTO xBanco **------------------------** TWBrowse():lHScroll:=.f. @ 005, 005 LISTBOX oLbx[1] FIELDS Transf(TMP->numped,"999999 ")," "+DToC(TMP->emiped)+" "," "+TMP->nomcli,Transf(TMP->totped,"@EZ 999,999.99 ") Alias "TMP"; HEADERS "Pedido","Data","Cliente","Total" ; FieldSizes 040,075,270,070 Pixel Size 238,249 ; FONT fBold COLOR PRETO,GetSysColor(16) OF oDlg[1] ; ON CHANGE VerIte() //oLbx[1]:bKeyDown := { |tecla| iif(tecla=VK_SPACE,VaiNotVaiPed(), )} oLbx[1]:lAdjLastCol :=.t. // ajustar ultima coluna oLbx[1]:nClrText := { || PRETO } oLbx[1]:nClrPane := { || IIF(TMP->(OrdKeyNo()) % 2 == 0,CINZACC,CINZA)} // cor do fundo oLbx[1]:nClrForeFocus:= { || branco } // cor da letra barra ativa oLbx[1]:nClrBackFocus:= { || GetSysColor(13)} // cor do fundo barra ativa oLbx[1]:nClrNFBack := { || GetSysColor(13)} // cor da barra ativa (DISABLE) oLbx[1]:nClrNFFore := { || branco } // cor da letra na barra ativa (DISABLE) oLbx[1]:aJustify := {1,0,0,1} oLbx[1]:aHJustify := {2,2,2,2} oLbx[1]:nLineHeight := 20 oLbx[1]:nLineStyle := 6 oLbx[1]:nHeaderStyle := 6 oLbx[1]:nHeaderHeight:= 23 oLbx[1]:bFont := {|nRow,nCol,nStyleLine| pFonteBrowse( oDlg[1], oLbx[1], nRow, nCol, nStyleLine,fNormal,fNormal,fBold,IIF(oLbx[1]:lFocused,fBold,fNormal) ) } **--[ Footers - rodape do listbox ]--** oLbx[1]:lDrawFooters :=.T. // Ativa o footer oLbx[1]:nClrFFore :={|| AZUL} oLbx[1]:nClrFBack :={|| GetSyscolor(15)} oLbx[1]:nFooterHeight :=25 oLbx[1]:nFooterStyle :=6 oLbx[1]:aFJustify :={1,0,0,1,1} oLbx[1]:aFooters :={||{ Transf(TMP->(RecCount()),"@EZ 999,999 "),"", "",Transf(nTotal[1],"@EZ 999,999.99 ") }} TWBrowse():lHScroll:=.f. TWBrowse():lVScroll:=.t. @ 005, 245 LISTBOX oLbx[2] FIELDS ITE->codfab,ITE->despro,Str(ITE->qtdpro,10,2),Transf(ITE->vlrpro,"@EZ 9,999.99 "),Transf(ITE->totpro,"@EZ 99,999.99 ") Alias "ITE"; HEADERS "Código","Descrição","Qtde","Valor","Total" ; FieldSizes 040,250,045,060,060 Pixel Size 238,183 ; FONT fBold COLOR PRETO,GetSysColor(16) OF oDlg[1] //oLbx[1]:bKeyDown := { |tecla| iif(tecla=VK_SPACE,VaiNotVaiPed(), )} oLbx[2]:lAdjLastCol :=.t. // ajustar ultima coluna oLbx[2]:nClrText := { || PRETO } oLbx[2]:nClrPane := { || IIF(ITE->(OrdKeyNo()) % 2 == 0,CINZACC,CINZA)} // cor do fundo oLbx[2]:nClrForeFocus:= { || branco } // cor da letra barra ativa oLbx[2]:nClrBackFocus:= { || GetSysColor(13) } // cor do fundo barra ativa oLbx[2]:nClrNFBack := { || IIF(ITE->(OrdKeyNo()) % 2 == 0,CINZACC,CINZA) } // cor da barra ativa (DISABLE) oLbx[2]:nClrNFFore := { || PRETO } // cor da letra na barra ativa (DISABLE) oLbx[2]:aJustify := {0,0,1,1,1} oLbx[2]:aHJustify := {2,2,2,2,2} oLbx[2]:nLineHeight := 20 oLbx[2]:nLineStyle := 6 oLbx[2]:nHeaderStyle := 6 oLbx[2]:nHeaderHeight:= 23 oLbx[2]:bFont := {|nRow,nCol,nStyleLine| pFonteBrowse( oDlg[1], oLbx[2], nRow, nCol, nStyleLine,fNormal,fNormal,fBold,IIF(oLbx[2]:lFocused,fNormal,fNormal) ) } **--[ Footers - rodape do listbox ]--** oLbx[2]:lDrawFooters :=.T. // Ativa o footer oLbx[2]:nClrFFore :={|| AZUL} oLbx[2]:nClrFBack :={|| GetSyscolor(15)} oLbx[2]:nFooterHeight :=20 oLbx[2]:nFooterStyle :=6 oLbx[2]:aFJustify :={0,0,0,1,1} oLbx[2]:aFooters :={||{ Transf(ITE->(RecCount()),"@EZ 999,999 "),"", "",Transf(nTotal[1],"@EZ 999,999.99 ") }}id=code>id=code>Oliveira, Sérgio A. PERSONAL Comp. e Sitemas.id=green> FWH 2.5, xharbour 0.99.4, SqlLib,AdoRDD, MySql, xMate. TWBrowse(),C5Menu,vPrinter. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.