Topic: Поиск по вхождению

Пытаюсь по данным фрагмента в редактируемом поле заполнить таблицу значениями, в которых этот фрагмент присутствует.

Пока безрезультатно(. Посоветуйте куда копать.

 // Поиск по вхождению
SQLQuery('SELECT *  FROM Nomenklatura WHERE  (case when '+Form1.Edit2.Text+'='''' then 1=1 else Nomenklatura.name LIKE "%'+Form1.Edit2.Text+'%" end)', Form1.TableGrid5); 

Re: Поиск по вхождению

попробуйте так

    Form1.TableGrid5.dbSQL:='SELECT * FROM Nomenklatura WHERE (CASE WHEN "'+Form1.Edit2.Text+'" <> "" THEN Nomenklatura.name LIKE "%'+Form1.Edit2.Text+'%"  ELSE 1=1 END)'; // the id field, want to be able to edit or delete the entry from the table component
    Form1.TableGrid5.dbGeneralTable := 'Nomenklatura'; // Optional (in the case of complex SQL queries with sub queries, you need to choose the main table of the database, also it need to be able to edit or delete the entry from the table component)
    //Form1.TableGrid5.dbListFieldsNames :='delete_col,#,name2,name3,name4'; // If you do not want to see the value of the id in the component table, enter a name for the column delete_col
    Form1.TableGrid5.dbSQLExecute;
Dmitry.

Re: Поиск по вхождению

Спасибо, но этим выборо теперь нужно как-то воспользоваться:

procedure Form1_Button9_OnClick (Sender: string; var Cancel: boolean);
var
   Poisk: TDataSet;
begin
     SQLQuery('SELECT id_KP FROM Nomenklatura WHERE (CASE WHEN "'+Form1.Edit1.Text+'" <> "" THEN Nomenklatura.name LIKE "%'+Form1.Edit1.Text+'%"  ELSE 1=1 END)', Poisk);
     while not Poisk.Eof do
           begin
                ?????????????????????
                Poisk.Next;
           end;

Теперь в  Poisk: TDataSet у меня id записей из таблицы которые нужно показать в GRID.

Re: Поиск по вхождению

строка:
    //Form1.TableGrid5.dbListFieldsNames :='delete_col,#,name2,name3,name4';
ничего не удаляет!!! в моем примере она имеет сл. вид:
    Form1.TableGrid3.dbListFieldsNames :='delete_col,#,kolvo,NDS,cena,summa,id_Eizm,pp';

Re: Поиск по вхождению

abgroup-artur wrote:

Спасибо, но этим выборо теперь нужно как-то воспользоваться:

Теперь в  Poisk: TDataSet у меня id записей из таблицы которые нужно показать в GRID.


К сожалению не понял вопроса, и почему вы снова используете SQLQuery?

Dmitry.

Re: Поиск по вхождению

abgroup-artur wrote:

строка:
    //Form1.TableGrid5.dbListFieldsNames :='delete_col,#,name2,name3,name4';
ничего не удаляет!!! в моем примере она имеет сл. вид:
    Form1.TableGrid3.dbListFieldsNames :='delete_col,#,kolvo,NDS,cena,summa,id_Eizm,pp';

Пожалуйста приложите ваш проект с описанием проблемы, где и что не удаляет.

Dmitry.

Re: Поиск по вхождению

Постараюсь внести ясность:У меня есть таблица КП в которой данные по комерческим предложениям. В таблице Nomenklatura ссылка на КП и данные по наполнению каждого КП. При поиске который Вы мне помогли реализовать формируетя GRID по Номенклатуре, а мне нужно по КП куда будут входить только id те которые получены в Вашем запросе как id_KP. Поэтому снова возник SQLQuery который формирует набор данных по которому нужно отфильтровать основную таблицу.

Re: Поиск по вхождению

Возможен также вариант программной подмены выбора строки GRID. Как это сделать не очень понимаю:

procedure Form1_TableGrid1_OnClick (Sender: string);

в процедуре

\

procedure Form1_TableGrid2_OnClick (Sender: string);
begin
          Form1_TableGrid1_OnClick (SQLExecute('SELECT id_KP FROMNomenklatura WHERE id ='+IntToStr(Form1.TableGrid2.dbItemID)));

Re: Поиск по вхождению

abgroup-artur
Я правильно понимаю, что вам необходимо получить идентификатор внешнего ключа id_KP из выбранной записи грида?

Dmitry.

Re: Поиск по вхождению

не совсем, мне нужно вывести в GRID записи (без повторений), id которых находятся в переменной Poisk: TDataSet;