Page 1 of 1

Locate en TDataSet

Posted: Thu May 23, 2019 12:56 pm
by XeviCOMAS
Siguiendo con el Locate, después del mensaje que ya postee y que no se me contestó, otro detalle que si que me es un problema, es cuando en ese Locate de un TDataSet, más concretamente un TDbfDataSet, si el campo a localizar contiene alguna comilla simple, lanza error.

texto a localizar A D'

Code: Select all

****************************** Registre d'errors ******************************

             Exe: \\Server10\c\@Soft\Compta\CWin.exe
         Version: 4.19.5.15
           Build: 15
       User name: Xevi
   Computer name: HPPORTATILI7
           Data: 23/05/2019
            Hora: 12:50:24
   Memòria lliure: 2097151
     Àrea actual: 1

-------------------------- Informació del compilador --------------------------

  Versió Xailer: Xailer 6.0.4
      Compilador: Harbour 3.2.0dev (r1803161710)
Compilador C/C++: MinGW GNU C 7.3 (32-bit)
      Plataforma: Windows 10 10.0

----------------------- Informació detallada del error ------------------------

      Subsistema: BASE
 Codi d'error: 1449
          Estat: .F.
     Descripció: Error de sintaxis
       Operació: &
      Arguments:  [ 1] = Tipus: C Valor: {||DESCRIPCIO >= 'A D''}
         Fitxer:
 Codi error SO: 0

Pila de trucades:
  TDBFDATASET:LOCATE (516)
  XRECERCA (365)
  TMDIFORM:EDITRECERCACHANGE (352)
  TMASKEDIT:ONCHANGE (0)
  (b)XEDIT (95)
  TEDIT:CHANGE (0)
  (b)XMASKEDIT (66)
  TMASKEDIT:CHANGE (0)
  TMASKEDIT:COMMAND (166)
  TSCROLLINGWINCONTROL:WMCOMMAND (275)
  TMDIFORM:WMCOMMAND (952)
  SENDMESSAGE (0)
  (b)XCONTROL (101)
  TMASKEDIT:SENDMSG (0)
  TMASKEDIT:INPUT (614)
  TMASKEDIT:WMCHAR (104)
  RUNFORM (0)
  TAPPLICATION:RUN (289)
  MAIN (23)

------------------- Informació detallada d'àrees de treball -------------------

            Àrea: 1
           Àlies: CMAEC
        Registre: 118
          Filtre:
        Relació:
Ordre de l'índex: 10
    Clau activa: 10


¿Cómo lo haceis en estos casos???
¿Alguna función como para un TSQLTable como StrSQL(cTexto) ???

Gracias por vuestro tiempo

Re: Locate en TDataSet

Posted: Thu May 23, 2019 4:56 pm
by XeviCOMAS
He probado con la función StrSQLite(), pero no resuelve el problema.

Code: Select all

****************************** Registre d'errors ******************************

             Exe: D:\XeviXailer (local)\GWin\GWin.exe
         Version: 4.19.5.22
           Build: 22
       User name: Xevi
   Computer name: HPPORTATILI7
           Data: 23/05/2019
            Hora: 16:55:40
   Memòria lliure: 2097151
     Àrea actual: 1

-------------------------- Informació del compilador --------------------------

  Versió Xailer: Xailer 6.0.4
      Compilador: Harbour 3.2.0dev (r1803161710)
Compilador C/C++: MinGW GNU C 7.3 (32-bit)
      Plataforma: Windows 10 10.0

----------------------- Informació detallada del error ------------------------

      Subsistema: BASE
 Codi d'error: 1449
          Estat: .F.
     Descripció: Error de sintaxis
       Operació: &
      Arguments:  [ 1] = Tipus: C Valor: {||NOM >= 'D'''}
         Fitxer:
 Codi error SO: 0

Pila de trucades:
  TDBFDATASET:LOCATE (516)
  EDITRECERCACHANGECLIENTS (279)
  TFRMCLIENTS:EDITRECERCACHANGE (264)
  TMASKEDIT:ONCHANGE (0)
  (b)XEDIT (95)
  TEDIT:CHANGE (0)
  (b)XMASKEDIT (66)
  TMASKEDIT:CHANGE (0)
  TMASKEDIT:COMMAND (166)
  TSCROLLINGWINCONTROL:WMCOMMAND (275)
  TFRMCLIENTS:WMCOMMAND (952)
  SENDMESSAGE (0)
  (b)XCONTROL (101)
  TMASKEDIT:SENDMSG (0)
  TMASKEDIT:INPUT (614)
  TMASKEDIT:WMCHAR (104)
  RUNFORM (0)
  TAPPLICATION:RUN (289)
  MAIN (24)

------------------- Informació detallada d'àrees de treball -------------------

            Àrea: 1
           Àlies: CLIEN
        Registre: 3003
          Filtre:
        Relació:
Ordre de l'índex: 4
    Clau activa: 4


Re: Locate en TDataSet

Posted: Thu May 23, 2019 5:31 pm
by XeviCOMAS
:Locate( "MICAMPO = '" + xStrDBF( "Carte d'Or" ) + "'" )

He hecho esta funcioncilla

Code: Select all

FUNCTION xStrDBF( cText )
RETURN StrTran( cText, "'", ['+"'"+'] )


Y está funcionando correctamente!!!

Igual a alguno le puede servir.


Gracias por vuestro tiempo.