AprendizFW Posted July 16, 2012 Report Share Posted July 16, 2012 Olá Pessoal, Utilizo a SQLLIB FREE para trabalhar com mysql e uma dificuldade que tenho nas rotinas de browse é posicionar no registro que acabei de inserir (pois ele sempre posiciona no primeiro registro). Uma solução que vi em alguns exemplos e que estou utilizando é usar o comando LOCATE para fazer esse posicionamento, entretanto com o aumento da quantidade de registros isso vai atrapalhando pois fica muito lento. Gostaria de saber se alguém utiliza outra solução para resolver esse problema. Um grande abraço a todos, Edilson. Editado por - AprendizFW on 16/07/2012 10:45:56 Quote Link to comment Share on other sites More sharing options...
AprendizFW Posted July 16, 2012 Author Report Share Posted July 16, 2012 Olá Pessoal, Utilizo a SQLLIB FREE para trabalhar com mysql e uma dificuldade que tenho nas rotinas de browse é posicionar no registro que acabei de inserir (pois ele sempre posiciona no primeiro registro). Uma solução que vi em alguns exemplos e que estou utilizando é usar o comando LOCATE para fazer esse posicionamento, entretanto com o aumento da quantidade de registros isso vai atrapalhando pois fica muito lento. Gostaria de saber se alguém utiliza outra solução para resolver esse problema. Um grande abraço a todos, Edilson. Editado por - AprendizFW on 16/07/2012 10:45:56 Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted July 16, 2012 Report Share Posted July 16, 2012 Olá, você está usando "DBF" ou "Array" ? Se for DBF, você sabe qual o RECNO do registro? Se souber, faça um: obj_browse:Gotop() ALIAS->(DBGOTO( nRec )) obj_browse:Refresh() Se não souber e for sempre o último, faça um DBGOBOTTOM se o registro for ficar no meio, faça um DBSEEK mesmo, aà não tem jeito se for array, eu faço ASCAN na tabela, e posiciono o browse nesta posição... 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 Quote Link to comment Share on other sites More sharing options...
AprendizFW Posted July 16, 2012 Author Report Share Posted July 16, 2012 Olá Erciley Junior, Eu uso o browse como se estivesse usando um "DBF" e utilizo uma ordenação por nome, exemplo ( select * clientes order by nome ), quando insiro um registro não estou conseguindo a posição em que ele fica nessa ordenação, por isso estou utilizando o comando LOCATE para fazer esse posicionamento, pois o comando DBSEEK precisa de um Ãndice e acho que o Ãndice criado para mysql não funciona com esse comando, pelo menos eu acho, vou até testar... Um abraço, Edilson. Quote Link to comment Share on other sites More sharing options...
Eduardo Bilato Posted July 16, 2012 Report Share Posted July 16, 2012 Boa tarde Edilson Eu nunca usei o LOCATE, então não sei como esse comando funciona no que se refere aos Ãndices do arquivo. O DBSEEK utiliza os Ãndices, então acredito que seria mais vantajoso usar o DBSEEK ( levando em conta que vc utiliza o browse como se fosse um DBF ) att Eduardo de Camargo Bilato FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY email: eduardobilato@gmail.com msn: dunhox@hotmail.com Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted July 16, 2012 Report Share Posted July 16, 2012 Isso Edilson, como o Eduardo disse.... a SQLLIB faz isso, busca seus dados no banco através de comandos DBF, então o DBSEEK funciona sim (funciona em cima do Ãndice que você tem, que não é necessariamente a ordem usada). A não ser que esteja usando USE SQL, mas pelo que você disse, não está. 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 Quote Link to comment Share on other sites More sharing options...
AprendizFW Posted July 16, 2012 Author Report Share Posted July 16, 2012 Vixi Erciley, Pior que uso o "USE SQL" então não vou poder usar o DBSEEK, acho que vou me contentar com o LOCATE mesmo (rsrsrs), ou então vou mudar a lógica dos meus cadastros, ao invés de mostrar um browse e colocar botões para inserir, alterar e excluir, vou logo abrir a tela para cadastro e se o registro já existir perguntar se o usuário quer alterar ou excluir. Paralelo a isso vou montar um filtro que seria o browse (nesse caso não precisaria me preocupar com o posicionamento do registro que acabou de ser inserido). De qualquer forma agradeço sua ajuda e a do Eduardo, um abraço a todos. Edilson. Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted July 16, 2012 Report Share Posted July 16, 2012 Edilson mostra como voce esta fazendo e quando voce inclui voce quer que o cursor vá para o registro inserido no browse é isso? Sds, Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP Quote Link to comment Share on other sites More sharing options...
AprendizFW Posted July 17, 2012 Author Report Share Posted July 17, 2012 Olá Geraldo, É exatamente isso, porque quando eu insiro um novo registro eu tenho que executar novamente o "select" para ele reconhecer no browse esse novo registro, entretanto como ele está ordenado pelo "nome" não sei a posição que ele ficou nessa ordenação, por isso estou usando o LOCATE para ele posicionar no registro inserido e dar o "refresh", em bases pequenas fica blz, mas em bases grandes fica muito lento. Um abraço, Edilson. Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted July 17, 2012 Report Share Posted July 17, 2012 Olá Edilson, então, devido isso de lentidão, eu faria de duas formas: 1 - Utilize a LIB realmente para tratar esses dados como DBF, podendo fazer DBSEEK e qualquer outra coisa. (não gosto desta idéia) 2 - Faça um select e armazene os dados em VETOR, trabalhando com xBrowse ou TCBrowse, assim você pode fazer ASCAN na pesquisa, que não é nada demorado. Usando a opção 1 (nãããão) você não precisa refazer select nenhum, pois o dado inserido vai aparecer automaticamente no grid, como os DBF. Usando a opção 2, você pode refazer o select, ou para não ficar lento, ao incluir um registro, você pode fazer um AADD na tabela que armazenou as informações, fazer um ASORT para ordenar pelo nome, e após isso, fazer o ASCAN para localizar o registro. 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 Quote Link to comment Share on other sites More sharing options...
AprendizFW Posted July 17, 2012 Author Report Share Posted July 17, 2012 Olá Erciley, Vou fazer um teste agora utilizando array e posto aqui o resultado. Obrigado, Edilson. Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted July 17, 2012 Report Share Posted July 17, 2012 Ultimamente, só trabalho assim. Performance de muitos programas aumentou com isso. Lembre-se sempre quando fazer selects, joins, etc, de estar usando o Ãndice correto da tabela, isso faz uma diferença IMENSAAAAAAAA de velocidade. 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 Quote Link to comment Share on other sites More sharing options...
AprendizFW Posted July 20, 2012 Author Report Share Posted July 20, 2012 Olá Erciley, Como prometido, estou postando aqui o resultado do teste que fiz com array. Sem dúvida nenhuma o ganho de velocidade é muito grande, pois eu estava usando o (USE SQL) para pegar os dados de uma tabela remota de 35.000 registros (MUITO LENTO), então passei a usar o (SQLARRAY), ficou show de bola. Só estou apanhando um pouco com o listbox (POSICIONAMENTO), pois ainda não tinha usado ele com array, mas isso é o de menos. Muito obrigado à todos, Edilson. 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.