Jump to content
Fivewin Brasil

Index com MySql


Luiz Arruda (ICO)

Recommended Posts

ICO, boa tarde.


Procedure Busca(oBrw,cPegaNome)

/*

cQuery:='select * from CADCLI '

*/

cQuery:= "select * from CADCLI Where NOME_CLI LIKE '"+Alltrim(cPegaNome)+"%' Order By NOME_CLI"

use sql cQuery alias "cQuery" new via 'MYSQL'

CADCLI->( DbGoTop())

oBRW[1]:GoTop()

oBrw[1]:Refresh()

Return(.t.)

id=code>id=code>note que quando voce dá um USE SQL o resultado do comando SQL é disponbilizado como um ALIAS e se voce chamar este procedimento duas vezes é correto obter o erro de "alias already in use: cQuery" pois no exemplo ali em cima vc usou alias "cQuery" e eu não vi você fechar testar se ele já estava aberto ou não antes de dar o USE SQL. Outra coisa que notei foi o CADCLI->( DbGoTop()), foi em cima deste alias cadcli que vc montou o browse? Se foi o certo era seu USE SQL também utilizar o alias CADCLI, mas antes de puxar os dados novamente, testar se este alias já não está aberto e fechá-lo, veja um exemplo:

Procedure Busca(oBrw,cPegaNome)

IF SELECT( "cadcli" ) <> 00; CLOSE CADCLI; ENDIF

cQuery:= "select * from CADCLI Where NOME_CLI LIKE '"+Alltrim(cPegaNome)+"%' Order By NOME_CLI"

use sql cQuery alias cadcli new via 'MYSQL'

oBRW[1]:GoTop()

oBrw[1]:Refresh()

Return(.t.)

id=code>id=code>

Espero ter ajudado.

assinatura.jpg

Link to comment
Share on other sites

Uma choradinha faz bem mesmo hein!!! icon_smile_big.gif

Luisão vc. tem tido muita paciencia e sempre dá uma força... Obrigado.

Vailton..

Seu exemplo funcionou para a pesquisa.. só que os outros nomes somem de vez do browse.. abre com todos os nomes mas após a pesquisa tem que ficar pesquisando "a","b","c" como faço para o cursor cair nos nomes selecionado mas "sumir" com os outros do browse igual na pesquisa incremental com DBF ??

mesmo assim já deu uma idéia de como começar..

Obrigadaço tb.

PS: Meu fim de semana vai ser loooongooo.. a *véinha vai enjoar de tanto fazer café icon_smile_big.gif

Retorne avisando se a dica funcionouid=red>

curruptos.png

Luiz Arruda

Corumbá - MS

ico.corumba@gmai.com

Link to comment
Share on other sites

Cara não desiste não SQL dá um pouco de dor de cabeça, mas é o bicho mesmo, muito bom.

Me arrependo de ter Usado Mysql com Indices.

Sempre que Tenho que mexer Mudo o máximo Possivel para SQL puro.

Com Indices é melhor que DBF, mas com SQL é nota 1000

informaisvrb@gmail.com

FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 / fwh808+sqllib(atual)

Msn.: mastermarvrb@msn.com

Link to comment
Share on other sites

citação:...como faço para o cursor cair nos nomes selecionado mas "sumir" com os outros do browse igual na pesquisa incremental com DBF ??
id=quote>id=quote>

Uma vez com os dados todos em memoria, vc pode utilizar a proprio comando LOCATE para posicionar-se sobre o resultado em determinado registro.

assinatura.jpg

Link to comment
Share on other sites

Luiz, esqueci do final de semana, mas o que eu ia postar era parecido com o que o Vailton postou.

Isso acontece de "sumir" os outros registros pois na verdade você não está mais pesquisando, está filtrando. É parecido com o recurso auto-completar dos navegadores, por exemplo. Você digita um trecho e ele traz sugestões de termos que começam com o conteudo digitado.

Se você não quiser este efeito de "sumir" os registros, no lugar de usar o LIKE, você poderia usar o >= (retire o %), assim, se digitar 'Luiz', ele vai mostrar todos os nomes maiores ou igual a Luiz.

Teste e veja se ajuda.

