for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Архив конференции по VFP до 2005 года
   :: Помощь сайту :: 

Вопрос... Не вопрос... Наверное интересно мне это
Aries
Автор

Сообщений: 4349
Откуда: Николаев
Дата: 20.03.05 09:36:12ОтветитьЦитировать
Вот написал простенький код, итак.
Есть объект. В нем есть метод 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
Откуда: Ярославль
Дата: 20.03.05 10:03:52ОтветитьЦитировать
Привет, 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
Откуда: Николаев
Дата: 20.03.05 10:07:47ОтветитьЦитировать
По первому вопросу более менее понятно.

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



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


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

Re: Вопрос... Не вопрос... Наверное интересно мне это
Alex Roublev

Сообщений: 3695
Откуда: Ярославль
Дата: 20.03.05 10:24:18ОтветитьЦитировать
Я подразумевал, что при первой макроподстановке (&oFld), куда записывается значение после знака "=", в переменную lcStr вставить имя поля, а во второй макроподстановке, которую ты приводишь, обновлять поля таблицы заданными значениями. То есть явно указывать имена полей без использования "This" или я заблуждаюсь на сей счет?
Ratings: 0 negative/0 positive

Re: Вопрос... Не вопрос... Наверное интересно мне это
Aries
Автор

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

Есть объект. Допустим 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: 49 and Guests: 49


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