Ругань на преобразование типов
Модераторы: m0p3e, edward_K, Модераторы
-
- Сообщения: 15
- Зарегистрирован: 17 фев 2009, 14:57
Ругань на преобразование типов
Всем привет! Проблема возникла, какой не ждал: в фейсе ищу запись в таблице MARPUNKT таким образом:
...
s := DBFGetFieldValue(f,'Punk_naz');
if (getfirst MARPUNKT where (SubStr(MARPUNKT.code,1,5) = s ) = tsOk) then ...
...
т.е. считываю значение с поля DBF-ки (оно 5 знаков строковое) и по фильтру хочу найти значение в Галактике (у нас в MARPUNKT.code - 6 знак контрольная сумма). Ругается: "Не могу осуществить преобразование типов!". Запускаю такой же пробный селект в ЛОТе - все находит!
Объясните, в чем дело? Везде же стринговые значения что поля, что переменные
...
s := DBFGetFieldValue(f,'Punk_naz');
if (getfirst MARPUNKT where (SubStr(MARPUNKT.code,1,5) = s ) = tsOk) then ...
...
т.е. считываю значение с поля DBF-ки (оно 5 знаков строковое) и по фильтру хочу найти значение в Галактике (у нас в MARPUNKT.code - 6 знак контрольная сумма). Ругается: "Не могу осуществить преобразование типов!". Запускаю такой же пробный селект в ЛОТе - все находит!
Объясните, в чем дело? Везде же стринговые значения что поля, что переменные
Давайте жить дружно и работать весело!
Нарно так
Код: Выделить всё
if ((getfirst MARPUNKT where (SubStr(MARPUNKT.code,1,5) = s )) = tsOk)
-
- Сообщения: 15
- Зарегистрирован: 17 фев 2009, 14:57
-
- Слесарь-системщик
- Сообщения: 304
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
- Контактная информация:
В скобки нужно заключить конструкцию getfirst вместе со всем ее содержимым, иначе "(SubStr(MARPUNKT.code,1,5) = s ) = tsOk" станет частью where, а результат, возвращаемый модификатором, компилятор попытается преобразовать к boolean. А делать это неявно компилятор не умеет. Вот и ругается.
То есть, дело не в двойных скобках, а только в умелой их расстановке.
То есть, дело не в двойных скобках, а только в умелой их расстановке.
Виталий
-
- Постоянный гость
- Сообщения: 71
- Зарегистрирован: 16 апр 2007, 11:48
- Откуда: г. Кемерово
- Контактная информация:
доброго времени суток.
у меня похожая беда - пишу:
.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.
как с этим бороться? подскажите, плиз.
у меня похожая беда - пишу:
.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.
как с этим бороться? подскажите, плиз.
Интереса ради скомпилировал это, получил протокол:
Т. е. это уже ошибки следующего этапа, проблем с преобразованием типов здесь быть не должно. Посмотрите, что написано непосредственно перед .create view (может быть, предыдущая конструкция не закончена, и этот оператор воспринимается как ее продолжение). Убедитесь, что точка стоит в первой позиции. Либо выкладывайте форму целиком.
Код: Выделить всё
Предупреждение: Неявное добавление таблицы APPOINTMENTS в логическую таблицу D1
Ошибка: Нужен ключ APPTABNMB для APPOINTMENTS
Ошибка: Ошибка настройки логических таблиц