2 Ordens em um Mesmo Indice

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

2 Ordens em um Mesmo Indice

Mensagem por guanabara »

La vai eu de novo com minhas dúvidas, tenho o código abaixo que faz uma pesquisa no banco de dados e retorna os valores em uma grid, funciona perfeitamente, só que quando faço uma busca por Estado (UF), gostaria que as cidades desta UF ficassem em ordem alfabética, alguém pode me ajudar...

Código: Selecionar todos

FUNCTION Busqueda

Public RetVal := .F. , nRecCountB := 0, cIndex := "", nVal := 0
Public cProcura:=GetProperty("WIN_1","text_1","Value")     // DECLARA A VARIAVEL E GRAVA O VALOR NA VARIAVEL  //

nVal:=GetProperty("Win_1","ComboMudaPesq","Value")

	If Empty ( Win_1.Text_1.Value ) 
		Return
	EndIf

   Win_1.Grid_1.DeleteAllItems
   Win_1.StatusBar.Item(1) := ' Aguarde...... Localizando Registros... Podendo Demorar... '
   WAIT WINDOW "Aguarde..... Localizando Registros... Podendo Demorar..."  NOWAIT
 

   Do Case
    
      Case nVal = 1
      
       cIndex := "DBF->MUN"
       dbf->( OrdSetFocus(1) )       
           
      
      Case nVal = 2

       cIndex := "DBF->UF"
        OrdSetFocus(2)   
         
   Endcase
    
    
 DBSEEK(AllTrim(cProcura))  
 
If FOUND()     
   
 Do While &cIndex = cProcura
 
	 	nRecCountB++
       
      If NrecCountB < 1000
         Win_1.Grid_1.AddItem ( { DBF->NB , DBF->NOME, DBF->MUN, DBF->UF, DBF->CPF, DBF->DDD, DBF->TEL, DBF->DTIND, DBF->NASC } )         
			Endif
      
    Skip
    
    	
  EndDo
 
       WAIT CLEAR
         
			Win_1.StatusBar.Item(1) := AllTrim(Str(nRecCountB)) + ' - Registros Localizados com Sucesso !!! Para Gravar em Arquivo, Clique no Botão Exportar.'
      MsgInfo( AllTrim(Str(nRecCountB)) + ' - Registros   Localizados   com   Sucesso !!!   ' + Chr(13) +        ' Para Gravar em Arquivo, Clique no Botão Exportar.', [Registros Localizados])
     Win_1.BotaoExportar.Enabled:=.T. 
      
Else
      
    		Win_1.StatusBar.Item(1) := ' Registros não Localizados'
         WAIT CLEAR
         MsgStop( ' R e g i s t r o s   n ã o    L o c a l i z a d o s !!! ' + Chr(13) + ; 
                  ' Faça uma nova pesquisa para localizar o que deseja.', [Registros não Localizados])
                  
         Win_1.BotaoExportar.Enabled     :=.F.
         Win_1.BotaoPasta.Enabled        :=.F.                              // DESABILITA O BOTAO DA PASTA    //
         
                  
EndIf

Return
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

2 Ordens em um Mesmo Indice

Mensagem por Jairo Maia »

Olá,

Não tenho certeza se é a melhor forma, mas veja se o exemplo abaixo ajuda:

Código: Selecionar todos

aTmpDados := {}

Do While &cIndex = cProcura
 
  NrecCountB++

  If NrecCountB <= 1000

    AaDd( aTmpDados, { DBF->NB , DBF->NOME, DBF->MUN, DBF->UF, DBF->CPF, DBF->DDD, DBF->TEL, DBF->DTIND, DBF->NASC } )

  Endif
      
  Skip
       
EndDo

ASort( aTmpDados, Nil, Nil, { |x,y| x[3] < y[3] } )

For i = 1 To Len( aTmpDados )

  Win_1.Grid_1.AddItem ( aTmpDados[ i ] )

Next
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

2 Ordens em um Mesmo Indice

Mensagem por guanabara »

Jairo, nem acredito, funcionou perfeitamente, antes de inserir suas mudanças eu li o código várias vezes e não entendi muita coisa e continuo não entendendo.. hehehe... Imaginava que eu havia explicado errado, sabe porque, eu pensava que para isso funcionar tinha que fazer alguma mudança aqui na criação do *.CDX

Código: Selecionar todos

     dbf->(OrdCreate("SGF.cdx" , "UF"        , "dbf->uf"   ,{|| dbf->uf  } )) 
tipo colocando o Mun depois do uf dbf->(OrdCreate("SGF.cdx" , "UF" , "dbf->uf" ,{|| dbf->uf, mun } ))

ou assim: dbf->( OrdSetFocus(1, 2) )

pois o código que uso para visualizar uso o mesmo para exportar, como ainda não entendo de Vetor estou tendo dificuldades na exportação....
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

2 Ordens em um Mesmo Indice

Mensagem por carlos_dornelas »

Guanabara,

Eu simplesmente criaria o indice +- assim INDEX ON UF+MUN TO IND.NTX...

Antonio Carlos
guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

2 Ordens em um Mesmo Indice

Mensagem por guanabara »

carlos_dornelas escreveu:Guanabara,

Eu simplesmente criaria o indice +- assim INDEX ON UF+MUN TO IND.NTX...

Antonio Carlos
Funfou, deu certo, obrigado mesmo Carlos, valeu Jairo pela disposição, ficou assim o código:

Código: Selecionar todos

 INDEX ON UF  + MUN  TAG 2 TO SGF
:))
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

2 Ordens em um Mesmo Indice

Mensagem por Jairo Maia »

carlos_dornelas escreveu:Eu simplesmente criaria o indice +- assim INDEX ON UF+MUN TO IND.NTX...
Tão simples e eu compliquei tanto... hehe.

Guanabara, isto resolve também sua dúvida para exportar os dados? Mais acima você disse estar com dificuldade, isto foi apenas em relação a minha sugestão? Agora resolveu?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

2 Ordens em um Mesmo Indice

Mensagem por guanabara »

Resolveu sim, não precisei mudar nada no código da exportação, permaneceu o mesmo.... Fica valendo sua dica para quem precisar ordenar por coluna especifica da grid sem alterar o índice... Jairo, agradeço mesmo assim...
Responder