在将字符串传递给Delphi XE6中的DBLookupComboBox时,我收到了访问冲突。 BusName
是一个字符串,其中包含来自订单表单的公司名称。我是否使用了正确的控件?
这里有一些关于DBLookupComboBox设置的信息。
KeyField
被称为CustID
ListField
被称为CompanyName
ListSource
被称为CustNames
CustNameDBLCBox.Field.AsString:= OrdersForm.BusName;
不确定我错过了什么?
答案 0 :(得分:0)
DBLookupCombobox
可用于两个不同的目的
通常会分配Datasource
和Datafield
来使用它来更改/显示一个数据字段的字段和来自lookupdataset的数据。
DBLookupCombobox中的每个手动更改都会将Datafield设置为KeyField的值,并且通过Datasource绑定的数据集中的任何更改都将使用ListSource定义的数据集中KeyField找到的Listfield值更改显示的值。
DBLookupCombobox的另一个用法是使用它而不绑定Datasource / Datafield只是为了选择一个Value并使用Keyvalue或Text进行进一步的工作。
<强> TL; DR 强>
以下是导致访问冲突的两个原因:
CustNameDBLCBox.Field.AsString := <sometext>
会导致您所描述的访问冲突,因为未指定字段:property Field: TField read FDataField;
要更改显示的值,您必须更改KeyValue:
if CustNameDBLCBox.ListSource.DataSet.Locate(CustNameDBLCBox.ListField, OrdersForm.BusName ,[]) then
CustNameDBLCBox.KeyValue := CustNameDBLCBox.ListSource.DataSet.FieldByName(CustNameDBLCBox.KeyField).Value;