Page 1 of 1

Ordenacion Mayúsculas/Minúsculas

Posted: Wed Aug 15, 2018 11:44 am
by JoseLuis
Buenas

Hago un índice así:

Code: Select all

index on &(AnsiUpper("PROVE->Calle")) tag &("Calle")
o así

Code: Select all

index on &(Upper("PROVE->Calle")) tag &("Calle")
o así

Code: Select all

index on PROVE->Calle tag &("Calle")
y siempre me ordena la calle poniéndome primero las mayúsculas y luego las minúsculas.

Hay alguna forma de indexar que de igual que sea mayúscula o minúscula, es decir, que las vaya intercalando?

Saludos

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Wed Aug 29, 2018 6:31 pm
by JoseLuis
Sigo sin resolverlo

Y ésto, creo que me afecta a que cuando hago una búsqueda, si la hago con Upper(string), solo me presenta las grabadas en mayúsculas, y si no, sólo las minúsculas.

Tiene esto algo que ver con lo expresado anteriormente?.

He puesto al principio del programa:

REQUEST HB_Lang_ES
REQUEST HB_CODEPAGE_ESWIN
HB_LangSelect("ES")
HB_SetCodePage("ESWIN")

y nada, sigue igual

Un saludo

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Wed Aug 29, 2018 7:34 pm
by karinha
Muestra como usted hace la búsqueda via fuente porfa.

Saludos.

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Wed Aug 29, 2018 9:38 pm
by JoseLuis
El campo es Calle, y me pone primero las mayusculas

esta es la imagen del wbrowse

Imagewbrowse by Jose Luis Garcia


en el browse:

Code: Select all

 oLbx:bKeyChar := { | nKey, nFlags | ;
              iif (nKey == 43 .or. nKey == 65 .or. nKey == 97,;
                          (entreg(cTitulo,"A",aAlias,aoDbf), oLbx:Refresh()), ),;
              iif (nKey == 76 .or. nKey == 108,;
                          (Busca(aAlias[21],oLbx,oTab,tQbusco), oLbx:Refresh()), ),;
          iif (nKey == 66 .or. nKey == 98,;
                          (Borra1(aAlias),oLbx:UpStable(), oLbx:Refresh()), ),;
              iif (nKey == 77 .or. nKey == 109,  ;
                          (entreg(cTitulo,"M",aAlias,aoDbf),oLbx:Refresh() ), ) }
Funcion busca:

Code: Select all

//----------------------------------------------------------------------------//

function Busca(cAlias,oLbx,oTab,tQbusco,BusRaiz)
************************************************
local oDlg,aAlias
local oBusco,oboton
local oCbx,osay
local cBusco, cIndi
local nClave
local aIndi:={}
local nReg:=(cAlias)->(Recno())
DEFAULT BusRaiz:=""
aeval( tQbusco[3] , { |LX| aadd(aIndi,strtran(LX,"&")) } )
  DEFINE DIALOG oDlg RESOURCE "LOCALIZA2" BRUSH Publicas:oBrush1 TRANSPARENT Font Publicas:oWPpal:ofont
  REDEFINE SAY osay ID 10 OF oDlg COLOR CLR_GREEN
  REDEFINE GET oBusco VAR cBusco  ID 100 OF oDlg ;
       ON CHANGE ( nClave:=( cAlias )->(recno()),;
              ::Assign(),;
              iif( (cAlias)->(dbseek(Upper( Substr(cBusco, 1,::nPos -1)))), .T. ,;
                   ( (cAlias)->( dbGoto ( Recno() )), .f.) ),oLbx:Refresh(),;
                  iif (Chr(nKey)=13,oDlg:End(),.T.))
  REDEFINE COMBOBOX oCbx VAR aIndi[oTab:nOption] ITEMS aIndi ID 101 OF oDlg ;
           ON CHANGE (oTab:nOption:=oCbx:nAt,oTab:refresh(),;
        cBusco:=tQbusco[2,oCbx:nAt], ;
        (cAlias)->(OrdSetFocus(tQbusco[1,oCbx:nAt])),oLbx:Refresh(),;
        oBusco:Refresh(), oBusco:setFocus(), oDlg:Update() )
  REDEFINE BUTTON oboton ID 102 OF oDlg PROMPT "Aceptar" ;
                ACTION oDlg:End() CANCEL

  ACTIVATE DIALOG oDlg CENTERED ON INIT Tget():lClrFocus:=.T.
  if Busraiz='C' .or. Busraiz='S'
  cbusco:=alltrim(cbusco)
  obusco:blostfocus := {||oDlg:End()}
  else
  cBusco:=tQbusco[2,oTab:nOption]
  cIndi :=aIndi[oTab:nOption]       
  endif
return cbusco
//------------------------------------------------
 
Un saludo

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Thu Aug 30, 2018 1:13 pm
by karinha
SET EXACT está ON?

Cambia el ON CHANGE para una FUNCTION, creo sea mejor para el controle.

Mira también el comando ASCAN()

y

Code: Select all

    ISLOWER()
    ISUPPER()
 
http://harbour.edu.pl/clipper/en/C53G01C/ng34b.html

Saludos.

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Thu Aug 30, 2018 1:39 pm
by karinha

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Thu Aug 30, 2018 5:47 pm
by JoseLuis
Muchas gracias Joao.

Lo miro y te comento

Un saludo

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Thu Aug 30, 2018 10:07 pm
by cnavarro
Por favor, indica qué versión de Fivewin y (x)Harbour utilizas ( por ejemplo en tu firma ), así será más fácil comentar tus posts.

