Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращению к поле структуры по string переменной 
:(
    Опции темы
hug
Дата 2.8.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



есть структурка:
Код



type
PMyRec = ^TMyRec;
TMyRec = record
  id_firm: string;
  id_pok: string;
  id_order : string;
end;



Вот как мне в эту структурку прочитать данные. Если известны имена которые нужны читать
Код

SQLParams : array[1..3] of string

SQLParams[1]:='id_firm'
SQLParams[2]:='id_pok'
SQLParams[3]:='id_order'

for i:=1 to NumSQLParams do
             SQLParamsValue[i]:=PMyRec(Node.Data)^.id_firm;


Мне необходимо считывать значение параметром из структуры, обращаясь к поле структуры по имени
Код

or i:=1 to NumSQLParams do
             SQLParamsValue[i]:=PMyRec(Node.Data)^.SQLParams[i];


Вот примерно чтобы хотелось сделать. Как превратить в рабочий код
PM MAIL   Вверх
aktuba
Дата 2.8.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Никак!!!


--------------------
user posted image
PM MAIL WWW Skype   Вверх
hug
Дата 2.8.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



ок как обращаться к переменным не напрямую, а как к строчным значениям?
PM MAIL   Вверх
Grigory
Дата 2.8.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.7.2006
Где: Москва

Репутация: нет
Всего: нет



Цитата(hug @ 2.8.2007,  12:58)
ок как обращаться к переменным не напрямую, а как к строчным значениям?

Ну там все достаточно просто  smile  Время будет напишу. Хочеься даже сказать учите мат.часть  smile 
PM MAIL   Вверх
hug
Дата 2.8.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



Жду время)
PM MAIL   Вверх
MetalFan
Дата 2.8.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Grigory, не городи ерунды. сказано - нет возможности обращаться к переменным по их строковым псевдонимам во время выполнения программы

т.е. нельзя написать так:
Код

var
  lParam1,
  lParam2: integer;
...
  'lParam1' := 10
...


разве что к published св-вам класса

Это сообщение отредактировал(а) MetalFan - 2.8.2007, 15:32


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
EvilsInterrupt
Дата 2.8.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



hug
Извините, но я так и не понял зачем это вам так нада? Никакой гибкости от этого не получите, а вот изврату очень даже получите!

Опишите, что вы хотите решить или чем упростить себе жизнь хотите, быть может вы получите более лучшее решение чем вы хотели бы, а это ведь всегда приятно!
PM MAIL WWW ICQ Jabber   Вверх
hug
Дата 2.8.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



Цитата(MetalFan @ 2.8.2007,  15:30)
Grigory, не городи ерунды. сказано - нет возможности обращаться к переменным по их строковым псевдонимам во время выполнения программы

т.е. нельзя написать так:
Код

var
  lParam1,
  lParam2: integer;
...
  'lParam1' := 10
...


разве что к published св-вам класса

Расскажите как обращаться к publushed полям класса по имени
PM MAIL   Вверх
EvilsInterrupt
Дата 2.8.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



hug, Почитай в Ксавье Пачеко "Delphi 5 для разработчика", том 2 про свойства-массивы.
Это тебе очень многое даст или наведет на мысль к примеру:

objOfDB.FieldValues['ID_Param']; - видел наверное при работе с базами,это свойство-массив

при работе с TjanXmlParser2:

edParamId.Text    := XmlParam.attribute['ID'];

Тоже свойство-массив
PM MAIL WWW ICQ Jabber   Вверх
Alexeis
Дата 2.8.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(hug @  2.8.2007,  19:35 Найти цитируемый пост)
Расскажите как обращаться к publushed полям класса по имени 

  Это возможности так называемой RTTI - информации о типах времени исполнения. В делфи для обращения к свойствам по их строковому имени используется встроенный модуль TypInfo.pas. Достаточно его открыть и не нужна никакая справка, там очень звучные названия функций. Типа GetPropList и т.д.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 3.8.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(EvilsInterrupt @  2.8.2007,  19:48 Найти цитируемый пост)
Тоже свойство-массив 

бред. у ObjectPascal'евсого массива не может быть строкового индекса) там просто св-во с параметром (псевдомассив чтоли)...



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
EvilsInterrupt
Дата 3.8.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



MetalFan, Это есть! Называется оно "свойство-массив". Внизу в коде видишь property Coordinates[Index: Integer], вот это и есть свойство-массив! Позволяет не только принимать Integer, но также можно принять strings, как это сделано в FieldValues при работе с TOraQuery, да и не только с ним

