Topic: dbFilter

Добрый день.
Ниже команда работает.
enter_kontroler.TableGrid1.dbFilter := '(users.prinadl_1 = 1)';

А как использовать в users.prinadl_1 = 1 не цифру а переменную?

Re: dbFilter

Здравствуйте.


Например так


var
   s: string;
begin
   s := '1';
   enter_kontroler.TableGrid1.dbFilter := '(users.prinadl_1 = '+s+')';
end;
Dmitry.

Re: dbFilter

Еще вопрос.
в таблице есть поле "CheckBox" -  как в dbFilter поставить условие чтоб показать запись которые CheckBox = True?

Re: dbFilter

Evgeniy D wrote:

Еще вопрос.
в таблице есть поле "CheckBox" -  как в dbFilter поставить условие чтоб показать запись которые CheckBox = True?

 

 enter_kontroler.TableGrid1.dbFilter := 'CheckBox=1';
Dmitry.

Re: dbFilter

Здравствуйте!
В настройках TableGrid есть пункт Фильтр.
Можно ли там указать определенные условия?
Например вывод записей в таблицу, только если заполнена определенный атрибут таблицы.
Все остальные не выводить.
Есть ли такая возможность?
Как правильно написать?

Re: dbFilter

tiopentalna wrote:

Здравствуйте!
В настройках TableGrid есть пункт Фильтр.
Можно ли там указать определенные условия?
Например вывод записей в таблицу, только если заполнена определенный атрибут таблицы.
Все остальные не выводить.
Есть ли такая возможность?
Как правильно написать?

Здравствуйте.


Да, вы можете указать там условия, их синтаксис аналогичен, если бы вы писали условие в SQL запросе в секции WHERE
например


fieldname is NOT NULL
Dmitry.

Re: dbFilter

DriveSoft wrote:
tiopentalna wrote:

Здравствуйте!
В настройках TableGrid есть пункт Фильтр.
Можно ли там указать определенные условия?
Например вывод записей в таблицу, только если заполнена определенный атрибут таблицы.
Все остальные не выводить.
Есть ли такая возможность?
Как правильно написать?

Здравствуйте.


Да, вы можете указать там условия, их синтаксис аналогичен, если бы вы писали условие в SQL запросе в секции WHERE
например


fieldname is NOT NULL

По данному случаю можете привести пример как можно в филтре применить LIKE "'+poruch_gd.Edit4.Text+'%".
например в этой строке:

poruch_gd.TableGrid1.dbFilter:= '(porych_gd.na_kontrole=1) AND (porych_gd.podrazp_isp = "'+poruch_gd.ComboBox1.Text+'")';

Re: dbFilter

poruch_gd.TableGrid1.dbFilter:= '(porych_gd.na_kontrole=1) AND (porych_gd.podrazp_isp LIKE "'+poruch_gd.Edit4.Text+'%")';
Dmitry.

Re: dbFilter

корректно ли будет написать в окне настройки компонента таблицы в графе "3. Фильтр (необязательно)" такое выражение:

CommitteeMembers.id_DesignTempalte = {frmSettingReport.cbDesignPattern.dbItemID}

?

cbDesignPattern - это комбобокс, лежащий на той же форме, где и грид, для которого устанавливается фильтр

Re: dbFilter

К сожалению такое не поддерживается, но вы можете изменить значение фильтра с помощью скрипта например в событии формы OnShow

Form.TableGrid.dbFilter := 'CommitteeMembers.id_DesignTempalte = ' + frmSettingReport.cbDesignPattern.sqlValue;
Form.TableGrid.dbUpdate;
Dmitry.

11 (edited by m.prokhachev 2018-07-16 18:38:53)

Re: dbFilter

Простите, а чем мой вариант с dbItemID хуже вашего варианта с sqlValue?

то есть

Form.TableGrid.dbFilter := 'CommitteeMembers.id_DesignTempalte = ' + IntToStr(frmSettingReport.cbDesignPattern.dbItemID);
Form.TableGrid.dbUpdate;

Re: dbFilter

Почти ничем, но в случае пустого значения в компоненте, свойство sqlValue вернет NULL, а не -1 для dbItemID
Также свойство sqlValue не требует дополнительного преобразования IntToStr

Dmitry.

13 (edited by abc52 2019-03-16 22:52:55)

Re: dbFilter

Доброго дня !

   ..dbFilter := '( Length( Fd )<13 )'  - работает
   ..dbFilter := '( pos( 'A' ,fd )>0 )'  -  нет   " no such function pos "
    ='( copy( fd,1,3 ) = 'Alex' )'  -  тоже не  работает
   
      Какими  функциями  тогда  искать  ?

Re: dbFilter

abc52 wrote:

