【问题标题】:Passing a string to a DBLookupComboBox将字符串传递给 DBLookupComboBox
【发布时间】:2014-10-22 21:52:42
【问题描述】:

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

这里有一些关于 DBLookupComboBox 设置的信息。

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

CustNameDBLCBox.Field.AsString:= OrdersForm.BusName;

不确定我错过了什么?

【问题讨论】:

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

标签: delphi delphi-xe6


【解决方案1】:

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

DBLookupCombobox 的另一种用法是在不绑定数据源/数据字段的情况下使用它,仅用于选择值并使用键值或文本进行进一步工作。

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

  1. OrdersForm 不再分配(可能在关闭时释放)
  2. 您没有分配数据源/数据字段,但您正在尝试设置 CustNameDBLCBox.Field.AsString := <sometext> 这将导致您所描述的访问冲突,因为未分配字段:property Field: TField read FDataField;
    如果您分配了 Datasource / Datafield,您可能会遇到指向 Datafield 的无效值的错误,例如 Integer String,但不是访问冲突。

要更改显示的值,您必须更改 KeyValue:

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

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2020-04-08
    • 2016-06-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多