Страница 1 из 1

Ругань на преобразование типов

Добавлено: 01 июн 2009, 12:55
Uncle_James
Всем привет! Проблема возникла, какой не ждал: в фейсе ищу запись в таблице MARPUNKT таким образом:
...
s := DBFGetFieldValue(f,'Punk_naz');
if (getfirst MARPUNKT where (SubStr(MARPUNKT.code,1,5) = s ) = tsOk) then ...
...

т.е. считываю значение с поля DBF-ки (оно 5 знаков строковое) и по фильтру хочу найти значение в Галактике (у нас в MARPUNKT.code - 6 знак контрольная сумма). Ругается: "Не могу осуществить преобразование типов!". Запускаю такой же пробный селект в ЛОТе - все находит!
Объясните, в чем дело? Везде же стринговые значения что поля, что переменные :o

Добавлено: 01 июн 2009, 13:32
Ged
Нарно так

Код: Выделить всё

if ((getfirst MARPUNKT where (SubStr(MARPUNKT.code,1,5) = s )) = tsOk)

Добавлено: 01 июн 2009, 14:01
Uncle_James
Спасибо за ответ!
Это что получается: если используется конструкция Where , обязательно должны быть перед константой tsOk двойные скобки, а то компилятор не понимает? Интересные дела.. А в справочнике по атлантису это не описано, или я не нашел этого :-?

Добавлено: 12 июн 2009, 17:58
Screw
В скобки нужно заключить конструкцию getfirst вместе со всем ее содержимым, иначе "(SubStr(MARPUNKT.code,1,5) = s ) = tsOk" станет частью where, а результат, возвращаемый модификатором, компилятор попытается преобразовать к boolean. А делать это неявно компилятор не умеет. Вот и ругается.
То есть, дело не в двойных скобках, а только в умелой их расстановке.

Добавлено: 10 июл 2009, 15:24
Gali
доброго времени суток.
у меня похожая беда - пишу:
.Create view d1 as SELECT APPOINTMENTS.Apptabnmb, APPOINTMENTS.post, catalogs.nrec, catalogs.name from persons, catalogs where ((Tabn==APPOINTMENTS.Apptabnmb and APPOINTMENTS.POST== catalogs.nrec));

а мне Галка ругается на невозможность преобразования типов.
обе переменные с типом integer.
как с этим бороться? подскажите, плиз.

Добавлено: 10 июл 2009, 15:37
edward_K
Tabn надо longint
а вообще разбейте на несколько строк - будет понятней на что ругается.

Добавлено: 13 июл 2009, 15:10
Gali
Tabn объявлена глобальной переменной типа longint.

на несколько строк разделяла - ругается то на первое условие равенства, то на второе... хотя раельно типы одинаковые

Добавлено: 13 июл 2009, 16:02
KATZ
Интереса ради скомпилировал это, получил протокол:

Код: Выделить всё

Предупреждение: Неявное добавление таблицы APPOINTMENTS в логическую таблицу D1
Ошибка: Нужен ключ APPTABNMB для APPOINTMENTS
Ошибка: Ошибка настройки логических таблиц
Т. е. это уже ошибки следующего этапа, проблем с преобразованием типов здесь быть не должно. Посмотрите, что написано непосредственно перед .create view (может быть, предыдущая конструкция не закончена, и этот оператор воспринимается как ее продолжение). Убедитесь, что точка стоит в первой позиции. Либо выкладывайте форму целиком.