evertonlb Posted May 4, 2016 Report Share Posted May 4, 2016 Boa tarde amigo.. Continuando com minhas duvidas no SQL, gostaria de saber como faço para passar de um registro para outro. Explico melhor. Tenho nas minhas janelas de cadastro botões que levam o usuário ao primeiro registro da tabela, para o próximo, para o anterior e para o último registro. Como eu uso comandos DBF o Gotop, dbSkip(+1), DbSkip(-1), Gobottom resolvem meu problema. Usando o SqlArray(), da SqlLib, peguei os dados da tabela... sei que usando o "where codigocliente = '12345678'" eu seleciono só um registro, mas como faço pra navegar pelos registros da tabela?? Att. Everton Quote Link to comment Share on other sites More sharing options...
kleyber Posted May 4, 2016 Report Share Posted May 4, 2016 Everton, Você vai usar browse ou uma dialog para isto? Quote Link to comment Share on other sites More sharing options...
Valdir Posted May 4, 2016 Report Share Posted May 4, 2016 Olá Everton... Defina a sua query oQry = oServer:Query( "SELECT * FROM SeuBd Order by SuaOrder" ) Depois é só usar assim: oQry:GoTop() oQry:Skip( n ) oQry:GoBottom() abraços. evertonlb 1 Quote Link to comment Share on other sites More sharing options...
joaosolution Posted May 4, 2016 Report Share Posted May 4, 2016 Everton Boa tarde Na SQLLIB se você usar SQLArray vai ter um vetor com os dados da tabela. Neste caso irá navegar pelo vetor aVetor:=SqlArray("Select * from tabela") n:=1 aVetor[n] //dbgotop() n++ //DbSkip(1) n-- ////DbSkip(-1) aVetor[Len(avetor)] //dbgobotom() Você também pode abrir como dbf: USE SQL ("Select * From Tabela") Alias Tabbela New Neste caso serão os mesmos comandos dbase Att João Bosco Quote Link to comment Share on other sites More sharing options...
aferra Posted May 4, 2016 Report Share Posted May 4, 2016 João, pergunta de quem não sabe nada, porem...das duas soluções qual é a melhor / rápida? ou não tem diferença Quote Link to comment Share on other sites More sharing options...
evertonlb Posted May 5, 2016 Author Report Share Posted May 5, 2016 Everton, Você vai usar browse ou uma dialog para isto? Bom dia Kleyber. Eu assumo os valores nas variáveis a dou um refresh nos gets.. Numa Dialog! Att. Everton Quote Link to comment Share on other sites More sharing options...
evertonlb Posted May 5, 2016 Author Report Share Posted May 5, 2016 Everton Boa tarde Na SQLLIB se você usar SQLArray vai ter um vetor com os dados da tabela. Neste caso irá navegar pelo vetor aVetor:=SqlArray("Select * from tabela") n:=1 aVetor[n] //dbgotop() n++ //DbSkip(1) n-- ////DbSkip(-1) aVetor[Len(avetor)] //dbgobotom() Você também pode abrir como dbf: USE SQL ("Select * From Tabela") Alias Tabbela New Neste caso serão os mesmos comandos dbase Att João Bosco Bom dia João... Então o vetor vai conter todo o conteúdo da tabela, não importando quantos registros eu tenha??? Att. Everton Quote Link to comment Share on other sites More sharing options...
joaosolution Posted May 5, 2016 Report Share Posted May 5, 2016 Everton Sim o vetor vai conter o conteúdo da tabela, mas se a tabela for maior que a capacidade de memória para manipulação do vetor, vai dar erro no tamanho do vetor. Você terá que avaliar de acordo com a tabela que estiver implementando. Alessandro O uso de vetor (SqlArray) será mais rápido que o dbf (USE SQL) mas isso tem que ser avaliado em cada situação, o tamanho da tabela, a faciliade para manipular os dados. Atualmente não trabalho mais com essas opções onde o banco de dados fica todo carregado na memória, para o usuário ficar passeando pelos registro. Com o uso do SQL passei a sempre priorizar os filtros, a pessoa primeiro seleciona um critério (código, nome, data, etc ) depois eu faço o filtro e apresento para o usuário os dados. Mostrarmos tabelas de 100, 500, 1000 registros na tela é uma situação. Mostrar banco de dados com 3.000.0000 de registros é outra, após algum tempo você verá que o usuário não precisa ficar passando por tantos registro um por um, ele precisa sempre de alguma forma de delimitar as pesquisas. Ex.: Tabela de funcionários 3000 registros, eu listava no listbox todo o banco de dados e a pessoa com o Get vai digitando o nome e o sistema posicionando, isso em dbf, hoje, com mysql eu abro o listbox vazio e o usuário digita o nome e aciona o botão pesquisar.Eu executo o filtro com like e mostro todos os nomes que ele deseja MARIA%. Outro exemplo: Cadastro de atendimentos com 3.000.000, cadastro de exames com 5.000.000 primeiro a pessoa seleciona o paciente, então vou nos atendimentos e filtro somente os atendimentos de determinado paciente, a pessoa seleciona o atendimento, então vou na tabela de exames e filtro somente os exames do paciente e do atendimento selecionado. Att João Bosco aferra 1 Quote Link to comment Share on other sites More sharing options...
kleyber Posted May 5, 2016 Report Share Posted May 5, 2016 João, Pelo que o Everton falou, é uma dialog contendo dados de apenas 1 registro, não precisa carregar todos os registros em um array pra jogar na dialog. Quote Link to comment Share on other sites More sharing options...
evertonlb Posted May 5, 2016 Author Report Share Posted May 5, 2016 João, Pelo que o Everton falou, é uma dialog contendo dados de apenas 1 registro, não precisa carregar todos os registros em um array pra jogar na dialog. De fato Kleyber.. Com DBF eu uso assim if onde == 1 // aqui eu vejo qual botão foi pressionado Go Top elseif onde == 2 DBSkip(-1) if BOF() go bottom endif elseif onde == 3 DBSkip(1) if EOF() go Top endif elseif onde == 4 Go Bottom endif Carrego as variáveis e dou um refresh. Isso é o ideal. No cadastro de clientes, por exemplo, navegar pelos registros não é usado, mesmo porque eu tenho um F2 que abre um browse com todos os clientes, ai o usuário acha quem ele quiser. Mas no cadastro de produtos a história é outra.. muitas vezes a pessoa que cadastra os itens, altera preços e faz outras correções nos produtos, precisa ver os últimos itens que foram cadastrados.. ai opta pelo menu de navegação que tenho no cadastro... Aqui sim preciso disponibilizar esta navegação Att. Everton 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.