0

adoQuery があり、リストボックスに結果を入力したいのですが、重複はありません。

      with Fdeptlayout.ADOQuery2 do
  begin
    sql.Clear;
         sql.BeginUpdate;
         sql.Add('SELECT');
         sql.Add(' *');
         sql.Add('FROM');
         sql.Add(' `MList`');
         sql.Add(' ORDER BY `Basic Name`');
         sql.EndUpdate;

         open;
  end;

  while not fdeptlayout.ADOquery2.EOF do
    fdeptlayout.ListBox1.Items.Add(fdeptlayout.ADOQuery2['Basic Name']);
end;

現在、これによりリストボックスに 350 個の項目が追加され、多くの重複があります。これは、やりすぎ。クエリを変更して結果から重複を削除するにはどうすればよいですか? :(どんな助けでも素晴らしいでしょう!

4

2 に答える 2

6

「次へ」を忘れました。

  while not fdeptlayout.ADOquery2.EOF do begin
    fdeptlayout.ListBox1.Items.Add(fdeptlayout.ADOQuery2['Basic Name']);
    fdeptlayout.ADOquery2.Next;
  end;

次がなければ、無限ループになります。

于 2013-02-13T12:52:06.207 に答える
4

クエリを変更します。

     sql.Add('SELECT DISTINCT');
     sql.Add('  `Basic Name`');
     sql.Add('FROM');
     sql.Add(' `MList`');
     sql.Add(' ORDER BY `Basic Name`');

DISTINCT重複を除外し、必要なフィールドのみを選択することで、不要なデータを大量に取得する必要がなくなります。また、レコード内の他のフィールドが異なる可能性があり、DISTINCT が最適に機能しない原因となります。

原則として、*クエリでは使用せず、実際に必要なフィールドのみを選択してください。

[編集]

また、コメントで同意されているようFdeptlayout.ADOQuery2.Nextに、while ループ内で呼び出しを行うと、アプリケーションがロックされるのを確実に防ぐことができます。;-)

于 2013-02-13T11:49:51.450 に答える