Jump to content
Fivewin Brasil

Pra quem manja de SQL


vagner

Recommended Posts

Olá,

Estou testando o mysql, tenho uma table (de Cep), com uns 640.000 registros.

Bom qndo coloquei isso no browse, ficou lento (em relação ao dbf).

Bom me falaram para eu criar índice que iria melhorar, realmente melhorou, porém, não está nem perto de ficar igual ao dbf.

Bom, mas a pergunta é :

Tenho como selecionar o índice que criei ou o sql seleciona o que quer a hora que quer ?

eu preciso que qndo mudar de coluna mudar o índice tb mas não estou conseguindom ficando inviável a utilização do sql.

Qual seria a saída ?

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Olá,

Estou testando o mysql, tenho uma table (de Cep), com uns 640.000 registros.

Bom qndo coloquei isso no browse, ficou lento (em relação ao dbf).

Bom me falaram para eu criar índice que iria melhorar, realmente melhorou, porém, não está nem perto de ficar igual ao dbf.

Bom, mas a pergunta é :

Tenho como selecionar o índice que criei ou o sql seleciona o que quer a hora que quer ?

eu preciso que qndo mudar de coluna mudar o índice tb mas não estou conseguindom ficando inviável a utilização do sql.

Qual seria a saída ?

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Wagner

Boa tarde

Este tipo de consulta com muitos registros em um browse eu considero inviável com MySql.

Procuro trabalhar sempre com filtros para retornar o menor número de registros para trablhar em browse.

Uma sugestão é filtrar por UF e colocar para ordenar pelas colunas com ORDER BY, direto sem índices.

Att

João Bosco

foto.jpg

Contagem/MG

FWH 10.6b xHb 1.2.1 WorkShop 4.5

PellesC SQLLIB SQLRDD xDev MySql MS-Sql

Link to comment
Share on other sites

citação:

Wagner

Boa tarde

Este tipo de consulta com muitos registros em um browse eu considero inviável com MySql.

Procuro trabalhar sempre com filtros para retornar o menor número de registros para trablhar em browse.

Uma sugestão é filtrar por UF e colocar para ordenar pelas colunas com ORDER BY, direto sem índices.

Att

João Bosco

foto.jpg

Contagem/MG

FWH 10.6b xHb 1.2.1 WorkShop 4.5

PellesC SQLLIB SQLRDD xDev MySql MS-Sql


id=quote>id=quote>

Olá,

Obrigado por responder, mas infelizmente não posso pedir ao usuário que está procurando por uma rua, e não sabe nem o estado nem a cidade e muito menos o bairro, saia colocando o estado, depois a cidade e bairro e para encontrar a rua que ele quer.

O Que eu quero é poder selecionar o Indice que montei aí daria para eu fazer um order by... o que eu quiser depois icon_smile_wink.gif

Mesmo assim obrigado.

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Wagner

Sugiro você carregar o browse em branco!

Após o usuário digitar parte da Rua você executar a consulta no banco de dados e ir mostrando à medida que ele for digitando.

No meu caso, eu trabalho com pelo menos 5 letras iniciais para executar o filtro, desta forma o número de registros retornados é menor.

Att

João Bosco

foto.jpg

Contagem/MG

FWH 10.6b xHb 1.2.1 WorkShop 4.5

PellesC SQLLIB SQLRDD xDev MySql MS-Sql

Link to comment
Share on other sites

Olá João,

Obrigado, mas meus usuários estão acostumados a trabalhar com pesquisa incremental icon_smile.gif, mas se não houver outro jeito, tô vendo que não vai dar para eu mudar para sql icon_smile_big.gif

Placar :

(1) Dbf x (0) Sql icon_smile_big.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Ola Vagner o que adianta exibir uma browse com mil registro por exemplo se o usuario ira enxergar apenas uns 20 30 no maximo por vez, faz como o João Bosco dize, exibe uma browse em branco e depois disto faz o filtro...

Abraços

Luiz Fernando

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

msn: empresoft@globo.com

