Delphi 将字符串传递给DBLookupComboBox

Delphi 将字符串传递给DBLookupComboBox,delphi,delphi-xe6,Delphi,Delphi Xe6,在Delphi XE6中将字符串传递给DBLookupComboBox时,我遇到访问冲突。BusName是一个字符串,包含来自订单表单的公司名称。我使用的控件是否正确 下面是关于DBLookupComboBox设置的一些信息 KeyField称为CustID ListField被称为CompanyName ListSource被称为CustNames CustNameDBLCBox.Field.AsString:= OrdersForm.BusName; 不确定我遗漏了什么?一个DBLooku

在Delphi XE6中将字符串传递给DBLookupComboBox时,我遇到访问冲突。
BusName
是一个字符串,包含来自订单表单的公司名称。我使用的控件是否正确

下面是关于DBLookupComboBox设置的一些信息

KeyField
称为
CustID
ListField
被称为
CompanyName
ListSource
被称为
CustNames

CustNameDBLCBox.Field.AsString:= OrdersForm.BusName;

不确定我遗漏了什么?

一个
DBLookupCombobox
可以用于两个不同的目的。
通常会分配
数据源
数据字段
,以使用它更改/显示一个数据字段的字段以及LookUpdateSet中的数据。
DBLookupCombobox中的每个手动更改都会将数据字段设置为键字段的值,并且通过Datasource绑定的数据集中的任何更改都会使用ListSource定义的数据集中的键字段找到的Listfield值更改显示的值

DBLookupCombobox的另一种用法是在不绑定Datasource/Datafield的情况下使用它,仅用于选择一个值,并使用Keyvalue或文本进行进一步的工作

TL;DR
以下是两个可能导致访问冲突的原因:

  • OrdersForm不再分配(可能在关闭时释放)
  • 您没有分配数据源/数据字段,但正在尝试设置
    CustNameDBLCBox.Field.AsString:=
    这将导致您所描述的访问冲突,因为未分配字段:
    属性字段:TField read FDataField
    如果您要分配数据源/数据字段,则可能会出现一个错误,指向数据字段的无效值,例如整数字符串,但不是访问冲突 要更改显示的值,您必须更改KeyValue:

      if CustNameDBLCBox.ListSource.DataSet.Locate(CustNameDBLCBox.ListField, OrdersForm.BusName ,[]) then
          CustNameDBLCBox.KeyValue := CustNameDBLCBox.ListSource.DataSet.FieldByName(CustNameDBLCBox.KeyField).Value;
    

    更新:在客户订单上,向调用者报价订单估算时。当来电者说他们想安排订单时,用户单击订单按钮,该按钮获取一些数据(即客户姓名、地址信息),关闭表单,然后打开新的服务表单以下订单。这里有一个DBLookupComboBox。因为我们已经从客户订单中知道了客户名称,所以我希望该名称出现在DBLookupComboBox中。因此,我将来自Orders表单的BusName(字符串-公司名称)传递给DBLookupComboBox。是这样做的吗?