Фильтр, при вводе слова, по многим критериям

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by minsk23, 23 Jul 2012.

  1. minsk23

    minsk23 Banned

    Joined:
    21 Jul 2012
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Требуется сделать фильтр по базе в процессе ввода текста.
    Делаю таким образом



    PHP:
    void __fastcall TForm1::ArtEd2Change(TObject *Sender)
    {
    if (
    ArtEd2->Text.Length()>0)
    {
            
    ViewUATb->Filtered false;
     
            if (
    ModEd2->Text.Length()>&& AnalEd2->Text.IsEmpty())
                    
    ViewUATb->Filter "Артикул LIKE '"  String("%") + ArtEd2->Text "%'" " and Модель LIKE '"  String("%") + ModEd2->Text "%'";
     
            if (
    ModEd2->Text.Length()>&& AnalEd2->Text.Length()>0)
                    
    ViewUATb->Filter "Артикул LIKE '"  String("%") + ArtEd2->Text "%'" " and Модель LIKE '"  String("%") + ModEd2->Text "%'" " and Аналог LIKE '"  String("%") + AnalEd2->Text "%'";
     
            if (
    ModEd2->Text.IsEmpty() && AnalEd2->Text.Length()>0)
                    
    ViewUATb->Filter "Артикул LIKE '"  String("%") + ArtEd2->Text "%'" " and Аналог LIKE '"  String("%") + AnalEd2->Text "%'";
     
            if (
    ModEd2->Text.IsEmpty() && AnalEd2->Text.IsEmpty())
                    
    ViewUATb->Filter "Артикул LIKE '"  String("%") + ArtEd2->Text "%'";
     
            
    ViewUATb->Filtered true;
    }
     

    Тут фильтр только по трем столбцам, всего их 6. Но если таким же образом делать на большее количество столбцов, то для обработки всех вариантов условий будет очень много.
    Может есть другой способ фильтрации на "лету"?
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Конечно есть. Проверяй все поля по очереди одиночными условиями. Если какое-то поле непустое, просто добавляй к строке ViewUATb->Filter новый фильтр, типа

    ViewUATb->Filter += " AND ... LIKE ...";

    Если строка ViewUATb->Filter пустая, то "AND" добавлять не надо.

    Отличное название +)
     
  3. minsk23

    minsk23 Banned

    Joined:
    21 Jul 2012
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    спасибо.


    хахах круто!