skype:empresoft

empresoft@globo.com

FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1

FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104

Link to comment
Share on other sites

Com SQLLIB usando DBUSEAREA fica normal, pelo que me lembro.

Algumas dicas:

O MySQL usa os índices automaticamente, para saber se ele realmente está usando um índice numa query sua, coloque um Explain no ínicio e veja o resultado.

Por exemplo: Se no seu programa você faz Select * From tabelaCEP Order By uf, execute no MySQL Workbench Explain Select * From tabelaCEP Order By uf que isso poderá te dar mais informações sobre sua query.

Aqui eu uso a SQLLIB e quando faço abertura via DBUSEAREA, tem um SQL PACKET SIZE que você pode alterar (veja na documentação). Isso pode ajudar.

Se estiver fazendo USE SQL, você pode optar por colocar um Limit ao final, por exemplo: Select * From tabelaCEP Order By uf Limit 1000, desse modo, apenas os 1000 primeiros registros serão retornados.

Mais uma dica, ao invés de utilizar Select *, tente na medida do possível trocar o * pelos campos que você precisa. Se sua tabela tem 70 campos mas só vai exibir 5 para o usuário, faça Select somente desses 5 campos.

--

Luis Fernando Jr. (Luisão)

FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY

When I'm sad, I stop being sad and be awesome instead. True Story

Link to comment
Share on other sites

citação:

Ola Vagner o que adianta exibir uma browse com mil registro por exemplo se o usuario ira enxergar apenas uns 20 30 no maximo por vez, faz como o João Bosco dize, exibe uma browse em branco e depois disto faz o filtro...

Abraços

Luiz Fernando

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

msn: empresoft@globo.com

skype:empresoft

empresoft@globo.com

FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1

FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104


id=quote>id=quote>

Olá,

Eu uso pesquisa incremental, ou seja o usuário vai digitando e vai buscando automaticamente os dados, para isso não daria para usar a pesquisa incremental, teria que ficar pedindo para ele digitar e dar um enter para que pesquisasse a próxima icon_smile_big.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

citação:

Com SQLLIB usando DBUSEAREA fica normal, pelo que me lembro.

Algumas dicas:

O MySQL usa os índices automaticamente, para saber se ele realmente está usando um índice numa query sua, coloque um Explain no ínicio e veja o resultado.

Por exemplo: Se no seu programa você faz Select * From tabelaCEP Order By uf, execute no MySQL Workbench Explain Select * From tabelaCEP Order By uf que isso poderá te dar mais informações sobre sua query.

Aqui eu uso a SQLLIB e quando faço abertura via DBUSEAREA, tem um SQL PACKET SIZE que você pode alterar (veja na documentação). Isso pode ajudar.

Se estiver fazendo USE SQL, você pode optar por colocar um Limit ao final, por exemplo: Select * From tabelaCEP Order By uf Limit 1000, desse modo, apenas os 1000 primeiros registros serão retornados.

Mais uma dica, ao invés de utilizar Select *, tente na medida do possível trocar o * pelos campos que você precisa. Se sua tabela tem 70 campos mas só vai exibir 5 para o usuário, faça Select somente desses 5 campos.

--

Luis Fernando Jr. (Luisão)

FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY

When I'm sad, I stop being sad and be awesome instead. True Story


id=quote>id=quote>

Sim, creio que fique parecida, mas aí acaba perdendo em performance (Mais ainda) icon_smile_big.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Para que entendam melhor o que eu preciso:

telah.png

Quando o usuário clica no cabeçalho, eu coloco na ordem, e qndo ele vai digitando vai aparecendo o que ele quer, aí fica mais fácil dele procurar as coisas icon_smile_wink.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Wagner

Eu tb utilizo pesquisa incremental!

Mas quando executo Select * from tabela where campo like 'A%' o número de registros que serão retornados é muito grande.

Então somente executo a pesquisa depois de colher 5 letras,

Select * from tabela where campo like 'ANAPO%'

Para o usuário a pesquisa fica mais rápida!

Att