Доброго дня !

   ..dbFilter := '( Length( Fd )<13 )'  - работает
   ..dbFilter := '( pos( 'A' ,fd )>0 )'  -  нет   " no such function pos "
    ='( copy( fd,1,3 ) = 'Alex' )'  -  тоже не  работает
   
      Какими  функциями  тогда  искать  ?

dbFilter служит для модификации SQL запроса, который используется компонентом для выборки данных. Т.е. при создании фильтра  необходимо использовать функции SQL https://sqlite.org/lang.html.

Визуальное программирование: блог и телеграм-канал.

Re: dbFilter

Спасибо за помощь    SQLite  работает

     Fio  like  'IVAN%'
     Fio  glob  'Ivan*'

   А вот при редактировании  ячейки  TableGrid1  не работает
    клавиша "Delete"    ПОЧЕМУ ?   Приходится использовать  "BackSpace".

   Заранее спасибо

Re: dbFilter

abc52 wrote:

   А вот при редактировании  ячейки  TableGrid1  не работает
    клавиша "Delete"    ПОЧЕМУ ?   Приходится использовать  "BackSpace".

   Заранее спасибо


Поправил, скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/abazohrbdt3p9 … a.zip?dl=0

Dmitry.

Re: dbFilter

Спасибо Dmitry.
Надеюсь с версии  5.3  "Del"  тоже будет работать.

  В TableGrid1 есть свойство dbListFieldsNames  Оно показывает заголовки  колонок таблиц.
А как узнать программно  еще и соответствующие имена полей  и  имя таблицы.

Re: dbFilter

Если компонент уже заполнен данными, то можно получить информацию о именах и типах так

    ShowMessage(Form1.TableGrid1.Columns[0].TableName);
    ShowMessage(Form1.TableGrid1.Columns[0].FieldName);
    ShowMessage(Form1.TableGrid1.Columns[0].ForeignKey);
    ShowMessage(Form1.TableGrid1.Columns[0].ForeignKeyFull);
    ShowMessage(Form1.TableGrid1.Columns[0].FieldType);

Columns[0] - первая колонка

Dmitry.

19 (edited by abc52 2019-03-22 13:53:21)

Re: dbFilter

Информация полезная  Dmitry. !
Чтобы было поменьше вопросов,  а где вы ее увидели ?

Для скрытия колонки Id  таблицы использую  F1.TG1.Columns[0].visible:=False ,
Колонка исчезает, но при новом входе в форму таблицы, редактировании  или 
применяя  F1.TG1.dbUpdate  (обновить)  свойство сбрасывается  в …Visible:=True
Специально проверял    ПОЧЕМУ ?

Re: dbFilter

Кого где увидел? )


Изменения для компонента таблицы необходимо производить в ее событие OnChange

procedure Form1_TableGrid1_OnChange (Sender: TObject);
begin
   Form1.TableGrid1.Columns[0].visible:=False;
end;
Dmitry.

Re: dbFilter

Да в таком случае все работает  Dmitry.

" Кого где увидел ? "  я имел ввиду  какие еще есть свойства после Columns[0]
в  Form1.TableGrid1.Columns[0]. ?????  и где их посмотреть ?

1.    Есть ли возможность запрета редактирования некоторых колонок  как,
        например,  у вычисляемых полей  ?

  2 . У редактора  скриптов  есть  ПОИСК  строк ?   A  то часто приходится
        обращаться  к  Блокноту   Notepad.exe

Re: dbFilter

Документацию можно найти здесь (Скрипты > Свойства, Методы и События > Таблица)
http://myvisualdatabase.com/help_ru/


К сожалению документацию пока неполная, т.к. свойства постоянно дополняются.


1.

procedure Form1_TableGrid1_OnChange (Sender: TObject);
begin
    Form1.TableGrid1.Columns[0].Options := Form1.TableGrid1.Columns[0].Options - coEditing;
end;

2. Ctrl+F

Dmitry.

Re: dbFilter

Очередное СПАСИБО  Dmitry.

   1.  Очень громоздко,  но работает  Не проще ли было  выделить поле
        в настройках компонента таблицы  для  каждой колонки VE  (-visible,-editing) ...
         Например,  для разных пользователей  не показывать или запретить
         редактирование колонок.

       Как ввести данные в  переменную , например,    Ft: String  для значения  фильтра  ?
         TextBox  требует  TableName  и  FieldName

Re: dbFilter

abc52 wrote:

Очередное СПАСИБО  Dmitry.


       Как ввести данные в  переменную , например,    Ft: String  для значения  фильтра  ?
         TextBox  требует  TableName  и  FieldName

К сожалению не понял вопроса.

Dmitry.

25 (edited by abc52 2019-03-25 18:05:04)

Re: dbFilter

Переменная  обьявлена  как  FT :  String;   Каким образом  ввести  в нее  значение , например ,  " Id<20 "

Свойство  Form1.TextBox.Edit1   позволяет  это только  для   TableName  +  FieldName  в  построителе  форм