首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

能否通过循环给变量赋值呢?该怎么解决

2012-04-19 
能否通过循环给变量赋值呢?能否通过循环给变量赋值呢?将变量名和变量值存储在一个表中,例如tableA 有两个

能否通过循环给变量赋值呢?
能否通过循环给变量赋值呢?
将变量名和变量值存储在一个表中,例如tableA 有两个字段 fieldA用来存储变量名,fieldB用来存储变量值。
假定表中存储的所有变量的类型均为string类型。
赋值时执行如下语句

Delphi(Pascal) code
while not adoquery1.eof dobegin  转换为变量(adoquery1.fieldbyname('fieldA').asstring):=adoquery1.fieldbyname('fieldB').asstring;  adoquery1.next;end;


[解决办法]
字符串"转换"成类名是经常用,字符串转换成变量还真没见识过,个人感觉应该不行。坐等高手!
[解决办法]
把变量名和变量值都存在一个对象里不就可以了吗
[解决办法]
Delphi(Pascal) code
var  L: TStrings;//最后注意L的释放procedure SetStr(const Key,Value: string);var  I: Integer;begin  if not Assigned(L) then L := TStringList.Create;  I := L.IndexOfName(Key);  if I = -1  then//不存在此变量    L.Add(Key+'='+Value)  else//存在    L.ValueFromIndex[I] := Valueend;function GetStr(const Key: string): string;var  I: Integer;begin  Assert(Assigned(L), 'L is not created!');  I := L.IndexOfName(Key);  if I = -1 then//不存在此变量    Result := ''  else//存在    Result := L.ValueFromIndex[I]end;procedure TForm1.FormCreate(Sender: TObject);begin  SetStr('var1', '1aaaaaaaaa');  SetStr('var2', '2aaaaaaaaa');  ShowMessage(GetStr('var1'));  ShowMessage(GetStr('var2'));  SetStr('var1', '1abc');  ShowMessage(GetStr('var1'));end;
[解决办法]
探讨
楼上的,你这也是一个变量一个变量赋值吧?

[解决办法]
这个要脚本来做吧
看看FastScript,对你应该有帮助
[解决办法]
既然保存在表中,不如直接保存成ini文件,比如这样的格式,绕过赋值,直接就取出来使用了

[Integer]
a=1
b=2
[String]
a='AA'
b='BB'

[解决办法]
不太明白意思,循环给变量1赋值为变量2?看3楼的是直接建立一个键值对,确立变量的关系,然后赋值。楼主又说记不住那么多配置信息的名称?
[解决办法]
如果是INI的话,自己可以写一个简单的不可视控件,通过其属性专门保存这些变量的值。像DEV和EHILB有专门保存属性的控件,这样读取INI都不用写代码就可以实现了。
[解决办法]
Form1.CAPTIN,Form1.Hint 这些配置信息保存都INI,不是同样调用么。

ehlib组件:
PropStorageEh1.SaveProperties;//保存信息
PropStorageEh1.LoadProperties;//加载信息
然后你程序的值就可以显示在相应的控件属性中了。

[解决办法]
为啥要记住名称?如果名称是不变的,则定义为常量,如果是可变的,则需要另外一个字段来关联他们的关系
[解决办法]
变量及参数必须使用才使用的,
否则会影响“内存”的使用率的
[解决办法]
设计有问题吧?
这种应用……
直接读写 TStringList 不可以吗?
利用其 Name & Value

或者,变量用数组(record数组,带上 VarName)。
填充和获取的时候遍历一下,找到确切的那个 record。
不知道这样描述是否清楚?
[解决办法]
seleron
?(旺旺贝贝)?
呵呵,那必须在运行程序先“初始化”吧


[解决办法]
这个样子呀,你可以将那个“初始化变量”写成一个DLL吧,
这样引用起来时方便的
[解决办法]
探讨
这个样子呀,你可以将那个“初始化变量”写成一个DLL吧,
这样引用起来时方便的

[解决办法]
这样可以活用“内存”空间的
[解决办法]
探讨
引用:
这个样子呀,你可以将那个“初始化变量”写成一个DLL吧,
这样引用起来时方便的



意思是把变量的声明和初始化放在dll中?这样,对变量的初始化话语句也跟原来一样吧?


[解决办法]
探讨
声明这么多常量会不会影响内存呢?