João Bosco

foto.jpg

Contagem/MG

FWH 10.6b xHb 1.2.1 WorkShop 4.5

PellesC SQLLIB SQLRDD xDev MySql MS-Sql

Link to comment
Share on other sites

Vagner, também uso pesquisa incremental no meu. Realmente ficava uma carroça, mas ai adotei a seguinte regra, a pesquisa incremental só inicia após o usuário digitar a 3a letra... Tenta isso...

abraço

citação:

Para que entendam melhor o que eu preciso:

telah.png

Quando o usuário clica no cabeçalho, eu coloco na ordem, e qndo ele vai digitando vai aparecendo o que ele quer, aí fica mais fácil dele procurar as coisas icon_smile_wink.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"


id=quote>id=quote>

Eduardo Motta

emotta@gmail.com.br

FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD

AJbJ

Link to comment
Share on other sites

Ola amigos

Vagner, realmente quando se trabalha com DBF e vai mudar para SQL, a coisa complica no quesito BROWSE, tambem tinha este problema com meus clientes, mais com o tempo o pessoal ja foi se acostumando e não tive mais problemas, imagina uma tabela com 4 milhoes de registros ou mais e fazer um BROWSE, pro DBF é facil, mais pro SQL fica dificil, mais adotando o FILTRO em SQL vc vera que em RELATORIOS vai acabar e muito com DO WHILE...IF ISSO... IF AQUILO, com apenas uma QUERY "consulta" em SQL vc praticamente monta todo o resultado da consulta.

Te digo, quando passar para SQL, vc nem vai mais querer saber de DBF, vale muito a pena mudar para SQL, no meu caso atualmente estou usando MYSQL, mais ja estou mudando para POSTGRE, pois a consulta é muito mais rápida que no MYSQL.

E outra o MYSQL não vai mais evoluir.

Espero ter ajudado

Jackson Douglas

Boa Vista

FWH 11.05 Lamborguini ( isso voa gente ) PellesC+xH 1.2.1 + FAST REPORT + DBFCDX + SQL 100%

email : miragerr@osite.com.br

MSN : jackson_rl@hotmail.com

SKYPE : jackson_rr

Link to comment
Share on other sites

Achei que a pesquisa sensitive não tinha como, pois estou so nos primeiro teste , mais vi um exemplo do Sergio Imperio que funciona perfeito utilizando array, creio que seria mais ou menos da forma que o Gilmer mencionou acima, vi o codigo e achei bem pratico, sem limites de registros...

Abraços

Luiz Fernando

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

msn: empresoft@globo.com

skype:empresoft

empresoft@globo.com

FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1

FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104

Link to comment
Share on other sites


#include "FiveWin.ch"

#include "common.ch"

#include "postgres.ch"

#include "Folder.ch"

#define btn_width 12

#define btn_height 10

// Pesquisa sensitive a medida que vai digitando ele vai selecionando o que se digita....................................

// no POSTGRESQL.................

function listbox_clientes()

local lobjet

private salvavarPesCli := "A"

private opimcli

define dialog listbox_clientes title oTitleListboxClientes from 000,000 to 620,1020 pixel brush obrush //transparent //STYLE nOr( WS_BORDER, WS_POPUP, WS_VISIBLE )

@ 0.1,0.3 to 1.5,72.7 label "" of listbox_clientes color corfrtsay,corfdosay

@ 1.7,0.3 to 19.9,72.7 label "" of listbox_clientes color corfrtsay,corfdosay

@ 20,0.3 to 22,72.7 label "" of listbox_clientes color corfrtsay,corfdosay

asamplzclientes = {""}

arecclientes = {}

atipoclientes = {"Cliente","Fantasia","Parte do nome","CNPJ","CPF","Cidade","Estado"}

mtipoclientes = "Cliente"

mpesquisacliente = space(50)

@ 009,005 say "Pesquisar por: " of listbox_clientes font mtahoma size 050,9 color corfrtsay,corfdosay pixel