ps.: Uma choradinha (quase) sempre funciona. hehehehehehe

Luis Fernando Jr. (Luisão)

Leme/SP

--

FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY + [Ghost/Java]Script

E-Mail: juninho.luisao@gmail.com

MSN: juninho_luisao@hotmail.com

Skype: luis.fernando.jr

Link to comment
Share on other sites

Só pra lembrar..

Não abandonei o tópico..

Final de mês é uma correria maluca aqui no escritorio, é tanto cliente pedindo tudo pra ontem que agente não tempo pra mexer com código..

Semana que vem eu volto a perturbar com este assunto..

Abraços a todos...

me aguardem eu voltareiid=size1>icon_smile_angry.gif

Retorne avisando se a dica funcionouid=red>

curruptos.png

Luiz Arruda

Corumbá - MS

ico.corumba@gmai.com

Link to comment
Share on other sites

citação:

ICO, boa tarde.


Procedure Busca(oBrw,cPegaNome)

/*

cQuery:='select * from CADCLI '

*/

cQuery:= "select * from CADCLI Where NOME_CLI LIKE '"+Alltrim(cPegaNome)+"%' Order By NOME_CLI"

use sql cQuery alias "cQuery" new via 'MYSQL'

CADCLI->( DbGoTop())

oBRW[1]:GoTop()

oBrw[1]:Refresh()

Return(.t.)

id=code>id=code>note que quando voce dá um USE SQL o resultado do comando SQL é disponbilizado como um ALIAS e se voce chamar este procedimento duas vezes é correto obter o erro de "alias already in use: cQuery" pois no exemplo ali em cima vc usou alias "cQuery" e eu não vi você fechar testar se ele já estava aberto ou não antes de dar o USE SQL. Outra coisa que notei foi o CADCLI->( DbGoTop()), foi em cima deste alias cadcli que vc montou o browse? Se foi o certo era seu USE SQL também utilizar o alias CADCLI, mas antes de puxar os dados novamente, testar se este alias já não está aberto e fechá-lo, veja um exemplo:

Procedure Busca(oBrw,cPegaNome)

IF SELECT( "cadcli" ) <> 00; CLOSE CADCLI; ENDIF

cQuery:= "select * from CADCLI Where NOME_CLI LIKE '"+Alltrim(cPegaNome)+"%' Order By NOME_CLI"

use sql cQuery alias cadcli new via 'MYSQL'

oBRW[1]:GoTop()

oBrw[1]:Refresh()

Return(.t.)

id=code>id=code>

Espero ter ajudado.

assinatura.jpg


id=quote>id=quote>

Boa Noite Vailton!!!!

Sobre o exemplo acima postado. gostaria de perguntar algo que pra vc pode ser simples e até automatico, mas prá mim confunde a cabecinha do negão aqui!!