[解决办法]
定义一个数组,变量有一定的顺序,读取的记录也有一定的顺序。2个顺序匹配。这个就可以用循环读值。
[解决办法]
探讨
能否通过循环给变量赋值呢?
将变量名和变量值存储在一个表中,例如tableA 有两个字段 fieldA用来存储变量名,fieldB用来存储变量值。
假定表中存储的所有变量的类型均为string类型。
赋值时执行如下语句

Delphi(Pascal) code

while not adoquery1.eof do
begin
转换为变量(adoquery1.fieldbyn……

[解决办法]
一开始不太明白你的意思
用delphi的RTTI技术,写一个TComponent的子类,把成员变量在published部分声明为property,然后通过如下方式给每个属性赋值
Delphi(Pascal) code
procedure LoadPropValues(query: TADOQuery; obj: TComponent);var  i, nCount: Integer;  PropList: PPropList;  PropName:string;  Field :TField;begin  ncount := GetTypeData(obj.ClassInfo).PropCount;  GetPropList(obj.ClassInfo,PropList);  try    for i := 0 to ncount - 1 do    begin      PropName := PropList[I]^.Name;      Field := query.FindField(PropName);      if Assigned(Field)  then      begin        case  (PropList[I]^.PropType)^.Kind  of          tkInteger,tkInt64:            SetOrdProp(obj,PropName,Field.AsInteger);          tkString, tkWChar,tkLString:            SetStrProp(obj,PropName,Field.AsString);          tkWString:            SetWideStrProp(obj,PropName,Field.AsWideString);        end;      end;    end;  finally    FreeMem(PropList);  end;end;
[解决办法]
这里是一个类的实例保存一条记录的数据,你可以根据实际情况进行修改
[解决办法]
这里是根据字段名,而你需要的是根据其中某个字段的值,来判断对应关系
[解决办法]
可以,没有问题
[解决办法]
呵呵,结帖子给分吧

[解决办法]
何必这么辛苦?将这些东东整合到一个对象里,然后将对象持久化到数据库,用时再恢复就可以了。这个做法更通用。
[解决办法]
探讨

整理了一下,批量初始化配置信息类的所有属性的方法LoadPropValues如下
大家还有什么不同意见呢?
Delphi(Pascal) code

procedure LoadPropValues(query: TADOQuery; obj: TComponent);
var
PropInfo:PPropInfo;
PropName:string;
begin
try
……

[解决办法]
引用:

如果使用xml来存储这些配置信息的话,
1.是否便于用户修改配置值呢?
2.写代码时是否能够自动列出配置项目供程序员快速调用呢?

1.这个取决于你怎么管理配置文件了,你要是有专门的配置界面、配置向导,自然就很方便。而且写起来也不难,都是字符处理。如果你的用户足够专业,也许他们会利用文本工具更改简单的变化了,xml就是一个文本,编辑他很容易的。
2.写代码时候列出配置项这个没考虑过,不过应该很容易吧,把文本工具窗口打开,用alt+tab就可以来回观看了——我是这么看的,说实话,我不是给别人写的,没考虑过,呵呵。

[解决办法]
根据楼主的想法,可以看出楼主的配置项是固定的,但是很多,用我上面说的方式确实很方便
如果是配置项不是固定的,是动态的,则不能用这种方式
[解决办法]
好厉害,过来学习了。。
[解决办法]
探讨
引用:
根据楼主的想法,可以看出楼主的配置项是固定的,但是很多,用我上面说的方式确实很方便
如果是配置项不是固定的,是动态的,则不能用这种方式

是的,
编译exe后,配置项目的数目就固定了。
但是,开发的时候或代码升级的时候,配置项的数目会增加。

[解决办法]
seleron
(旺旺贝贝)?
我还是建议你将 变量及值编写成DLL,
这样可以加强数据的“保密”性的
接分中.........

------解决方案--------------------


动态配置的话,还是用xml来完成比较好:
如果客户修改的话,一样的,你把xml加载进来,根据自己定义的节点信息,获取节点值,节点信息就能转换用户能看懂的信息,同时还可以在客户配置时,加一些检核限制条件,客户修改完成后,保存到xml中,感觉效果和操作都是比较方便的,这也是xml大行其道的原因之一,非常灵活

热点排行