@ 007,050 combobox otipoclientes var mtipoclientes items atipoclientes font mtahoma size 050,25 of listbox_clientes color corfrtget,corfdoget pixel

@ 007,101 get opesquisacliente var mpesquisacliente picture "@!" font mtahoma size 405,12 of listbox_clientes color corfrtget,corfdoget pixel

@ 029.5,005 listbox obrzclientes fields asamplzclientes[obrzclientes],asamplzclientes[obrzclientes],;

asamplzclientes[obrzclientes],asamplzclientes[obrzclientes],asamplzclientes[obrzclientes],;

asamplzclientes[obrzclientes],asamplzclientes[obrzclientes];

headers "Codigo","Cliente","Fantasia","CNPJ/CPF","Cidade","Estado","Estado" FIELDSIZES 050,305,210,150,160,050,045;

size 500,247 ;

pixel of listbox_clientes

obrzclientes:nClrPane := {|| iif(asamplzclientes[obrzclientes] = 'Ativo',corlstbxnormal,iif(empty(asamplzclientes[obrzclientes]),corlstbxnormal,corlstbxdifere)) }

obrzclientes:nLineStyle := 2

obrzclientes:lCellStyle = .t.

obrzclientes:lAutoSkip = .t.

obrzclientes:SetArray(asamplzclientes)

obrzclientes:bGoTop = { || obrzclientes:nat := 1 }

obrzclientes:bGoBottom = { || obrzclientes:nat := Eval( obrzclientes:bLogicLen ) }

obrzclientes:bSkip = { | nWant, nOld | nOld := obrzclientes:nat, obrzclientes:nat += nWant,;

obrzclientes:nat := Max( 1, Min( obrzclientes:nat, Eval( obrzclientes:bLogicLen ) ) ),;

obrzclientes:nat - nOld }

obrzclientes:bLogicLen = { || Len( asamplzclientes ) }

obrzclientes:cAlias = "Array"

obrzclientes:nColAct := 1

obrzclientes:lMChange := .F.

obrzclientes:SetFocus()

obrzclientes:Refresh()

@ 289,012 buttonbmp olisclibut00 bitmap "bmpnovo" left prompt "Novo" textright size 040,12 font obotaof of listbox_clientes pixel

@ 289,056 buttonbmp olisclibut01 bitmap "bmpalterar" left prompt "Altera" textright size 040,12 font obotaof of listbox_clientes pixel

@ 289,100 buttonbmp olisclibut02 bitmap "bmpexcluir" left prompt "Excluir" textright size 040,12 font obotaof of listbox_clientes pixel

@ 289,144 buttonbmp olisclibut03 bitmap "" left prompt "Inatividade" textright size 040,12 font obotaof of listbox_clientes pixel

@ 289,452 buttonbmp olisclibut10 bitmap "bmpsair" left prompt "Sair" textright size 040,12 font obotaof of listbox_clientes pixel action ( listbox_clientes:end() )

activate dialog listbox_clientes center on init pesquisa_cliente()

salvavarPesCli := "A"

opimcli:end()

return nil

function pesquisa_cliente()

define timer opimcli interval 70 action psq_cliente()

activate timer opimcli

return nil

function psq_cliente()

if salvavarPesCli <> opesquisacliente:cText

salvavarPesCli := opesquisacliente:cText

enche_cliente()

endif

return nil

function enche_cliente()

if empty(opesquisacliente:cText)

asamplzclientes = {""}

arecclientes = {}

obrzclientes:SetArray(asamplzclientes)

obrzclientes:refresh()

return .t.

endif

asamplzclientes = {}

arecclientes = {}

if mtipoclientes = "Cliente"

cquery := "select * from fncliente where " +;

"substr(razaosocial,1"+","+alltrim(str(len(alltrim(opesquisacliente:cText))))+")"+;

" = " + "'"+alltrim(opesquisacliente:cText)+"'" +;

" order by razaosocial asc;"

elseif mtipoclientes = "Fantasia"

cquery := "select * from fncliente where " +;