Como voce sabe onde vai o apostrofe ("") e a crase (') ?

Por incrivel que pareça este é o maior impecilho para "levantar e sair andando" no MYSQL. Para vc ter uma idéia consegui traçar um paralelo entre o MYSQL e o DBASE(guardada as devidas proporções). No velho e bom Dbase vc digite PLUS, aparece um ponto e vc digita: USE ARCLI(ENTER) LIST FOR NOME, ENDEREÇO, MUNCIPIO FOR DATA <= CTOD("31/12/2009") e por ai afora. No MYSQL os comandos são digitados entre apostrofes e aspas e em seguinda vc manda

executar este comando. Aí é que azeda o pé do frango. Não sei onde colocar os apostrofes e aspas da vida. No comando acima parece que é aparentemente simples, mas a gente alguns comandos com "milhares" de apostrofes e aspas. Não tem como resumir estes comandos para ficar intelegivel ?

Sds

José Carlos - ZECA

fwh612(Free)-clipper52e-blinker 7.0 - six 3.02 - Windows XP

Link to comment
Share on other sites

Olha, eu nao sei se entendi a sua duvida... mas vou tentar comentar sobre oq eu entendi: como delimitar o seu comando SQL.

Imagine que voce precisa enviar um comando simples para o banco de dados tal como este:

id=code>
id=code>Você pode colocar este comando em uma variavel caracter do seguinte modo:
id=code>
id=code>Note que quando o compilador processar esta linha, ele irá notar que vc quer jogar para dentro da variavel cSQL o conteudo (em formato string) que consta logo depois do sinal de atribuição designado por ":="... O detalhe que causa muita confusão é que para identificar uma string podemos (desde o clipper) usar tanto os caracter de aspas duplas ou simples para abrir uma string literal. No entanto, se abrou com aspas duplas, deve tb indicar o final da string como mesmo caracter: usando aspas duplas, o que até aê aparentemente não gera tanta confusão, veja os exemplos:

cSQL := "select version as versao"

id=code>id=code>

Nos exemplos acima, o compilador olhando para esta linha, sabe ONDE começa e ONDE termina a string que voce deseja armazenar dentro da variavel cSQL. O caso exige um pouco mais atenção apenas quando voce precisa passar alguma string dentro do comando SQL, eis um exemplo:

id=code>
id=code>Neste exemplo, o compilador (tanto Clipper, Harbour ou xHarbour) sabe que a string que você deseja enviar para dentro da variavel cSQL começa com aspas duplas e ele saberá onde esta string finaliza, quando ele encontrar o mesmo caracter de aspas duplas, (quase) não se imporando com quais letras, numeros ou simbolos estão nesta linha até chegar no caracter que indica o fim da string. Ou seja, neste caso o texto 'JOAO' que faz parte do comando SQL nao será detectado pelo compilador, já que faz parte de um string que iniciou com aspas duplas e não simples.

Agora um problema em potencial pode ocorrer, se o programador iniciar uma string com um comando SQL com um determinado caracter (ex aspas duplas) para indicar o inicio de uma string e dentro desta mesma string ele inserir o mesmo caracter para enviar um texto que faz parte do comando SQL. Veja o exemplo anterior só que de modo completamente incorreto:

id=code>
id=code>Note que a string do comando SQL começa com aspas duplas, mas por desatenção eu tb usei as mesmas aspas para passar o argumento do comando SQL, no exemplo acima o trecho "JOAO".. este comando está errado e nao irá compilar de jeito nenhum.

Agora, quando eu devo usar aspas duplas ou simples? Existe regra para isto? A resposta é [n]não existe regra[/n]! Voce que deve prestar atenção. Se usar uma aspas duplas para abrir uma string literal, o compilador vai exigir que voce a feche usando o mesmo caracter. Então voce poderá dentro desta string, usar quaisquer caracteres que precisar para escrever o seu comando SQL para enviar o banco, desde que não seja o mesmo caracter utiliazdo para abrir a string.

Uma outra situação relacionada a isto e que realmente pode confundir mais ainda é quando vocÊ está escrevendo um comando SQL e ele precisa ser montado com base no valor de algumas partes que podem variar. Eis um exemplo:


cSQL := "SELECT * FROM cli WHERE nome='" + cNome + "'"

id=code>id=code>Note que no exemplo acima eu precisei concatenar o conteudo de uma variavel cNome ao comando SQL que eu estava montando e sendo assim, precisei informar parte da string que compunha o comando SQL e concatenar onde o valor da variavel nome deve aparecer e por fim, concatenar todo este texto com o restante do comando SQL. Isto em si não é muito diferente de fazer algo tal como:

cText := "Usuario '" + cUser + "' voce nao tem acesso a esta rotina!"

MsgStop( cText )

id=code>id=code>É por isto que muitas vezes você vê alguns comandos SQL com tantas aspas duplas e/ou simples que se tornam até complexos para poderem ser lidos.

Ah sim, como ultima dica posso mencionar que desde o Clipper é possível iniciar uma string utilizando o cacterer "[" e fechando-o com "]" tal como:

id=code>
id=code>Eu não sei se era sobre isto que vc estava me perguntando, mas espero ter ajudado de alguma forma.

assinatura.jpg

Link to comment
Share on other sites

citação:

Olha, eu nao sei se entendi a sua duvida... mas vou tentar comentar sobre oq eu entendi: como delimitar o seu comando SQL.

Imagine que voce precisa enviar um comando simples para o banco de dados tal como este:

id=code>
id=code>Você pode colocar este comando em uma variavel caracter do seguinte modo:
id=code>
id=code>Note que quando o compilador processar esta linha, ele irá notar que vc quer jogar para dentro da variavel cSQL o conteudo (em formato string) que consta logo depois do sinal de atribuição designado por ":="... O detalhe que causa muita confusão é que para identificar uma string podemos (desde o clipper) usar tanto os caracter de aspas duplas ou simples para abrir uma string literal. No entanto, se abrou com aspas duplas, deve tb indicar o final da string como mesmo caracter: usando aspas duplas, o que até aê aparentemente não gera tanta confusão, veja os exemplos:

cSQL := "select version as versao"

id=code>id=code>

Nos exemplos acima, o compilador olhando para esta linha, sabe ONDE começa e ONDE termina a string que voce deseja armazenar dentro da variavel cSQL. O caso exige um pouco mais atenção apenas quando voce precisa passar alguma string dentro do comando SQL, eis um exemplo:

id=code>
id=code>Neste exemplo, o compilador (tanto Clipper, Harbour ou xHarbour) sabe que a string que você deseja enviar para dentro da variavel cSQL começa com aspas duplas e ele saberá onde esta string finaliza, quando ele encontrar o mesmo caracter de aspas duplas, (quase) não se imporando com quais letras, numeros ou simbolos estão nesta linha até chegar no caracter que indica o fim da string. Ou seja, neste caso o texto 'JOAO' que faz parte do comando SQL nao será detectado pelo compilador, já que faz parte de um string que iniciou com aspas duplas e não simples.

Agora um problema em potencial pode ocorrer, se o programador iniciar uma string com um comando SQL com um determinado caracter (ex aspas duplas) para indicar o inicio de uma string e dentro desta mesma string ele inserir o mesmo caracter para enviar um texto que faz parte do comando SQL. Veja o exemplo anterior só que de modo completamente incorreto:

id=code>
id=code>Note que a string do comando SQL começa com aspas duplas, mas por desatenção eu tb usei as mesmas aspas para passar o argumento do comando SQL, no exemplo acima o trecho "JOAO".. este comando está errado e nao irá compilar de jeito nenhum.

Agora, quando eu devo usar aspas duplas ou simples? Existe regra para isto? A resposta é [n]não existe regra[/n]! Voce que deve prestar atenção. Se usar uma aspas duplas para abrir uma string literal, o compilador vai exigir que voce a feche usando o mesmo caracter. Então voce poderá dentro desta string, usar quaisquer caracteres que precisar para escrever o seu comando SQL para enviar o banco, desde que não seja o mesmo caracter utiliazdo para abrir a string.

Uma outra situação relacionada a isto e que realmente pode confundir mais ainda é quando vocÊ está escrevendo um comando SQL e ele precisa ser montado com base no valor de algumas partes que podem variar. Eis um exemplo:


cSQL := "SELECT * FROM cli WHERE nome='" + cNome + "'"

id=code>id=code>Note que no exemplo acima eu precisei concatenar o conteudo de uma variavel cNome ao comando SQL que eu estava montando e sendo assim, precisei informar parte da string que compunha o comando SQL e concatenar onde o valor da variavel nome deve aparecer e por fim, concatenar todo este texto com o restante do comando SQL. Isto em si não é muito diferente de fazer algo tal como:

cText := "Usuario '" + cUser + "' voce nao tem acesso a esta rotina!"

MsgStop( cText )

id=code>id=code>É por isto que muitas vezes você vê alguns comandos SQL com tantas aspas duplas e/ou simples que se tornam até complexos para poderem ser lidos.

Ah sim, como ultima dica posso mencionar que desde o Clipper é possível iniciar uma string utilizando o cacterer "[" e fechando-o com "]" tal como:

id=code>
id=code>Eu não sei se era sobre isto que vc estava me perguntando, mas espero ter ajudado de alguma forma.

assinatura.jpg


id=quote>id=quote>

Bom dia Vailton!!!

Voce ESCLAREOU; isto é ESCLARECEU e CLAREOU. Vou imprimir este tópico para não esquecer. Com o tempo estes procedimentos se tornam automatico e a gente nem percebe o que está fazendo um operação complexa.

grato

Sds

José Carlos - ZECA

fwh612(Free)-clipper52e-blinker 7.0 - six 3.02 - Windows XP

Link to comment
Share on other sites

Ico estou na mesma que vc..

pelo Mysql eu consigo assim

alter table 'produtos' add index nomeC(nome)"

SELECT * FROM 'produtos' WHERE nome LIKE '%PALAVRA%' ORDER BY nome LIMIT 0 , 30"

mas não consgui ondernar o mesmo no listbox

Não vou desistir.. tem q ter um Jeitoo

abrs

Geovanni Holior

Analista de Sistema

Clip53 * FHW 9.1/../9.4

skype:geovanni.holior

" Tudu Posso naquele que me Fortalece!"

Link to comment
Share on other sites

Bom Dia..

Assim a busca funciona


Procedure Busca(oBrw,cPegaNome)

IF SELECT( "cadcli" ) <> 00

CLOSE CADCLI

ENDIF

cQuery:= "select * from CADCLI Where NOME_CLI LIKE '"+Alltrim(cPegaNome)+"%' Order By NOME_CLI"

use sql cQuery alias cadcli new via 'MYSQL'

oBRW[1]:GoTop()

oBrw[1]:Refresh()

Return(.t.)

id=code>id=code>

Mas some os outros nomes.. vou tentar com a dica do Luisão..

ainda fiz isso por falta de tempo.. esta semana não to mexendo no programa.

Abraços..

Retorne avisando se a dica funcionouid=red>

curruptos.png

Luiz Arruda

Corumbá - MS

ico.corumba@gmai.com

Link to comment
Share on other sites

João, desta forma ai a busca funciona perfeitamente. o unico impecilho é que se pesquisar por "LUI" me retornará todos os nomes iniciados por LUI, mas todos os outros desaparecem do browse.. eu queria que ficassem todos a mostra e o cursor caisse no primeiro nome iniciado com "LUI"

o resto tá funfando

Abraços..

Retorne avisando se a dica funcionouid=red>

curruptos.png

Luiz Arruda

Corumbá - MS

ico.corumba@gmai.com

Link to comment
Share on other sites

Bem... voltando ao assunto..

Agora to fazendo assim


cQuery:= "select * from CADCLI Where NOME_CLI >= '"+Alltrim(cPegaNome)+"' Order By NOME_CLI"

id=code>id=code>

Se pesquiso por "Luiz" ele está sumindo com os nomes iniciados de "A" a "J" ou seja todos antes da letra "L"

o que tá errado ???

Obrigado..

Retorne avisando se a dica funcionouid=red>

curruptos.png

Luiz Arruda

Corumbá - MS

ico.corumba@gmai.com

Link to comment
Share on other sites

Luiz, é isso mesmo.

Desse modo, ele não sumirá com o que for maior que "LUI" mas o que for "menor" não aparecerá.

Para que não suma nada da lista, você não poderá usar o Where, terá que trazer todos os registros uma vez e depois fazer um controle externo via programa para posicionar em qual você deseja;

Ou 8 ou 80.icon_smile_big.gif

Luis Fernando Jr. (Luisão)

Leme/SP

--

FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY + [Ghost/Java]Script

E-Mail: juninho.luisao@gmail.com

MSN: juninho_luisao@hotmail.com

Skype: luis.fernando.jr

Link to comment
Share on other sites

citação:

Luiz, é isso mesmo.

Desse modo, ele não sumirá com o que for maior que "LUI" mas o que for "menor" não aparecerá.

Para que não suma nada da lista, você não poderá usar o Where, terá que trazer todos os registros uma vez e depois fazer um controle externo via programa para posicionar em qual você deseja;

Ou 8 ou 80.icon_smile_big.gif

Luis Fernando Jr. (Luisão)

Leme/SP

--

FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY + [Ghost/Java]Script

E-Mail: juninho.luisao@gmail.com

MSN: juninho_luisao@hotmail.com

Skype: luis.fernando.jr


id=quote>id=quote>

Tá.. mas como faço isso ???

Já tentei até de cabeça pra baixo e dá erro...

Retorne avisando se a dica funcionouid=red>

curruptos.png

Luiz Arruda

Corumbá - MS

ico.corumba@gmai.com

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