Ваш код в целом в порядке. Незначительная модификация для безопасности и исправления для ошибок:
SELECT cars
* this implies an exact match, regardless of set exact, and makes casing same
* remember this wouldn't use an index unless there is an index with the same signature
LOCATE FOR ALLTRIM(UPPER(name)) == ALLTRIM(UPPER(m.variable_read_from_textbox))
IF NOT FOUND()
messagebox("not found")
ELSE
messagebox(transform(cars.id_car))
ENDIF
Насколько я помню, в VFP6, MessageBox() еще не был способен преобразовывать значение строки для вас, и ожидает, что строка (вы не сказали, что ошибка есть, но это должно быть).
Небольшая осторожность в отношении вашего поиска.
ALLTRIM(UPPER(name))
не будет использовать индекс, если не существует индекс с ключом «ALLTRIM (ВЕРХНИЙ (название))». Если он есть, он будет использоваться, но такой индекс фактически бесполезен из-за alltrim(). Лучше индекс был бы просто:
Upper(name)
и то поиск будет выглядеть так:
variable_read_from_textbox = ALLTRIM(UPPER(m.variable_read_from_textbox))
SET EXACT ON
SELECT cars
LOCATE FOR UPPER(name) = m.variable_read_from_textbox
IF NOT FOUND()
...
Спасибо! «transform» зафиксировал его. Спасибо за другие советы, я не разработчик VFP, просто пытаюсь помочь другу сделать проект для курса коммерции. –