:: Visual Foxpro, Foxpro for DOS
длина поля в курсоре
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
Добрый день, у меня возникла проблема при формировании/заполнении курсора
если первое значение которое будет записываться в fn будет коротким например: 'Л/С' то все остальные значения обрезается до первых 3 символов(усл вместо улсуги и жил вместо жилец), сначала пытался создать курсора и через icase() заполнить поле в зависимости от того что в fn записано но проблема появились с обрезанным названием, дальше попробовал создать курсор и заполнить уже его но проблема осталась
единственное что пришло в голову это привести все значения к одной длинне, из 'Л/С' сделать 'Л/С ' и тогда я получу полные названия, но можно же это как то более красиво сделать?

fn - название формы
*вариант 1
SELECT domkva.nls,ICASE(dk_pc.fn='domkva','Л/С',dk_pc.fn='jilec','жилец',dk_pc.fn='dkuslugi','услуги'),domkva.fio, domkva.adres, dk_pc.nmf,dk_pc.data, dk_pc.dt from dk_pc ;
LEFT JOIN domkva ON dk_pc.kkd = domkva.kkd;
into cursor c1
*вариант 2
CREATE CURSOR c2 (nls c(20),fn c(10),fio c(80), adres c(100), nmf c(254), data d(8), dt t(8))
INSERT INTO c2 SELECT domkva.nls,ICASE(dk_pc.fn='domkva','Л/С',dk_pc.fn='jilec','жилец',dk_pc.fn='dkuslugi','услуги'),domkva.fio, domkva.adres, dk_pc.nmf,dk_pc.data, dk_pc.dt from dk_pc ;
LEFT JOIN domkva ON dk_pc.kkd = domkva.kkd



Исправлено 1 раз(а). Последнее : axeum, 30.08.22 08:09
Ratings: 0 negative/0 positive
Re: длина поля в курсоре
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
axeum
Добрый день, у меня возникла проблема при формировании/заполнении курсора
если первое значение которое будет записываться в fn будет коротким например: 'Л/С' то все остальные значения обрезается до первых 3 символов(усл вместо улсуги и жил вместо жилец), сначала пытался создать курсора и через icase() заполнить поле в зависимости от того что в fn записано но проблема появились с обрезанным названием, дальше попробовал создать курсор и заполнить уже его но проблема осталась
единственное что пришло в голову это привести все значения к одной длинне, из 'Л/С' сделать 'Л/С ' и тогда я получу полные названия, но можно же это как то более красиво сделать?

fn - название формы
*вариант 1
SELECT domkva.nls,ICASE(dk_pc.fn='domkva','Л/С',dk_pc.fn='jilec','жилец',dk_pc.fn='dkuslugi','услуги'),domkva.fio, domkva.adres, dk_pc.nmf,dk_pc.data, dk_pc.dt from dk_pc ;
LEFT JOIN domkva ON dk_pc.kkd = domkva.kkd;
into cursor c1

При Select фокс осуществляет "нулевой прогон" по "первой попавшейся записи", что бы получить размерность поля выходном курсоре, поэтому если "первая запись" = 'Л/С', то фокс определит в выходном курсоре с(3).
Лечится указанием размерности в Select

SELECT domkva.nls,
cast(
ICASE(dk_pc.fn='domkva','Л/С',dk_pc.fn='jilec','жилец',dk_pc.fn='dkuslugi','услуги')
as c(100)) as Fn, ....


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 2 раз(а). Последнее : PaulWist, 30.08.22 08:21
Ratings: 0 negative/0 positive
Re: длина поля в курсоре
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
SELECT domkva.nls,;
CAST(ICASE(dk_pc.fn='domkva','Л/С',dk_pc.fn='jilec','жилец',dk_pc.fn='dkuslugi','услуги') as c(20)) as myfield,;
domkva.fio, domkva.adres, dk_pc.nmf,dk_pc.data, dk_pc.dt from dk_pc ;
LEFT JOIN domkva ON dk_pc.kkd = domkva.kkd;
into cursor c1

... собсно уже написали )))



Исправлено 1 раз(а). Последнее : AndyNigmatec, 30.08.22 10:40
Ratings: 0 negative/0 positive
Re: длина поля в курсоре
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() Можно без CAST-а - извлекать в SELECT PADR(поле, 100), например
Ratings: 0 negative/0 positive
Re: длина поля в курсоре
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
Спасибо всем, про cast() я совсем забыл, в очередной раз я себе жизнь усложняю не вспоминая про самый простой способ



Исправлено 1 раз(а). Последнее : axeum, 02.09.22 07:31
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 MikhsR  (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика