How could I manage a full text search in the whole database like LOCATE but in all fields?
Regards
Otto
How could I manage a full text search in the whole database like LOCATE but in all fields?
Regards
Otto
Otto,
At( cText, MemoRead( "file.dbf" ) )
once found, substract the DBF header size, and divide it by the record size
Thank you. I there a limit for memoread: FW FWH
Regards
Otto
Otto,
MemoRead() is a Harbour function. There is no size limit (max. 4 gigs)
If you have xHarbour from .com then you can use FTS (Full Text Search) to create index and search.
Antonio Linares wrote:
At( cText, MemoRead( "file.dbf" ) )
once found, substract the DBF header size, and divide it by the record size
memo fields require a different approach as they are not stored in the DBF, but on an external file. You can search in such external file, and then you should search its offset into the DBF.
You may ask Przemek how to get the memo offset from the DBF
Otto wrote:How could I manage a full text search in the whole database like LOCATE but in all fields?
Regards
Otto
#INCLUDE "Fivewin.ch"
#include "dbinfo.ch"
//REQUEST RMDBFCDX
REQUEST DBFCDX
//REQUEST BMDBFCDX
PROCEDURE Main()
FIELD FIRST, LAST, STREET, CITY
LOCAL n, hs
rddSetDefault( "DBFCDX" )
// rddSetDefault( "BMDBFCDX" )
// if ascan( rddList(1), "RMDBFCDX" ) != 0
// rddSetDefault( "RMDBFCDX" )
// endif
// ? RddSetDefault ()
use test
hs := HS_INDEX( "test", "FIRST+LAST+STREET+CITY", 2, 0, , .T., 3 )
/* Look for all records which have 'SHERMAN' string inside */
HS_SET( hs, "SHERMAN" )
while ( n := HS_NEXT( hs ) ) > 0
dbgoto( n )
if HS_VERIFY( hs ) > 0
? rtrim( FIRST+LAST+STREET+CITY )
endif
enddo
// wait
/* Does RDD support Record Map Filters? */
// if dbinfo( DBI_RM_SUPPORTED )
/* if yest then let set filter for all records with 'SHERMAN'
word and look at them in browser */
HS_FILTER( hs, "SHERMAN" )
DbSetFilter( {|| "SHERMAN"}, "SHERMAN" )
dbgotop()
browse()
// endif
HS_CLOSE( hs )
CLOSE ALL
QUIT
RETURN
Otto,
You can't see it as it has embedded zeroes. Try this:
MsgInfo( Len( ctext ) )
Thank you Antonio.
Hi Stefan,
I get a "Unresolved External _HB_FUN_HS_INDEX" error when I try to compile your test. According to the help file I need - xhb.lib - is that correct? I can't find that lib on my PC, and yet I have xHarbour? Any ideas as to what I am doing wrong?
Did you ever find out if the Hyperseek works on MEMO fields too?
Antonio, do you know how to get the memo offset from the DBF if I use your method? (in case Hyperseek doesn't work for MEMOs)
Ollie,
> Antonio, do you know how to get the memo offset from the DBF
What RDD are you using ?
DBFCDX
Ollie,
I guess that you could use:
DbInfo( DBI_BLOB_OFFSET )
http://www.ousob.com/ng/53guide/ng28fbc.php
and/or
DbFieldInfo( DBS_BLOB_OFFSET )