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

Delphi从SQL数据库填充组合框项,delphi,delphi-7,Delphi,Delphi 7,我想用SQL数据库中的数据填充组合框,但它不起作用。我的查询与数据库有连接,查询SQL属性字段是select*from provider\u 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.Ad

我想用SQL数据库中的数据填充组合框,但它不起作用。我的查询与数据库有连接,查询SQL属性字段是
select*from provider\u 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;

有人有主意吗?谢谢你的回答

这与其说是关于组合框,不如说是关于您是否从查询中返回了任何内容。首先要做的是确保查询正常工作。我首先在表单上放置一个TMemo或TList,并处理查询,直到它返回您期望的数据

或者,在表单上删除一个DB感知组件,并将其挂接到TSqlQuery组件,以验证您得到的结果集是否为非空

“Select*from provider_table”很可能返回项目,但示例中的查询要具体得多,它可能不会返回任何内容

一旦你确认你得到了一个非空的结果集,然后填充组合框

确保其样式属性设置为“下拉列表”,以便用户只能从返回的项目中进行选择

此外,FWIW,从数据库查询中放入组合框的项目列表通常是来自另一个表的外键列表,而不是您正在处理的。因此,一个允许外键选择填充它的DB组合框是比您使用的方法更好的方法。您在对象检查器中设置了两个属性,当表单加载时,对象检查器会自动填充


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

这就是您想要的吗

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;

尝试ComboBox1.Items.Add(Query1.FieldByName['name'].AsString);“不工作”到底意味着什么?我更喜欢使用一个常规的
TComboBox
,我用
名称
值填充
项目
,并将
值放入每个项目的
对象
属性中(将
整数
转换为
对象
)。当用户选择一个项目时,我只需将它的对象键入一个整数,就得到了它的键值。到目前为止工作得很好。如果您想让我用代码片段添加答案,请告诉我,我回家后会这样做。这在Delphi 7中不起作用,因为它没有FireDAC,因此没有TFDQuery。(Delphi 7的TComboBox也没有AddItem方法。)那么,让查询为TSQLQuery,方法组合为.Items.Add(Q.Fields.Fields[0].AsString)不要告诉我;你的答案,并在可以看到的地方提供这些信息。(供将来参考:阅读问题并查看此处的标签很重要,因为准确性和相关性很重要。与问题不合适或不相关的答案通常会很快被否决。)