如何在Delphi中更改DBLookupComboBox值?

时间:2015-01-31 18:50:10

标签: database delphi combobox

我正在尝试使用以下命令更改DBLookupComboBox的可见文本(值):

DBLookupComboBox1.KeyValue:=S;

DBLookupComboBox2.KeyValue:=X;

如果KeyValue和S是字符串,那么一切正常,我可以设置值。

但是当KeyValue是一个整数/ Int64(数据库中的UID),而X是一个Int64变量时 - 它不起作用,没有任何变化。

因此,举个例子,我需要在DBLookupComboBox1中设置“Amsterdam”,在DBLookupComboBox2中设置1500。 “阿姆斯特丹”来自“城市”领域的用户,以及1500作为UID。

我做错了什么?

由于

3 个答案:

答案 0 :(得分:1)

设置KeyValue会调用TDBLookupControl的SetKeyValue,它在Delphi 7中显示为:

procedure TDBLookupControl.SetKeyValue(const Value: Variant);
begin
  if not VarEquals(FKeyValue, Value) then
  begin
    FKeyValue := Value;
    KeyValueChanged;
  end;
end;

procedure TDBLookupComboBox.KeyValueChanged;
begin
  if FLookupMode then
  begin
    FText := FDataField.DisplayText;
    FAlignment := FDataField.Alignment;
  end else
  if ListActive and LocateKey then
  begin
    FText := FListField.DisplayText;
    FAlignment := FListField.Alignment;
  end else
  begin
    FText := '';
    FAlignment := taLeftJustify;
  end;
  Invalidate;
end;

如您所见,您的变量x用作LocateKey的一部分。

function TDBLookupControl.LocateKey: Boolean;
var
  KeySave: Variant;
begin
  Result := False;
  try
    KeySave := FKeyValue;
    if not VarIsNull(FKeyValue) and FListLink.DataSet.Active and
      FListLink.DataSet.Locate(FKeyFieldName, FKeyValue, []) then // << ---here
    begin
      Result := True;
      FKeyValue := KeySave;
    end;
  except
  end;
end;

进入这些程序和功能应该可以帮助您调试问题。所有这些都位于DbCtrls单元..

答案 1 :(得分:1)

我已经使用了它并解决了我的问题。

Form1.OnShow使用以下代码行:

DBLookupComboBox1.ListSource.DataSet.Locate('City', 'Amsterdam', []);
DBLookupComboBox1.ListSource.DataSet.FieldByName(DBLookupComboBox1.KeyField).Value;


DBLookupComboBox2.ListSource.DataSet.Locate('UID', '1500', []);
DBLookupComboBox2.ListSource.DataSet.FieldByName(DBLookupComboBox2.KeyField).Value;

答案 2 :(得分:0)

此代码对您很重要:

lkcbbArzSource.KeyValue:=2;//c(or another number);

lkcbbArzSourcedbLookupComboBox对象,您只能在其中插入数字!为什么?因为是数字,而另一方面是一个字段,以组合形式显示该数字的文本或字符串。

在下面的示例代码中,您可以看到dbLookupComboBox如何管理和填充数据集并添加网格:

rzSource.Enabled:= True;
lkcbbArzSource.Font.Size:=8;
lkcbbArzSource.Tag := V_Counter;
lkcbbArzSource.Visible:= True;
lkcbbArzSource.Enabled:= True;
lkcbbArzSource.Font.Name:='tahoma';
lkcbbArzSource.ListSource := myDsrSource;
lkcbbArzSource.KeyField := 'Code';
lkcbbArzSource.ListField := 'Des';
lkcbbArzSource.KeyValue:=  IntToStr(FieldByName('P_ARZSOURCE').AsInteger);
lkcbbArzSource.OnChange := myBicLookUpChange;
SGrid2.Objects[look_col,lkcbbArzSource.Tag]:= lkcbbArzSource;
SGRID2.Objects[look_col,V_Counter] := nil;c