vailtom Posted August 20, 2010 Report Share Posted August 20, 2010 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. Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 20, 2010 Author Report Share Posted August 20, 2010 Uma choradinha faz bem mesmo hein!!! 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é Retorne avisando se a dica funcionouid=red> Luiz Arruda Corumbá - MS ico.corumba@gmai.com Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted August 20, 2010 Report Share Posted August 20, 2010 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 Quote Link to comment Share on other sites More sharing options...
vailtom Posted August 20, 2010 Report Share Posted August 20, 2010 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. Quote Link to comment Share on other sites More sharing options...
Luisão Posted August 23, 2010 Report Share Posted August 23, 2010 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 Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 30, 2010 Author Report Share Posted August 30, 2010 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> Retorne avisando se a dica funcionouid=red> Luiz Arruda Corumbá - MS ico.corumba@gmai.com Quote Link to comment Share on other sites More sharing options...
ZECA Posted August 30, 2010 Report Share Posted August 30, 2010 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. 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 Quote Link to comment Share on other sites More sharing options...
vailtom Posted August 30, 2010 Report Share Posted August 30, 2010 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. Quote Link to comment Share on other sites More sharing options...
ZECA Posted August 31, 2010 Report Share Posted August 31, 2010 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. 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 Quote Link to comment Share on other sites More sharing options...
Geo_sts Posted September 1, 2010 Report Share Posted September 1, 2010 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!" Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted September 1, 2010 Author Report Share Posted September 1, 2010 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> Luiz Arruda Corumbá - MS ico.corumba@gmai.com Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted September 1, 2010 Author Report Share Posted September 1, 2010 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> Luiz Arruda Corumbá - MS ico.corumba@gmai.com Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted September 1, 2010 Author Report Share Posted September 1, 2010 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> Luiz Arruda Corumbá - MS ico.corumba@gmai.com Quote Link to comment Share on other sites More sharing options...
Luisão Posted September 1, 2010 Report Share Posted September 1, 2010 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. 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 Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted September 1, 2010 Author Report Share Posted September 1, 2010 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. 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> Luiz Arruda Corumbá - MS ico.corumba@gmai.com 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.