2017-02-01 11 views
0

В VFP 6 У меня есть таблица под названием «cars» и внутри кнопки я хочу найти идентификатор на основе имени. Что я сделал не так?Как получить данные из локации?

... code 
SELECT cars 
LOCATE FOR ALLTRIM(UPPER(name)) = variable_read_from_textbox 
IF NOT FOUND() 
    messagebox("not found") 
ELSE 
    messagebox(cars.id_car) 
ENDIF 

Выполнение кода работает нормально, когда имя не обнаружено, но когда оно обнаружено, оно устранено.

Спасибо!

ответ

4

Ваш код в целом в порядке. Незначительная модификация для безопасности и исправления для ошибок:

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() 
... 
+0

Спасибо! «transform» зафиксировал его. Спасибо за другие советы, я не разработчик VFP, просто пытаюсь помочь другу сделать проект для курса коммерции. –