Es posible que no tenga nada que ver, pero por si acaso, te comento lo siguiente:

- Pantalla: al seleccionar en Harbour el codepage ESWIN, estás indicando a Harbour qué caracteres ha de utilizar y haga todas las "traducciones", y seguro que en eso no tienes problema.
- Base de datos: es posible que debas seleccionar la página de códigos correcta en la que se almacenan los datos y en la que quieres utilizar los datos, para permitir que Harbour haga su trabajo correctamente. Echa un vistazo al tutorial de Alexander (http://www.kresin.ru/en/hrbfaq.html#_Doc5) y mira cómo puede seleccionar un CODEPAGE en el comando USE o en la función dbUseArea ().
- Ten también en cuenta que hay varios codepages disponibles para español, por lo que puedes probarlos a ver los resultados que obtienes, así nos informas a todos de tu experiencia ( no olvides volver a generar tus indices cada vez que cambies el codepage, claro ):
  • ES850 Español (Moderno) CP-850
    ES850C Español CP-850 ( ntx spa.obj compatible)
    ES850M Español CP-850 ( mdx spa.obj compatible)
    ESISO Español (Moderno) ISO-8859-1
    ESMWIN Español (Moderno) ISO-8859-1
    ESWIN Español (Moderno) Windows-1252
Además, puedes investigar cómo se setea globalmente los codepages que queremos utilicen nuestras bases de datos, para no tener que modificar tu código al tener que implementar el codepage en el comando USE y/o en la function DbUseArea:
(Esta es una forma de hacerlo)
Set( _SET_DBCODEPAGE, <codepage del que se ha realizado previamente un REQUEST> )

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Fri Aug 31, 2018 2:36 am
by gsabattino
no veo la necesidad de usar macros en la creación de los indices:

index on Upper( PROVE->Calle ) tag Calle


Saludos,

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Fri Aug 31, 2018 12:47 pm
by JoseLuis
Buenas

Joao, he visto que en tu browse ocurre lo mismo:


Imagejoao by Jose Luis Garcia, en Flickr

No obstante, tienes una rutina de busqueda, que me va a servir de mucho, muchas gracias.

Con respecto a la version de fwh que utilizo, en concreto ésta aplicación está generada con la de abril del 2011 y con Verce.

Dispongo de otras FTDN posteriores, pero he intentado, por ejemplo con alguna del 2015, ya que en esta fecha veo que hubo modificacion importante de xbrowse y no soy capaz de compilar, me da muchos errores, y es que utilizo muchas librerias externas y de ahí vienen los errores, y dispongo de poco tiempo para ponerme con este tema.

Muchas gracias por las respuestas

Re: Ordenacion Mayúsculas/Minúsculas

Posted: Fri Aug 31, 2018 2:20 pm
by karinha
Una idea,

Code: Select all

FUNCTION MAISCULA()

   PARAMETERS VDBF

   IF VDBF = NIL

      ? "Informe o nome do DBF"

      QUIT

   ELSE

      IF !( "." $ VDBF )
         VDBF := VDBF + ".DBF"
      ENDIF

      IF !FILE( VDBF )
         ? "Arquivo " + VDBF
         QUIT
      ENDIF

   ENDIF

   SELE 1
   USE ( VDBF )

   IF !FILE( "DBF.OLD" )
      COPY TO "DBF.OLD"
   ENDIF

   VQCAM := FCOUNT()

   CAR_OLD := { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " ", "‚", "¡", "¢", "£", "Æ", "ä", "ƒ", "ˆ", "Œ", "“", "–", "…", "Š", "", "•", "—", "„", "‰", "‹", "”", "", "‡", "¤", "µ", "", "Ö", "à", "é", "Ç", "å", "¶", "Ò", "×", "â", "ê", "·", "Ô", "Þ", "ã", "ë", "Ž", "Ó", "Ø", "™", "š", "€", "¥" }

   CAR_NEW := { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A", "E", "I", "O", "U", "A", "O", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "€", "¥", "A", "E", "I", "O", "U", "A", "O", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "€", "¥" }

   DO WHILE ( 1->( !EOF() ) )

      FOR I = 1 TO VQCAM

         VGET := FIELDGET( I )

         IF VALTYPE( VGET ) = "C"

            VQTAM := LEN( ALLTRIM( VGET ) )
            VPOE := .F.
            VTXT := ""

            FOR U = 1 TO VQTAM

               VSUB := SUBSTR( VGET, U, 1 )
               VP := ASCAN( CAR_OLD, VSUB )

               IF VP > 0
                  VCAR := CAR_NEW[VP]
                  VPOE := .T.
               ELSE
                  VCAR := VSUB
               ENDIF
               VTXT := VTXT + VCAR
            NEXT

            IF VPOE = .T.
               FIELDPUT( I, VTXT )
            ENDIF

         ENDIF

      NEXT

      SKIP

   ENDDO
   /*
   WIN_CAR_LOW:='áéíóúãõâêîôûàèìòùäëïöüçñ'
   WIN_CAR_HIG:='ÁÉÍÓÚÃÕÂÊÎÔÛÀÈÌÒÙÄËÏÖÜÇÑ'

   DOS_CAR_LOW:=' ‚¡¢£Æ䃈Œ“–…Š•—„‰‹”‡¤'
   DOS_CAR_HIG:='µÖàéÇå¶Ò×âê·ÔÞãëŽÓØ™š€¥'
   */

RETURN NIL
 
Saludos.