我想用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;
有没有人有想法?谢谢你的答案!
答案 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时,并非所有组合框都相同!)