大
大胃王
Unregistered / Unconfirmed
GUEST, unregistred user!
问题是来由是:
我想使用一个ComboBox控件,
在ComboBox中显示的可选项(ComboBox.Items.Strings)来自某个表的一个字段
(比如称之为field_caption)。
同时,我希望通过ComboBox获取而记录的数据来自表的另一个字段
(比如称之为field_id)。
filed_caption是应该赋值给ComboBox.Items.Strings的,这大概没问题。
但如何获取而记录field_id数据呢?
我目前的考虑:
ComboBox中的Objects属性是可以利用的。
但是,如何把TField对象赋值给Objects呢?
遇到的问题:
有网友(抱歉,忘记名字了)建议使用ComboBox.AddObject方法。
但是:
方法一
while not ADODataSet.Eof do
begin
ComboBox.AddObject(ADODataSet.FieldByName(field_caption).AsString,ADODataSet.FieldByName(field_id));
ADODataSet.Next;
end
这样的话,
实际上,
ADODataSet每次Next以后,由FieldByName返回的TField对象包含的值变化了,
但对象的内存位置并没有变,
也就是说,最终,所有的Objects对象将指向同一地址,
返回的是ADODataSet中最后一条记录的字段值。
方法二
type
PField = ^TField;
var
ptrTemp : PField;
......
while not ADODataSet.Eof do
begin
ptrTemp := new(TField);
ptrTemp^ := ADODataSet.FieldByName(field_id);
ComboBox.AddObject(ADODataSet.FieldByName(field_caption).AsString,ptrTemp^);
ADODataSet.Next;
end
其结果也是一样的,
好像new(TField)只是new出一个32位的指针来,
而没有生成新的对象。
方法三
把上例中的相应语句改成:
ptrTemp := new(TField);
ptrTemp^ := TField.Creat(self);
ptrTemp^.Assign(ADODataSet.FieldByName(field_id));
则发生异常:EDatabaseError--Cannot access field
求救:
到此为止,没办法了,就这么点本事。
我该怎么解决这个问题,
敬请指教。
本来问过一次的,已经有一位网友回答了,但好像没有完全解决问题。
换了服务器,好像问题没了,只好再问一次了。
大富翁这么厉害的地方,可千万不能让我失望啊!
我想使用一个ComboBox控件,
在ComboBox中显示的可选项(ComboBox.Items.Strings)来自某个表的一个字段
(比如称之为field_caption)。
同时,我希望通过ComboBox获取而记录的数据来自表的另一个字段
(比如称之为field_id)。
filed_caption是应该赋值给ComboBox.Items.Strings的,这大概没问题。
但如何获取而记录field_id数据呢?
我目前的考虑:
ComboBox中的Objects属性是可以利用的。
但是,如何把TField对象赋值给Objects呢?
遇到的问题:
有网友(抱歉,忘记名字了)建议使用ComboBox.AddObject方法。
但是:
方法一
while not ADODataSet.Eof do
begin
ComboBox.AddObject(ADODataSet.FieldByName(field_caption).AsString,ADODataSet.FieldByName(field_id));
ADODataSet.Next;
end
这样的话,
实际上,
ADODataSet每次Next以后,由FieldByName返回的TField对象包含的值变化了,
但对象的内存位置并没有变,
也就是说,最终,所有的Objects对象将指向同一地址,
返回的是ADODataSet中最后一条记录的字段值。
方法二
type
PField = ^TField;
var
ptrTemp : PField;
......
while not ADODataSet.Eof do
begin
ptrTemp := new(TField);
ptrTemp^ := ADODataSet.FieldByName(field_id);
ComboBox.AddObject(ADODataSet.FieldByName(field_caption).AsString,ptrTemp^);
ADODataSet.Next;
end
其结果也是一样的,
好像new(TField)只是new出一个32位的指针来,
而没有生成新的对象。
方法三
把上例中的相应语句改成:
ptrTemp := new(TField);
ptrTemp^ := TField.Creat(self);
ptrTemp^.Assign(ADODataSet.FieldByName(field_id));
则发生异常:EDatabaseError--Cannot access field
求救:
到此为止,没办法了,就这么点本事。
我该怎么解决这个问题,
敬请指教。
本来问过一次的,已经有一位网友回答了,但好像没有完全解决问题。
换了服务器,好像问题没了,只好再问一次了。
大富翁这么厉害的地方,可千万不能让我失望啊!