:: Архив конференции по VFP до 2005 года
Вопрос... Не вопрос... Наверное интересно мне это
Aries
Автор

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
Вот написал простенький код, итак.
Есть объект. В нем есть метод Updates.
В нем я хочу обновить табличку. Вот код:

LOCAL laProp(1,1),lnI,lcStr,lnIndex
lcStr=""
lnIndex=THIS.oFields.iIndex
AMEMBERS("laProp",THIS.oFields,1)
FOR lnI=1 TO ALEN(laProp,1)
lcStr=lcStr+laProp(lnI,1)+"=THIS.oFields."+laProp(lnI,1)+","
endFOR
lcStr=SUBSTR(lcStr,1,LEN(lcStr)-1)
UPDATE (THIS.cNameTable) SET &lcStr WHERE iIndex=lnIndex

В общем на последней строке валится ошибка Alias oField not found
т.е из макроподстановки получается
UPDATE (THIS.cNameTable) SET Field1=THIS.oFileds.Field1,FieldN=THIS.oFileds.FieldN WHERE iIndex=lnIndex

Field1=THIS.oFileds.Field1
Почему на эту строчку ругань? Это первое.
Второе: как решить эту проблему?

Кстати, я проблему решил, довольно просто. Но вот хочется еще советы посмотреть. ;)

PS Проблему решил дописавши одну строчку, практически не меняя весь код



Отредактировано (20.03.05 13:53)


------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive
Re: Вопрос... Не вопрос... Наверное интересно мне это
Alex Roublev

Сообщений: 3695
Откуда: Ярославль
Дата регистрации: 28.09.2002
Привет, Aries

Цитата:
THIS.oFields

Я столкнулся с такой "поганкой". Если в выражении фильтра указано "This", то эта переменная потом не находится при использовании таблицы вне программы. Т.е. ссылка не находится. Выражение фильтра ведь хранится с таблицей. Но это - м.б. другой случай, нежели твой.

Попробуй так, м.б. получится...:
cFld = "[="+THIS.oFields+"."+laProp(lnI,1)+"]"
lcStr=lcStr+laProp(lnI,1)+&cFld+","
То есть попытаться явно указывать имя поля, вместо This, вместо
lcStr=lcStr+laProp(lnI,1)+"=THIS.oFields."+laProp(lnI,1)+","
Ratings: 0 negative/0 positive
Re: Вопрос... Не вопрос... Наверное интересно мне это
Aries
Автор

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
По первому вопросу более менее понятно.

По второму:
Две строчки да и еще макроподстановка - не то ;)



Отредактировано (20.03.05 14:12)


------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive
Re: Вопрос... Не вопрос... Наверное интересно мне это
Alex Roublev

Сообщений: 3695
Откуда: Ярославль
Дата регистрации: 28.09.2002
Я подразумевал, что при первой макроподстановке (&oFld), куда записывается значение после знака "=", в переменную lcStr вставить имя поля, а во второй макроподстановке, которую ты приводишь, обновлять поля таблицы заданными значениями. То есть явно указывать имена полей без использования "This" или я заблуждаюсь на сей счет?
Ratings: 0 negative/0 positive
Re: Вопрос... Не вопрос... Наверное интересно мне это
Aries
Автор

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
Саш, четыре раза перечитай твой вопрос и не въехал что ты спрашивашь.
Короче я объясню что требуется.

Есть объект. Допустим MyObject. В нем есть свойства они имеют имена такие же как в таблице.

Так как все действия внутри самого объеткта, и иерархия и имя неизвестно, то обращение к свойствам такое.
THIS.oFields.Field1
THIS.oFields.Field2
THIS.oFields.Field3
...
THIS.oFields.FieldN

Field1 итд это я к примеру указал именя могут быть совсем разными.

Теперь есть табличка, к примеру tPrim. В ней тоже есть поля
tPrim.Field1
tPrim.Field2
tPrim.Field3
...
tPrim.FieldN

А теперь мне надо обновить поля значениями из свойств объекта
т.е я указать не могу в строке обновления явно SET Field1=THIS.oFields.Field1
Так как мне известно только объект но не свойства. Посему я циклом и создаю строку для команды.
FOR lnI=1 TO ALEN(laProp,1)
lcStr=lcStr+laProp(lnI,1)+"=THIS.oFields."+laProp(lnI,1)+","
endFOR
т.е на выходе получается lcStr="Filed1=THIS.oFields.Field1,..."



Отредактировано (21.03.05 09:22)


------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive


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

On-line: 6 (Гостей: 6)

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