Delphi从SQL数据库填充组合框项目

时间:2014-07-06 15:56:36

标签: delphi delphi-7

我想用SQL数据库中的数据填充我的组合框,但它不起作用。我的查询与数据库有连接,查询SQL属性字段为select * from provider_table

Query1.SQL.Clear;
Query1.SQL.Add('select name from provider_table where region_code = '+quotedstr('eng')');
Query1.Open;

while NOT Query1.Eof do begin
   ComboBox1.Items.Add(Query1['name']);
   Query1.Next;
end;

有没有人有想法?谢谢你的答案!

2 个答案:

答案 0 :(得分:2)

这是你在找什么?

procedure SelCombo(sql:ansiString;Q:TSQLQuery; var Combo:TComboBox);
var i: integer;
begin
  Q.Close;
  Q.SQL.Text:='';
  Q.Open(sql);
  Combo.Text:='';
  while not Q.Eof do begin
    Combo.Items.Add(Q.Fields.Fields[0].AsString);
    Q.Next;
  end;
  Q.Close;
end;

答案 1 :(得分:0)

对于您是否从查询中返回任何内容,对组合框的了解并不多。首先要做的是确保查询正常。我首先在表单上放置了一个TMemo或TList并弄乱了查询,直到它返回您期望的数据。

或者,在表单上删除一个支持DB的组件并将其挂钩到TSqlQuery组件,以验证您是否获得了非空的结果集。

"从provider_table"中选择*可能正在返回项目,但示例中的查询更具体,可能不会返回任何内容。

一旦您确认自己获得了非空结果集,那么请填写组合框。

确保其样式属性设置为"下拉列表"所以用户只能从退回的项目中进行选择。

此外,FWIW,从数据库查询中放入这样的组合框中的项目列表,通常是来自另一个表的外键列表,而不是您正在处理的内容。因此,允许外键选择填充的DB-combobox比您使用的方法更好。您在Object Inspector中设置了几个属性,并在表单加载时自行填充。

在这种情况下,组合框中显示的字符串也不是用作表中键或外键值的值。相反,可以使用索引(数字)。这需要一个lookup属性,其中所选项目映射到数据库表使用的另一个值。 (当使用DB时,并非所有组合框都相同!)