08.04.2003, 17:39 | #1 |
Участник
|
Как записать значение в поле, зная его имя
Попробую объяснить.
Предположим у меня в тексте есть такие строчки: (DestTable - Это некая таблица с полями ID,Name,SurName,Patronimyc,Age) DestTable.ID:=VarText; DestTable.Name:=VarText1; DestTable.SurName:=VarText2; DestTable.Patronimyc:=VarText3; DestTable.Age:=VarText4; А мне необходимо заполнить эти поля, скажем, универсальным способом (например через процедуру, которой я буду передавать как параметр имя поля) Т.е. хотелось бы видеть что-то в таком духе: Procedure MyChangeFieldValue(FieldName:Text); Begin [...] End; Вобщем, как, зная имя поля, присвоить ему значение? |
|
09.04.2003, 12:42 | #2 |
Участник
|
помимо имени поля тебе надо в этом случае передавать ссылку на таблицу в которую хочешь записать. В общем решение может быть следующим:
//------------определение ф-ции--------------------------------------------------------------- WriteFileld(VAR RecRef : RecordRef, FieldNo : Integer; Value : Text[30]) { FldRef := RecRef.FIELD(FieldNo); FldRef.VALUE := Value; //локальная переменная типа FieldRef RecRef.MODIFY; //ссылка на таблицу куда пишем //либо для вставки новой записи: // FldRef := RecRef.FIELD(FieldNo); // RecRef.INIT; // FldRef.VALUE := Value; // RecRef.INSERT; } //---------------пример вызова------------------------------------------------------------------- DestTable.FIND('-'); RecRef.GETTABLE(DestTable); //RecRef - переменная типа RecordRef WriteFileld(RecRef, DestTable.FIELDNO(SurName), VarText2); //номер поля также можно узнать из таблицы Field //в данном случае WriteFileld запишет значение в уже существующую запись(первую) //-------------------------------------------------------------------------------------------------------- НО естественно перед присваиванием полю значения необходимо знать тип этого поля -то есть перед FldRef.VALUE := Value необходимо проанализировать тип поля. Это можно сделать заюзав таблицу Field по ключу таблицы куда ты пишешь значение пример: Field.TableNo := TableNo; Field."No," := FieldNo; //либо Field.FieldName := FieldName; IF Field.FIND('-') THEN CASE Field.Type OF Field.Type::Code : BEGIN ........//........в зависимости от типа делать преобразование END; -----//------- END вот в общем и весь подход. |
|
10.04.2003, 09:46 | #3 |
Участник
|
Цитата:
WriteFileld(VAR RecRef : RecordRef, FieldNo : Integer; Value : Text[30])
А то у меня не получается заставить работать вот это Цитата:
FldRef := RecRef.FIELD(FieldNo);
|
|
10.04.2003, 12:20 | #4 |
Участник
|
переменная RecRef это переменная типа RecordRef ( ссылка на таблицу причем любую ).
как делать (в редакторе C/AL): 1. заходишь в локальные переменные функции WriteField (Вид->C/AL Locals) 2. пишешь наименование ентой самой новой переменной в поле Name; в поле DataType выбираешь RecordRef Далее 3. Точно также объявляешь переменную RecRef в функции откуда будешь юзать WriteField. 4. перед вызовом функции WriteField присваиваешь переменой RecRef ссылку на нужную таблицу - в нашем случае на DestTable. Делается енто следующей строкой кода: RecRef.GETTABLE(DestTable); 5. Далее передаешь ету переменную (RecRef) в WriteField: WriteFileld(RecRef, DestTable.FIELDNO(SurName), VarText2); Я сделал форму со всем о чем тебе написал(но без анализа типа поля и естественно облегченный вариант). Она в аттаче. правила пользования фичей: 1. запускаешь форму 2. в текстовом поле вводишь значение 3. жмакаешь княпу. 4. лицезреешь результат вместе с бабушкой в таблице по нажатию княпы заменяется значение поля Description таблицы Item Ledger Entry(нравится она мне) для первой записи. таблица Item Ledger Entry перед запуском должна иметь хоть одну запись иначе выдаст ошибку на FIND('-') |
|
10.04.2003, 12:31 | #5 |
Участник
|
Это все для аксапты?
ЫЫыыыыы У меня аттэйн. (У меня нет типа RecordRef и fob не открывается.) Вопрос в догонку. А на аттэйне это реально? Хотя нет. fob не открывался на редактирование. А просто запуск - прошел. При нажатии на кнопку получаю собщение, что моя програмная лицензия не рулит с каким-то типом данных (наверное ругается на RecordRef). Это значит именно то, что значит, или я чего-то не понимаю? |
|
10.04.2003, 12:37 | #6 |
Участник
|
нет это для attain.
но у меня версия 3.60 - для нее работает. если у тебя 3.10 и ниже то в нем нет этих типов(RecordRef и FieldRef) - соответственно не будет ничего даже грузиться |
|
10.04.2003, 12:41 | #7 |
Участник
|
Всеравно очень благодарен. Спасибо.
Бум тянуться к 3.60 ;-) |
|
10.04.2003, 12:55 | #8 |
Участник
|
Всеравно очень благодарен. Спасибо.
Бум тянуться к 3.60 ;-) |
|
|
Похожие темы | ||||
Тема | Ответов | |||
получить значение фильтра | 2 | |||
Имя сервера | 3 | |||
поле «Свернут. Пр. Мощ. Себест.» в таблице «Товар» | 1 | |||
Получить значение из формы | 1 | |||
поле OptionString | 2 |
|