duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Hola compañeros,
Para buscar un valor en todos _ ahora uso:
cWild := "*"+ "VALOR A BUSCAR" +"*"
cFiltro := "hb_WildMatch( '"+cWild+"', DbRecordInfo( 9 ) ) .OR.
hb_WildMatch( '"+UPPER(cWild)+"', DbRecordInfo( 9 ) ) .or. hb_WildMatch(
'"+lower(cWild)+"', DbRecordInfo( 9 ) ) "
SET FILTER TO &cFiltro
Y funciona muy bien, pero ADS no lo soporta.
He probado con:
cName := "LUCAS"
cExpr1 := 'contains( *, "*'+UPPER( alltrim(cName) )+'*" ) '
AdsSetAOF( cExpr1 )
Y nada.
¿Alguno sabe cómo resolverlo por favor?.
Gracias.
Para buscar un valor en todos _ ahora uso:
cWild := "*"+ "VALOR A BUSCAR" +"*"
cFiltro := "hb_WildMatch( '"+cWild+"', DbRecordInfo( 9 ) ) .OR.
hb_WildMatch( '"+UPPER(cWild)+"', DbRecordInfo( 9 ) ) .or. hb_WildMatch(
'"+lower(cWild)+"', DbRecordInfo( 9 ) ) "
SET FILTER TO &cFiltro
Y funciona muy bien, pero ADS no lo soporta.
He probado con:
cName := "LUCAS"
cExpr1 := 'contains( *, "*'+UPPER( alltrim(cName) )+'*" ) '
AdsSetAOF( cExpr1 )
Y nada.
¿Alguno sabe cómo resolverlo por favor?.
Gracias.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Lucas;
a ver si te ayuda. El filtro ADS lo uso así:
a ver si te ayuda. El filtro ADS lo uso así:
Code: Select all
cName := "LUCAS"
// que comience
AdsSetAOF( 'APEYNOM="' +cName+'"' )
// que contenga
AdsSetAOF( '"' +cName+ '" $ APEYNOM' )
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Muchas gracias Mario, pero se trata de buscar en todos _.
Eso es lo que permite el código anteriormente indicado. Además, funciona bastante bien con DBFCDX.
¿Tu haces este tipo de búsquedas totales?.
Muchas gracias de nuevo.
Eso es lo que permite el código anteriormente indicado. Además, funciona bastante bien con DBFCDX.
¿Tu haces este tipo de búsquedas totales?.
Muchas gracias de nuevo.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
lamento decirte que no
Otra opcion, con ADS, es hacerlo mediante sentencia SQL, que es lo que uso para casos como el que planteas. Si no tenes la ayuda de sentencias te la paso
Otra opcion, con ADS, es hacerlo mediante sentencia SQL, que es lo que uso para casos como el que planteas. Si no tenes la ayuda de sentencias te la paso
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Quizás esto te sirva:lucasdebeltran wrote:Muchas gracias Mario, pero se trata de buscar en todos _.
Eso es lo que permite el código anteriormente indicado. Además, funciona bastante bien con DBFCDX.
¿Tu haces este tipo de búsquedas totales?.
Muchas gracias de nuevo.
Code: Select all
#include "fivewin.ch"
#include "Dbstruct.ch"
#include "DbInfo.ch"
/* Función para buscar en una DBF (en su orden NATURAL) un valor contenido
en un campo determinado.
Simula el comando LOCATE y CONTINUE, pero realizando un AT().
Devuelve el Recno() ó '0' según encuentre o no el valor a buscar.
Se asume que la DBF está abierta y se recibe su Alias().
Su uso es:
nAtInDbf( cAliasDBF, "APELLIDO", "GARCIA", .F. )
para continuar la búsqueda con los mismos parámetros:
nAtInDbf( cAliasDBF, , , .T. )
Para que nos entendamos, la primera vez vendría a ser un LOCATE, y la segunda
vez vendría a ser un CONTINUE.
--------------------------------------------------------------------------------- */
FUNCTION nAtInDbf( cAliasDBF, cFieldDBF, cString, lContinue )
STATIC cMemoDbf := "", ;
nBytesToField := 0, ;
nBytesEndField := 0, ;
nOffset := 0, ;
cSearch := "", ;
cfield := "", ;
nRegLocate_1 := 0
Local aEstruct := {}
Local nPos := 0
DEFAULT lContinue := .F.
/*
Traza( 1, cAliasDbf )
Traza( 1, ( cAliasDbf )->(DbInfo( DBI_FULLPATH )) )
Traza( 1, cFieldDbf )
Traza( 1, cString )
Traza( 1, lContinue )
*/
If .not. lContinue
If Len( cString ) < 1
MsgInfo("Not Data to Search.", "Search Error." )
Return 0
Endif
cMemoDbf := MemoRead( ( cAliasDbf )->(DbInfo( DBI_FULLPATH )) )
nOffset := 0
cSearch := cString
cField := Upper( cfieldDBF )
nRegLocate_1 := 0
nBytesToField := 0
nBytesEndField := 0
aEstruct := ( cAliasDBF )->(DBSTRUCT())
AScan( aEstruct, { |aCampo| If( aCampo[ DBS_NAME ] == cField, ;
(nBytesEndField := nBytesToField + aCampo[ DBS_LEN ] + aCampo[ DBS_DEC ], .T.), ;
(nBytesToField := nBytesToField + aCampo[ DBS_LEN ] + aCampo[ DBS_DEC ], .F. ) ;
) ;
} ;
)
If nBytesEndField = 0
MsgInfo("Field not found.", "Search Error." )
Return 0
Endif
EndIf
nPos := 0
While nPos <= ( ( cAliasDBF )->(Header()) + (nRegLocate_1 * ( cAliasDBF )->(RecSize()) ) + nBytesToField) .or. ;
nPos > ( ( cAliasDBF )->(Header()) + (nRegLocate_1 * ( cAliasDBF )->(RecSize()) ) + nBytesEndField)
nPos := AT( cSearch, SubStr(cMemoDbf, nOffset + 1) )
If nPos = 0
nRegLocate_1 = -1
Exit
EndIf
nOffset := nPos := nPos + nOffSet
nRegLocate_1 := INT( ( nPos - ( cAliasDBF )->(Header()) ) / ( cAliasDBF )->(RecSize()) ) // Registro anterior al localizado¿?
If (( nPos - ( cAliasDBF )->(Header()) ) % ( cAliasDBF )->(RecSize())) = 0
nRegLocate_1 = nRegLocate_1 - 1 // Registro anterior al localizado.
EndIf
End
Return nRegLocate_1 + 1
//------------------------------------------------------------------
Un Saludo
Carlos G.
FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
Carlos G.
FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Hola:
Muchas gracias pero no me sirve ya que al usar ADS no se puede abrir el fichero a bajo nivel.
Muchas gracias pero no me sirve ya que al usar ADS no se puede abrir el fichero a bajo nivel.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Para usar la instrucción containsnNecesitas crear indices FTS sobre la tabla que quieras buscar.
Revisa la ayuda de ADS sobre los indices FTS. Son una maravilla.
Code: Select all
cExpr1 := 'contains( *, "*'+UPPER( alltrim(cName) )+'*" ) '
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Hola Fernando:
Muchas gracias por responder.
Lo del * para todos _ ya lo descubrí en la ayuda, pero no se cómo crear un índice FTS para todos _.
¿Por favor, tienes un ejemplo?.
Y los índices FTS ¿son temproales o son como los .cdx?.
No he conseguido encontrar información sobre índices FTS y Harbour.
Un saludo y mil gracias de nuevo.
Muchas gracias por responder.
Lo del * para todos _ ya lo descubrí en la ayuda, pero no se cómo crear un índice FTS para todos _.
¿Por favor, tienes un ejemplo?.
Y los índices FTS ¿son temproales o son como los .cdx?.
No he conseguido encontrar información sobre índices FTS y Harbour.
Un saludo y mil gracias de nuevo.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Lucas: en el Help del Arc de Advantage habla de los indices FTS, quizas te pueda ayudar.
Saludos
Ruben Fernandez
Saludos
Ruben Fernandez
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Los indices FTS no son de Harbour, son de Advantage.
Revisa la ayuda del Arc de Advantage, como te dice Ruben Fernandez.
Revisa la ayuda del Arc de Advantage, como te dice Ruben Fernandez.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: duda ADS equivalente hb_WildMatch( '"+cWild+"', DbRecordInfo
Sí, claro que lo miré, pero no lo entendí bien, sobre todo con el uso de un Diccionario para usar las Dbfs via AIS.
Todavía tengo el problema con los índices.
Con AIS, INDEX ON NUMERO TO PRESUA FOR PASADO = "S" .AND.
!Deleted() no me genera un .IDX sino un .CDX.
No lo entiendo.
En modo local sí me genera un .IDX, pero en modo AIS es un .cdx con el
mismo código.
Todavía tengo el problema con los índices.
Con AIS, INDEX ON NUMERO TO PRESUA FOR PASADO = "S" .AND.
!Deleted() no me genera un .IDX sino un .CDX.
No lo entiendo.
En modo local sí me genera un .IDX, pero en modo AIS es un .cdx con el
mismo código.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.