по теме:
Цитата

Index Specifiers 
Index specifiers allow several properties to share the same access method while representing different values. An index specifier consists of the directive index followed by an integer constant between -2147483647 and 2147483647. If a property has an index specifier, its read and write specifiers must list methods rather than fields. For example,

Код

type 
   TRectangle = class 
     private 
       FCoordinates: array[0..3] of Longint; 
       function GetCoordinate(Index: Integer): Longint; 
       procedure SetCoordinate(Index: Integer; Value: Longint); 
     public 
       property Left: Longint index 0 read GetCoordinate write SetCoordinate; 
       property Top: Longint index 1 read GetCoordinate write SetCoordinate; 
       property Right: Longint index 2 read GetCoordinate write SetCoordinate; 
       property Bottom: Longint index 3 read GetCoordinate write SetCoordinate; 
       property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate; 
       ... 
   end;


и это есть в справке!!!

зы:
Правда пока я это нашел в справке от BDS2006 Architect я мозк убил ((( Но оно же есть! )))

Это сообщение отредактировал(а) EvilsInterrupt - 3.8.2007, 12:41
PM MAIL WWW ICQ Jabber   Вверх
aktuba
Дата 3.8.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

Правда пока я это нашел в справке от BDS2006 Architect я мозк убил ((( Но оно же есть! )))


А где в примере строки???


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MetalFan
Дата 3.8.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(EvilsInterrupt @  3.8.2007,  12:38 Найти цитируемый пост)
ndex Specifiers 

это из другой оперы. данная возможность позволяет н-ким свойствам "обслуживаться" одной функцией.

согласен. внешне свойство-массив выглядит как массив. в т.ч. со строкой в качестве "индекса".
выдержка по теме:
Цитата(Delphi Help)

Array properties are indexed properties. They can represent things like items in a list, child controls of a control, and pixels of a bitmap.

The declaration of an array property includes a parameter list that specifies the names and types of the indexes. For example,

Код

property Objects[Index: Integer]: TObject read GetObject write SetObject;
property Pixels[X, Y: Integer]: TColor read GetPixel write SetPixel;
property Values[const Name: string]: string read GetValue write SetValue;


The format of an index parameter list is the same as that of a procedure's or function's parameter list, except that the parameter declarations are enclosed in brackets instead of parentheses. Unlike arrays, which can use only ordinal-type indexes, array properties allow indexes of any type.

For array properties, access specifiers must list methods rather than fields. The method in a read specifier must be a function that takes the number and type of parameters listed in the property's index parameter list, in the same order, and whose result type is identical to the property's type. The method in a write specifier must be a procedure that takes the number and type of parameters listed in the property's index parameter list, in the same order, plus an additional value or const parameter of the same type as the property.

For example, the access methods for the array properties above might be declared as

Код

function GetObject(Index: Integer): TObject;
function GetPixel(X, Y: Integer): TColor;
function GetValue(const Name: string): string;
procedure SetObject(Index: Integer; Value: TObject);
procedure SetPixel(X, Y: Integer; Value: TColor);
procedure SetValue(const Name, Value: string);


An array property is accessed by indexing the property identifier. For example, the statements

Код

if Collection.Objects[0] = nil then Exit;
Canvas.Pixels[10, 20] := clRed;
Params.Values['PATH'] := 'C:\BIN'; 


correspond to

Код

if Collection.GetObject(0) = nil then Exit;
Canvas.SetPixel(10, 20, clRed);
Params.SetValue('PATH', 'C:\BIN');


см.подчеркнутый текст. это я и имел ввиду.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
EvilsInterrupt
Дата 3.8.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



aktuba, млин ))) Ща блин, покажу я вам строки smile))
у TjanXMLNode2 обладачет таким своейством:
Код

    property attribute[index:variant]: variant read getAttribute write setAttribute;default;

и вот как его применяю:
Код

    XmlParam.attribute['ID']    := edParamId.Text;
    XmlParam.attribute['Name']  := edParamName.Text;


Ну а всем известно, что Variant содержит в себе не только varInteger, но и строки!

Добавлено через 2 минуты и 7 секунд
Автору темы:
Тебе тута написали прилично, садись читать хелп и Пачеко, думаю того что написали тебе должно хватить для реализации твоих мыслей!
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1028 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.