【问题标题】:DELPHI Fill a listbox with the results of ADO QueryDELPHI 用 ADO 查询的结果填充列表框
【发布时间】:2015-01-28 22:29:44
【问题描述】:

一直在阅读所有相关主题,但没有发布任何解决方案来帮助我使用 Delphi。

很简单,我有一个名为 Story 的 MySQL 表,我想从中提取特定字段 - 从而填充列表框。

从其他帖子中,我使用了以下...

adoqMenu.Close;
adoqMenu.SQL.Text := 'SELECT StoryID, Story Description, Completion Date FROM Story';
try
  adoqMenu.Open;
  ListBox1.Items.Clear;
  while not adoqMenu.Eof do
  begin
    ListBox1.Items.Add(adoqMenu.Fields[0].AsString);
    adoqMenu.Next;
  end;
finally
  adoqMenu.Close;
end;

这只会给我第一个字段...grr。很简单,我怎样才能改变这一点,以便 SELECT 子句中的字段按原样显示在列表框中?

谢谢

【问题讨论】:

    标签: mysql delphi ado


    【解决方案1】:

    您只看到一个字段,因为您只读出一个字段 (adoqMenu.Fields[0])。只需读出其他字段:

    adoqMenu.Close;
    adoqMenu.SQL.Text := 'SELECT StoryID, Story Description, Completion Date FROM Story';
    adoqMenu.Open;
    try
      ListBox1.Items.Clear;
    
      while not adoqMenu.Eof do
      begin
        Value1 := adoqMenu.Fields[0].AsString;
        Value2 := adoqMenu.Fields[1].AsString;
        Value3 := adoqMenu.Fields[2].AsString;
    
        // use Values as needed.  Format the ListBox text however
        // you want to show all three values...
        ListBox1.Items.Add(...);
    
        adoqMenu.Next;
      end;
    finally
      adoqMenu.Close;
    end;
    

    根据您的实际需求(您没有解释),vsReport 模式下的多列TListView 可能比TListBox 更好的选择:

    adoqMenu.Close;
    adoqMenu.SQL.Text := 'SELECT StoryID, Story Description, Completion Date FROM Story';
    adoqMenu.Open;
    try
      ListView1.Items.Clear;
    
      while not adoqMenu.Eof do
      begin
        Item := ListView1.Items.Add;
        Item.Caption := adoqMenu.Fields[0].AsString;
        Item.SubItems.Add(adoqMenu.Fields[1].AsString);
        Item.SubItems.Add(adoqMenu.Fields[2].AsString);
        adoqMenu.Next;
      end;
    finally
      adoqMenu.Close;
    end;
    

    【讨论】:

    • 在您的第一个答案中...我在 listbox1.items.add(...) 中放了什么?我尝试了 listbox1.items.add(value1,value2,value3) 但出现“超出范围”错误?
    • @user3396486 您可以使用ListBox1.Items.Add(Value1+Value2+Value3) 连接字符串,但您在评论中写的内容不会导致越界错误。事实上,它甚至不会编译。
    • 是的,它不能编译。我的 SQL 查询应该返回以下结果: 1, Peter & Jane, 12/1/2015; 2,一个男孩的故事,25/4/2012; 3,“害怕的狐狸”,2015 年 1 月 23 日; ...我只是想在列表框中显示它。
    • @user3396486:正如我所说,您可以随意格式化字符串,ListBox 不在乎。例如:ListBox1.Items.Add(Format('%s, %s, %s', [Value1, Value2, Value3]));
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多