"substr(fantasia,1"+","+alltrim(str(len(alltrim(opesquisacliente:cText))))+")"+;

" = " + "'"+alltrim(opesquisacliente:cText)+"'" +;

" order by fantasia asc;"

elseif mtipoclientes = "Parte do nome"

cquery := "select * from fncliente where " +;

"razaosocial like " + "'%"+alltrim(opesquisacliente:cText)+"%'"+;

" order by razaosocial asc;"

elseif mtipoclientes = "CNPJ"

cquery := "select * from fncliente where " +;

"substr(numerodocumentonacional,1"+","+alltrim(str(len(alltrim(opesquisacliente:cText))))+")"+;

" = " + "'"+alltrim(opesquisacliente:cText)+"'" +;

" and pessoafisicajuridica = 'J'"+;

" order by numerodocumentonacional asc;"

elseif mtipoclientes = "CPF"

cquery := "select * from fncliente where " +;

"substr(numerodocumentonacional,1"+","+alltrim(str(len(alltrim(opesquisacliente:cText))))+")"+;

" = " + "'"+alltrim(opesquisacliente:cText)+"'" +;

" and pessoafisicajuridica = 'F'"+;

" order by numerodocumentonacional asc;"

elseif mtipoclientes = "Cidade"

cquery := "select * from fncliente where " +;

"substr(cidadeibge,1"+","+alltrim(str(len(alltrim(opesquisacliente:cText))))+")"+;

" = " + "'"+alltrim(opesquisacliente:cText)+"'" +;

" order by cidadeibge asc, razaosocial asc;"

elseif mtipoclientes = "Estado"

cquery := "select * from fncliente where " +;

"substr(uf,1"+","+alltrim(str(len(alltrim(opesquisacliente:cText))))+")"+;

" = " + "'"+alltrim(opesquisacliente:cText)+"'" +;

" order by uf asc, razaosocial asc;"

endif

oquery := oServer:Query(cquery)

DO WHILE ! oquery:Eof()

a = oquery:Fieldget(oquery:Fieldpos('seqcliente'))

b = oquery:Fieldget(oquery:Fieldpos('razaosocial'))

fantasia = oquery:Fieldget(oquery:Fieldpos('fantasia'))

c = oquery:Fieldget(oquery:Fieldpos('pessoafisicajuridica'))

d = oquery:Fieldget(oquery:Fieldpos('numerodocumentonacional'))

e = oquery:Fieldget(oquery:Fieldpos('cidadeibge'))

f = oquery:Fieldget(oquery:Fieldpos('uf'))

ativo = oquery:Fieldget(oquery:Fieldpos('ativo'))

if !empty(a)

aadd( asamplzclientes,{alltrim(str(a)),b,fantasia,iif(c = "J",transform(d,"@r 99.999.999/9999-99"),transform(d,"@r 999.999.999-99")),;

e,f,iif( ativo = .t.,"Ativo","Inativo" ) } )

aadd( arecclientes,a )

endif

oquery:Skip()

END

oquery:destroy()

if empty( asamplzclientes )

asamplzclientes = {""}

arecclientes = {}

endif

obrzclientes:SetArray(asamplzclientes)

obrzclientes:refresh()

return nil

id=code>id=code>

|Wellington Vieira|

|Uberlândia/MG|

|E-mail:wellington_programador@hotmail.com|

Link to comment
Share on other sites

Olá, aqui usamos pesquisa incremental, mas se aí você ficar usando like em 700k registros, aí ferr@ o parmera mesmo né.

Aqui fazemos a pesquisa incremental em cima do array que já obtivemos através do select, fica excelente (tem que conhecer a classe um pouquinho para ir posicionando o browse corretamente).

Quanto ao índice, use o explain que o Luisão falou para você testar. O índice é escolhido automaticamente pelo mysql, com base nos índices que você criou, então igual no DBF, faça o select, colocando no where, a sequência correta dos campos do índice.

Exemplo tosco:

CREATE INDEX idx_01 ON CLIENTES(regiao,estado,chucrutes)

