Performance na Rede
Moderador: Moderadores
Luciano,
Vc pode aumentar a performace com MySql copiando os dados que vai mostrar no relatório para um DBF temporário e partir deste montar seu relatório.
A velocidade aumenta significamente dessa maneira.
OU
Se vc quiser continuar com DBF mesmo, a solução é o TS que o Lernardo (sygecom) falou. Aí fica rápido em todas as estações.
Jânio
Vc pode aumentar a performace com MySql copiando os dados que vai mostrar no relatório para um DBF temporário e partir deste montar seu relatório.
A velocidade aumenta significamente dessa maneira.
OU
Se vc quiser continuar com DBF mesmo, a solução é o TS que o Lernardo (sygecom) falou. Aí fica rápido em todas as estações.
Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
Jânio, deixa eu ver se eu entendi.
Vou pegar todos os meus DBFs atuais e jogá-los para o MYSQL que estará no servidor, aí por exemplo, vou usar uma tela que eu irei precisar de uns 5 DBFs (que já estaräo transformados em tabeloas no MYSQL) entäo antes de entrar nessa tela eu crio esses 5 DBFs (que säo tabelas no MYSQL) no drive C da estaçäo dando comandos do tipo "select * from tabela_dbf1" e jogando o retorno no DBF c:\dbf1.dbf e etc até dbf5.dbf
é isso mesmo ou entend errado?
Quanto ao TS vou entrar em contato com o Leonardo para ele me ensinar a usar, é que ontem estive fora
Muito Obrigado
Vou pegar todos os meus DBFs atuais e jogá-los para o MYSQL que estará no servidor, aí por exemplo, vou usar uma tela que eu irei precisar de uns 5 DBFs (que já estaräo transformados em tabeloas no MYSQL) entäo antes de entrar nessa tela eu crio esses 5 DBFs (que säo tabelas no MYSQL) no drive C da estaçäo dando comandos do tipo "select * from tabela_dbf1" e jogando o retorno no DBF c:\dbf1.dbf e etc até dbf5.dbf
é isso mesmo ou entend errado?
Quanto ao TS vou entrar em contato com o Leonardo para ele me ensinar a usar, é que ontem estive fora
Muito Obrigado
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano,
Isso mesmo. Com um detalhe: Em vez de vc dar algum SQL, pode usar o COPY TO mesmo acrescentando VIA 'DBFCDX'
Veja um exemplo de um Relatório de VENDAS POR CLIENTE que tenho:
Isso mesmo. Com um detalhe: Em vez de vc dar algum SQL, pode usar o COPY TO mesmo acrescentando VIA 'DBFCDX'
Veja um exemplo de um Relatório de VENDAS POR CLIENTE que tenho:
Código: Selecionar todos
DBSELECTAREA(1)
DBUSEAREA(,,[A03PED],[PEDIDO], .T., [READONLY])
DBSETINDEX("A03PED")
DBSELECTAREA(2)
DBUSEAREA(,,[A16CLI],[CLIENTE], [READONLY])
DBSETINDEX("A16CLI")
DBSELECTAREA(3)
DBUSEAREA(,,[A16VED],[VENDEDOR], [READONLY])
DBSETINDEX("A16VED")
DBSELECTAREA(4)
DBUSEAREA(,,[A17EMP],[EMPRESA], [READONLY])
DBSETINDEX("A17EMP")
@ PROW() + 01, 00 SAY REPLICATE("-",79)
@ PROW() + 01, 00 SAY EMPRESA PICT "@!"
@ PROW() + 00, 69 SAY DATE()
@ PROW() + 01, 00 SAY USUARIO pict "@!"
@ PROW() + 00, 69 SAY "Pagina " + STRZERO(vPAGINA,3)
@ PROW() + 01, 00 SAY REPLICATE("-",79)
@ PROW() + 01, 00 SAY PADC(" RESUMO DE VENDAS POR CLIENTE ",79, "*")
@ PROW() + 01, 00 SAY REPLICATE("-",79)
@ PROW() + 01, 20 SAY "Emitidas entre " + DTOC(vDATAi) + " e " + DTOC(vDATAf)
@ PROW() + 01, 00 SAY REPLICATE("-",79)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
GERA_DBF()
tmp1 = dbftmp
SELECT CLIENTE
DBSETORDER(1)
DBGOTOP()
COPY FIELDS CODIGO, NOMCLI TO C:\&tmp1 VIA 'DBFCDX'
USE C:\&tmp1 NEW VIA 'DBFCDX'
INDEX ON CODIGO TAG CHAVE1 TO C:\&tmp1
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
GERA_DBF()
tmp2 = dbftmp
SELECT VENDEDOR
DBSETORDER(1)
DBGOTOP()
COPY FIELDS CODIGO, NOMRDZ TO C:\&tmp2 VIA 'DBFCDX'
USE C:\&tmp2 NEW VIA 'DBFCDX'
INDEX ON CODIGO TAG CHAVE1 TO C:\&tmp2
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
GERA_DBF()
tmp3 = dbftmp
SELECT EMPRESA
DBGOTOP()
COPY FIELDS CODIGO, NOMRDZ TO C:\&tmp3 VIA 'DBFCDX'
USE C:\&tmp3 NEW VIA 'DBFCDX'
INDEX ON CODIGO TAG CHAVE1 TO C:\&tmp3
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
GERA_DBF()
SELECT PEDIDO
DBSETORDER(5)
DBGOTOP()
DBSEEK( DTOS(vDATAi), .T.)
COPY TO C:\&dbftmp WHILE DATEMI <= vDATAf FOR FLGCAN <> "S" VIA 'DBFCDX'
USE C:\&dbftmp NEW VIA 'DBFCDX'
INDEX ON STR(CODCLI)+DTOS(DATEMI) TAG CHAVE1 TO C:\&dbftmp
DBSETORDER(1)
GOTO TOP
DO WHILE !EOF()
xSOMA = 0
xCODIGO = CODCLI
SET RELATION TO CODCLI INTO &tmp1
@ PROW() + 01,05 SAY "Cliente " + StrZero(&tmp1->CODIGO,5) + " " + &tmp1->NOMCLI
@ PROW() + 01,00 SAY "Venda Emissao Vendedor Emitente Qtde Parc. 1o. Venc. Tot Pedido"
DO WHILE CODCLI = xCODIGO
@ PROW() + 01,00 SAY &dbftmp->PEDIDO PICT "@E 999,999"
@ PROW() ,08 SAY &dbftmp->DATEMI
SET RELATION TO CODVED INTO &tmp2, TO CODEMT INTO &tmp3
@ PROW() ,19 SAY &dbftmp->CODVED PICT "99"
@ PROW() ,22 SAY &tmp2->NOMRDZ PICT "@!"
@ PROW() ,34 SAY &dbftmp->CODEMT PICT "9"
@ PROW() ,36 SAY &tmp3->NOMRDZ PICT "@!"
@ PROW() ,48 SAY STRZERO(&dbftmp->QTDPAR,02)
@ PROW() ,56 SAY &dbftmp->VENPRI
@ PROW() ,70 SAY &dbftmp->TOTPED PICT "@E 99,999.99"
xSOMA = xSOMA + &dbftmp->TOTPED
DBSKIP()
ENDDO
vSOMA = vSOMA + xSOMA
@ PROW() + 01,42 SAY "Total deste CLIENTE -->>"
@ PROW() ,69 SAY xSOMA PICT "@E 999,999.99"
@ PROW() + 01,00 SAY REPLICATE("-",79)
ENDDO
@ PROW() + 02,45 SAY "** Totalizacao **"
@ PROW() ,66 SAY vSOMA PICT "@E 99,999,999.99"
@ PROW() + 03,00 SAY PADC("****** FIM DO RELATORIO ******",79)
Código: Selecionar todos
*****************************************************************************
************** Funcao : Gera Arquivo Temporario *******************
************** Inicio : 18/10/2004 *******************
************** Ult.Alter: 15/01/2003 *******************
*****************************************************************************
FUNCTION GERA_DBF
Local contafil := 1
SET DEFAULT TO C:\
PUBLIC dbftmp := space(8)
IF FILE('C:\rela0001.dbf')
dbftmp = 'rela' + strzero(contafil,4) +'.dbf'
DO WHILE FILE(dbftmp)
contafil = contafil + 1
dbftmp = "rela" + STRZERO(contafil,4) +'.dbf'
ENDDO
ELSE
dbftmp = 'rela0001.dbf'
ENDIF
dbftmp = 'rela' + strzero(contafil,4)
SET DEFAULT TO
RETURN .T.
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
e se um arquivo tiver 500 mil registros, nao vai ficar lento ficar copiando toda hora ele do servidor para o C?
se na cópia pudermos utiizar a clausula where do mysql ai copiariamos apenas os dados que interessariam ao relatório....
em tempo: em rotinas de cadstro este técnica näo vai funcionar direito por causa da atualizacao do banco, ne?
muito obrigado
se na cópia pudermos utiizar a clausula where do mysql ai copiariamos apenas os dados que interessariam ao relatório....
em tempo: em rotinas de cadstro este técnica näo vai funcionar direito por causa da atualizacao do banco, ne?
muito obrigado
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Janio, neste caso em questão, dá para fazer tudo isto com apenas uma sentença. Vou bisbilhotar por aqui, e se encontrar te mando.
Como disse com uma sentença dá para gerar este relatorio, em sql mesmo, com tabela temporaria. Existe um comando do Mediator, que vc pode inserir comandos sql, podendo colocar sentenças das mais absurdas.
Como disse com uma sentença dá para gerar este relatorio, em sql mesmo, com tabela temporaria. Existe um comando do Mediator, que vc pode inserir comandos sql, podendo colocar sentenças das mais absurdas.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Re: Performance na Rede
Tenho um sistema XH Console, DBF/CDX:
. antes rodava em 1 "servidor" XP (não dedicado) com 6 terminais XP (DBFs no servidor e EXEs nos terminais), e era como foi comentado acima: 2 usuários abriam o Tbrowse do mesmo DBF e ficava lento pros dois.
. agora é 1 servidor win2003 dedicado (dual, 4Gb RAM etc), com os mesmos terminais XP (só que DBFs e EXEs no servidor e acesso via Terminal Service): vc pode abrir o mesmo arquivo em 2 ou mais terminais, via Tbrowse, e "grudar" o dedo no PgDn. Roda normalmente em todos, como se fosse só 1 terminal acessando.
Show de bola.
NOTA: transferi o resto deste post para um novo tópico: Terminal Service versus XH+WVT - Lixo na tela.
. antes rodava em 1 "servidor" XP (não dedicado) com 6 terminais XP (DBFs no servidor e EXEs nos terminais), e era como foi comentado acima: 2 usuários abriam o Tbrowse do mesmo DBF e ficava lento pros dois.
. agora é 1 servidor win2003 dedicado (dual, 4Gb RAM etc), com os mesmos terminais XP (só que DBFs e EXEs no servidor e acesso via Terminal Service): vc pode abrir o mesmo arquivo em 2 ou mais terminais, via Tbrowse, e "grudar" o dedo no PgDn. Roda normalmente em todos, como se fosse só 1 terminal acessando.
Show de bola.
NOTA: transferi o resto deste post para um novo tópico: Terminal Service versus XH+WVT - Lixo na tela.
Editado pela última vez por Eolo em 27 Jan 2009 11:59, em um total de 1 vez.
Re: Performance na Rede
Olá Eolo,
Você poderia me dar informações sobre o terminal service, tem algum tutorial de ajuda para instalar e configurar este serviço.
[]´s
Você poderia me dar informações sobre o terminal service, tem algum tutorial de ajuda para instalar e configurar este serviço.
[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Re: Performance na Rede
ASimoes, eu só tenho alguma idéia, pq foi um pessoal externo que montou (o servidor já veio pronto). Mas o ALAMINO tem as dicas, quem sabe ele poderia abrir um outro tópico a respeito?
Re: Performance na Rede
Luciano, essa técnica de copiar os dados primeiramente para um dbf temporário é somente para os cadastros! Percebi que se num relatório de vendas, por exemplo, vc tiver que ir a cada registro pegar no cadastro de clientes o nome do cliente (no banco de vendas vc não guarda o nome do cliente, apenas o codigo deste), é muito demorado isso em Mysql. Se vc copiar todo o cadastro de cliente para um dbf temporário (mesmo que sejam 5.000 registros) e no relatório de vendas vc ir pegar o nome do cliente nesse dbf temporário, é mais rápido do que ir diretamente na tabela mysql de clientes.e se um arquivo tiver 500 mil registros, nao vai ficar lento ficar copiando toda hora ele do servidor para o C?
Se houver como jogar tudo isso dentro de uma sentença slq SERIA MUITO MELHOR e mais RÁPIDO!Vou bisbilhotar por aqui, e se encontrar te mando.
Como disse com uma sentença dá para gerar este relatorio, em sql mesmo, com tabela temporaria.
Vamos ver o que o Alamino conseguiu!
Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Re: Performance na Rede
Olá pessoal,
tô achando esquisita essa história de que com o uso do mysql as consultas ficaram lentas.
Em todos os testes que fiz em rede local, o mysql voou baixo.
Quem sabe não é problema de estruturação da sua consulta.
Não há necessidade do uso de dbf, que se traduz num desperdício de recurso (memória, energia, etc.).
Grossamente falando, a consulta sql retorna um objeto array contendo os dados da consulta (e que já está na memória do terminal que a realizou).
Trate esse objeto como uma espécie de array e pronto.
Algo do tipo:
oQuery:GETROW(X):FIELDGET(Y)
Retorna o conteúdo da pesquisa que está na linha X e coluna Y.
Um exemplo para você ver funcionalidades que seriam um pouco mais difíceis com dbf.
tabela A
Campo1/Nome
campo2/Código da categoria
Campo3/Código do tipo
tabela B
Campo4/Código
Campo5/Nome da categoria
Campo6
tabela C
Campo7/Código
Campo8/Nome do tipo
Campo9
select A.Campo1,A.Campo2,A.Campo3,B.Campo5,C.Campo8
from A
left join B on B.Campo4=A.Campo2
left join C on C.Campo7=A.Campo3
order by A.Campo1
Isso geraria uma consulta/ tabela assim
A.Campo1 - A.Campo2 - A.Campo3 - B.Campo6 - C.Campo9
AAAA 0001 0002 A X
BBBB 0001 0002 A X
CCCC 0005 0003 F Z
DDDD 0001 0005 A Y
Então oQuery:GETROW(3):FIELDGET(4) retorna a letra "F"
Mesmo sem um índice, com certa velocidade, você poderia ordenar o resultado por qualquer campo indicado na pesquisa.
É só estudar um pouco o mysql.
MarceloG
tô achando esquisita essa história de que com o uso do mysql as consultas ficaram lentas.
Em todos os testes que fiz em rede local, o mysql voou baixo.
Quem sabe não é problema de estruturação da sua consulta.
Não há necessidade do uso de dbf, que se traduz num desperdício de recurso (memória, energia, etc.).
Grossamente falando, a consulta sql retorna um objeto array contendo os dados da consulta (e que já está na memória do terminal que a realizou).
Trate esse objeto como uma espécie de array e pronto.
Algo do tipo:
oQuery:GETROW(X):FIELDGET(Y)
Retorna o conteúdo da pesquisa que está na linha X e coluna Y.
Um exemplo para você ver funcionalidades que seriam um pouco mais difíceis com dbf.
tabela A
Campo1/Nome
campo2/Código da categoria
Campo3/Código do tipo
tabela B
Campo4/Código
Campo5/Nome da categoria
Campo6
tabela C
Campo7/Código
Campo8/Nome do tipo
Campo9
select A.Campo1,A.Campo2,A.Campo3,B.Campo5,C.Campo8
from A
left join B on B.Campo4=A.Campo2
left join C on C.Campo7=A.Campo3
order by A.Campo1
Isso geraria uma consulta/ tabela assim
A.Campo1 - A.Campo2 - A.Campo3 - B.Campo6 - C.Campo9
AAAA 0001 0002 A X
BBBB 0001 0002 A X
CCCC 0005 0003 F Z
DDDD 0001 0005 A Y
Então oQuery:GETROW(3):FIELDGET(4) retorna a letra "F"
Mesmo sem um índice, com certa velocidade, você poderia ordenar o resultado por qualquer campo indicado na pesquisa.
É só estudar um pouco o mysql.
MarceloG
Água mole em pedra dura tanto bate que até espirra!
Re: Performance na Rede
Se o MySQL não faz isso rápido, só pode ser por conta de algum problema na rede. Até porque, no SELECT você resgata só alguns campos. Nem precisa de todos. Pesquisas desse tipo TEM que ser rápidas. Pelo menos a ponto de dispensar esse tipo de artifício. Com folga.Janio escreveu:Luciano, essa técnica de copiar os dados primeiramente para um dbf temporário é somente para os cadastros! Percebi que se num relatório de vendas, por exemplo, vc tiver que ir a cada registro pegar no cadastro de clientes o nome do cliente (no banco de vendas vc não guarda o nome do cliente, apenas o codigo deste), é muito demorado isso em Mysql.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
Re: Performance na Rede
Caros,
Retomei agora o uso do mediator no meu sistema, instalei até a versão mais recente do site, porem os relatórios continuam muito lentos (não estou nem falando de rede, estou testando na minha máquina local com o banco de dados rodando local também)
meus relatórios ainda são do tempo da vovozinha, ou seja, ainda mantive a nossa velha e eficiente forma de criar relatórios:
exemplo:
select arq1
go top
do while !eof()
mcodigo=codigo
mvalor=0
select arq2
seek codigo
do while !eof() .and. codigo=mcodigo
mvalor+=valor
skip
enddo
.
.
.
select arqN
.
.
.
select arq1
skip
enddo
Pelo que entendi terei que mudar meus relatórios usando selects com cláusulas WHERE , mas com isso terei que alterar eles todos e são mais de 100 e com isso a utilização do mediator vai por agua abaixo, pois a grande vantagem dele é não precisar alterar o código.
Se usar a TMySQL vai ser pior ainda, vou ter que mudar tudo mesmo ....
Alguem poderia me dar uma luz e me indicar um caminho melhor.
Muito Obrigado
Retomei agora o uso do mediator no meu sistema, instalei até a versão mais recente do site, porem os relatórios continuam muito lentos (não estou nem falando de rede, estou testando na minha máquina local com o banco de dados rodando local também)
meus relatórios ainda são do tempo da vovozinha, ou seja, ainda mantive a nossa velha e eficiente forma de criar relatórios:
exemplo:
select arq1
go top
do while !eof()
mcodigo=codigo
mvalor=0
select arq2
seek codigo
do while !eof() .and. codigo=mcodigo
mvalor+=valor
skip
enddo
.
.
.
select arqN
.
.
.
select arq1
skip
enddo
Pelo que entendi terei que mudar meus relatórios usando selects com cláusulas WHERE , mas com isso terei que alterar eles todos e são mais de 100 e com isso a utilização do mediator vai por agua abaixo, pois a grande vantagem dele é não precisar alterar o código.
Se usar a TMySQL vai ser pior ainda, vou ter que mudar tudo mesmo ....
Alguem poderia me dar uma luz e me indicar um caminho melhor.
Muito Obrigado
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Performance na Rede
Luciano, tente o seguinte usando o Mediator mesmo, já que é só relatório:
Dá para usar em relatórios, tbrowse´s, etc ...
Código: Selecionar todos
...
cr1:= "select * from cdcli003 where clicod = "
cr2:= " order by clidat"
seek1:= str(clicod,7)
use (netname()) as cr1+seek1+cr2 new scrollable overwrite // este comando faz o select
...Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Re: Performance na Rede
Alguém utiliza a forma mostrada pelo MARCELOG
Muito interessante...
Muito interessante...
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql

