Subject |
Re: applyLocate and apostrophe applylocate limit ? |
From |
Mervyn Bick <invalid@invalid.invalid> |
Date |
Sat, 17 Aug 2024 13:22:30 +0200 |
Newsgroups |
dbase.getting-started |
On 2024/08/15 21:58, Dirk C wrote:
> hello to you,
>
> when in use findkeynearst : and the name in the field begins with
> apostrophe :: no problem can find teh value
>
> i have a search field using applylocate
>
> when i change the combox and put a value in a field beginns with an
> apostrophe :: applylocate gives an error : Unallowed phrase/keyword in
> command: '
>
> when i first give a value and change the combobox it finds the first
> value beginning with a apostrophe
>
> but let's say taking the 4th or whatever value starts with an apostrophe
> and change the combobox : only get the first value with an apostrophe
applyLocate() moves the row pointer and always starts from the first
record in the rowset and stops when it finds the first matching record.
applyLocate() returns true if a match is found and false if not. If
this is assigned to a variable it can be used to decide what to do next.
If you want to use the same search criteria to move to the next record
that matches you need to use locateNext().
> even the apostrophe is in the middle of the value: applylocate doesn't
> accept the '
>
> even using the function to replace the ' or strip the '
If you are using .dbf tables and the search field can contain
apostrophes, instead of the format shown in the example in the help file
form.rowset.applyLocate( "CITY = '" + form.cityText.value + "'" )
use the following syntax for applyLocate()
bSuccess = oRowset.applyLocate("fieldname = ["+searchString+"]")
This wraps the search string in square brackets instead of single quotes.
By wrapping the search value in square brackets dBASE will be happy to
accept apostrophes in the search value.
>
> c_Veldf = [name='] +trim(this.value)+['] or with quotes
>
> Do Case
> Case form.keuzedoos_sorteren.value =="firma"
> c_Veldf = [name=']+trim(this.value)+[']
> ? c_veldf
> o_vraagb.rowset.locateOptions = 3
> o_vraagb.rowset.beginlocate()
> o_vraagb.rowset.ApplyLocate(c_Veldf)
> Case form.keuzedoos_sorteren.value =="postcode"
.....
> EndCase
>
> thanks for more info
>
> Dirk,
>
You don't say to which object's event handler executes your function so
I have no idea what object "this" in your code represents. In the code
below I'm going to assume that the search value is in an entryfield.
As you want to use different SQL expressions as the argument for
applyLocate with different search strings depending on the field
selected in a combobox you are going to have to build the command piece
by piece and then use the & macro operator to execute it.
Try the following.
o_vraagb.rowset.locateOptions = 3
//Set before the Do Case as all options require this and it stays
//the same until it is changed elsewhere in the program.
Do Case
Case form.keuzedoos_sorteren.value =="firma"
// o_vraagb.rowset.beginlocate() // See note below
cmd =
'o_vraagb.rowset.applyLocate("name=['+trim(form.entryfield1.value)+']")'
//?cmd //Uncomment to see command
&cmd
Case form.keuzedoos_sorteren.value =="postcode"
// o_vraagb.rowset.beginlocate() // See note below
cmd =
'o_vraagb.rowset.applyLocate("plz=['+trim(form.entryfield1.value)+']")'
//?cmd //Uncomment to see command
&cmd
.......
o_vraagb.rowset.beginlocate() is only needed if you are using the
"locate by form" option i.e the user enters a search value in an
entryfield datalinked to the search field.
Mervyn.
|
|