Correto:

id=code>
id=code>

Errado:

id=code>
id=code>

Ãndice em mysql é tão importante quanto em DBF, então, mesmo que o explain esteja retornando que está sendo usado um índice, veja se não seria necessário complementar esse índice para melhorar a performance.

Erciley Junior (FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY)

NÃO ABANDONE O POST, QUEREMOS SABER SE SUA DÚVIDA/PROBLEMA TEVE SOLUÇÃO

Link to comment
Share on other sites

Mais uma coisa Vagner... ^^

nesse programa, talvez você tenha razão que em DBF é mais rápido...

mas procure um programa seu para converter para mysql, aqueles programinhas que você lê uns 4 arquivos para apresentar uma informação na tela, aí você vai ver a diferença de velocidade dos JOIN com os DBSEEK ^^

Erciley Junior (FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY)

NÃO ABANDONE O POST, QUEREMOS SABER SE SUA DÚVIDA/PROBLEMA TEVE SOLUÇÃO

Link to comment
Share on other sites

Então.

Como não quero fazer pesquisa incremental em cima de Array por causa que o ascan, é extremamente lento em relação ao DbSeek, estou testando pegar do sql e jogar para um DBF temporário em memória, que é extemamente rápido ainda mais com índices em memória icon_smile.gif. Ou Seja, NÃO vou deixar meus DBF´s por nada ou até aparecer algo mais rápido (KKKKKKKKKK)

Bom, agora que já consegui essa parte, vem o restante icon_smile_big.gif

Depois que eu dei um select no arquivo, existe algum comando que eu crie um txt direto, ou preciso realmente ir registro por registro gravando a linha ?

Algo como no DBF copy to sdf por exemplo, mas se não tiver algo assim, fazer o que né ? icon_smile_evil.gificon_smile_evil.gificon_smile_evil.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Vagner, você já testou o SQLRDD??

se não me engano, ele faz isso e muito mais q vc. quer.

Existe uma versão DEMO do SQLRDD Extreme ?

Sim! Basta acessar o nosso web site e baixar:

http://www.xharbour.com.br/downloads.html

Marcelo Lombardo

Abs,

João Santos - São Paulo.

joao@pleno.com.br

Fone: (11) 3106-2832

http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196

FWH 2.7 - xHARBOUR WorkShop.Exe

Link to comment
Share on other sites

Olá Vagner,

No harbour tem o adordd.

Exemplo de uso:

#include "adordd.ch"

REQUEST ADORDD

function Main()

USE test00 VIA "ADORDD" TABLE "ACCOUNTS" MYSQL ;

FROM "www.freesql.org" USER "myuser" PASSWORD "mypass"

Browse()

USE

return nil

Abraços,

Rossine

Harbour, Harbour, Harbour -> 3 vezes Harbour

Link to comment
Share on other sites

citação:

Vagner, você já testou o SQLRDD??

se não me engano, ele faz isso e muito mais q vc. quer.

Existe uma versão DEMO do SQLRDD Extreme ?

Sim! Basta acessar o nosso web site e baixar:

http://www.xharbour.com.br/downloads.html

Marcelo Lombardo

Abs,

João Santos - São Paulo.

joao@pleno.com.br

Fone: (11) 3106-2832

http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196

FWH 2.7 - xHARBOUR WorkShop.Exe


id=quote>id=quote>

Oi,

Vc já tentou rodar os demos ?

Eu não consegui nenhum, compilou, mas aparece uma tela qndo vc escolhe o banco, ela fecha icon_smile_big.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

Nao, nunca cheguei a testar, melhor falar com o Marcelo:

Marcelo Lombardo

Telefone: 11 3775-7888

Celular.: 11 9319 9310

Twitter.: MLombardo_Now

www.xharbour.com.br

João Santos - São Paulo.

joao@pleno.com.br

Fone: (11) 3106-2832

http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196

FWH 2.7 - xHARBOUR WorkShop.Exe

Editado por - kapiaba on 27/03/2012 14:28:18

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...