Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

лишняя строка в TDBGrid при фильтрации в TADOTable

15K
16 апреля 2008 года
nevi
35 / / 13.05.2007
есть грид, связан с соответствующей адотаблицей.
проблема такая - задаю фильтрациюв в тэйбле, если есть варианты - они отображаются в гриде, но если нет - то отображается первая запись в таблице, хотя по логике, не должно быть ни одной записи.

кто-нибуть в курсе - как исправить?:rolleyes:
263
16 апреля 2008 года
koltaviy
816 / / 16.12.2004
Чо пишешь в фильтре и какие значения в полях, по которым фильтруешь??
С каким значением поля запись остается??
15K
16 апреля 2008 года
nevi
35 / / 13.05.2007
2koltaviy
филтр фирмирую по типу поле='значение' AND поле='значение' AND и т.д. значения все текстовые.
Выводит грид мне просто первую строку (если не найдено совпадений по фильтру)
263
16 апреля 2008 года
koltaviy
816 / / 16.12.2004
1) Какая именно строка остается?? - какие именно значения полей в ней!!
Какое именно выражение записано в фильтре??

При нормальном поведении компонента, такого происходить не должно и не может - поэтому, думаю, ты сам где-то замудрил.

2) Попробуй фильтровать только по одному полю (без операторов AND) - посмотри, что получится. Потом попробуй по другому полю - посмотри, что получится. Результаты выкладывай сюда.
15K
17 апреля 2008 года
nevi
35 / / 13.05.2007
1)при условии НЕнахождения совпадений по фильтру остается ПЕРВАЯ строка предыдущего запроса

мудрить там негде, все элементарно

2)пробовал - результат тот же самый
строчку для фильтра я вижу какая получается - вывожу мессагой, все корректно. если есть совпадение - выводится отфильтрованные записи, а если нет - выводится первая строка предыдущего запроса =(

настройки компонента все по умолчанию, кроме необходимых для подключения и т.п.
263
17 апреля 2008 года
koltaviy
816 / / 16.12.2004
Кинь пример сюда!!
15K
17 апреля 2008 года
nevi
35 / / 13.05.2007
окей, вот метода для кнопки фильтра:

Код:
void __fastcall TFormCompany::btn_findClick(TObject *Sender)
{
        AnsiString buf_f;
        AnsiString buf_i;
        AnsiString buf_o;
        AnsiString buf_wtel;
        AnsiString buf_mtel;
        AnsiString buf_mail;

        switch (rgfind->ItemIndex)
        {
        case 1:
                buf_f="f_zam";
                buf_i="i_zam";
                buf_o="o_zam";
                buf_wtel="wtel_zam";
                buf_mtel="mtel_zam";
                buf_mail="mail_zam";
                break;
        case 2:
                buf_f="f_cont";
                buf_i="i_cont";
                buf_o="o_cont";
                buf_wtel="wtel_cont";
                buf_mtel="mtel_cont";
                buf_mail="mail_cont";
                break;
        case 3:
                buf_f="f_gbuh";
                buf_i="i_gbuh";
                buf_o="o_gbuh";
                buf_wtel="wtel_gbuh";
                buf_mtel="mtel_gbuh";
                buf_mail="mail_gbuh";
                break;
        default:
                buf_f="f_gdir";
                buf_i="i_gdir";
                buf_o="o_gdir";
                buf_wtel="wtel_gdir";
                buf_mtel="mtel_gdir";
                buf_mail="mail_gdir";
        }
        DataModule2->tb_company->Filter="";

        if(cb_rtype->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += "id_rtype="+IntToStr        (cb_rtype->ItemIndex+1);;
        }
        if(edfind_name->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += "name='"+edfind_name->Text+"'";
        }
        if(edfind_f->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += buf_f+"='"+edfind_f->Text+"'";
        }
        if(edfind_i->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += buf_i+"='"+edfind_i->Text+"'";
        }
        if(edfind_o->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += buf_o+"='"+edfind_o->Text+"'";
        }
        if(edfind_wtel->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += buf_wtel+"='"+edfind_wtel->Text+"'";
        }
        if(edfind_mtel->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += buf_mtel+"='"+edfind_mtel->Text+"'";
        }
        if(edfind_mail->Text.Length()>0)
        {        if(DataModule2->tb_company->Filter.Length()>0)
                        DataModule2->tb_company->Filter += " AND ";
                DataModule2->tb_company->Filter += buf_mail+"='"+edfind_mail->Text+"'";
        }
       
        //ShowMessage(DataModule2->tb_company->Filter);
        DataModule2->tb_company->Filtered=false;
        DataModule2->tb_company->Filtered=true;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог