Jump to content
Fivewin Brasil

MySQL+SQLLIB+TsBrowse


helio1361303486

Recommended Posts

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"

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...