Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Запросы с использованием компонентов FibPlus


Автор: _andrews_ 26.2.2007, 14:51
Использую Delphi7 + FibPlus. Необходимо осуществить поиск, фильтрацию. Как программно, при нажатии на кнопку, поменять запрос в компоненте PFibDataSource? Или может не там менять нужно. Подскажите, плиз)

Автор: superVad 26.2.2007, 15:35
Вообщето нет такого компонента как PFibDataSource, может имелось ввиду не DataSource а DataSet тогда запрос можно так поменять:

Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  pFIBDataSet1.Close;
  pFIBDataSet1.SelectSQL.Clear;
  pFIBDataSet1.SelectSQL.Add('select ... и так далее');
  pFIBDataSet1.SelectSQL.Add('from ... и так далее');
//построчно можно добавлять запрос (можно все и в одну строку)
  pFIBDataSet1.Open;
end;


фильтрацию на уже открытые данные делать можно так:

Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  pFIBDataSet1.Filter:='Поле1=чтототам and Поле2<=чтототам';
  pFIBDataSet1.Filtered:=True;
end;

Автор: _andrews_ 26.2.2007, 15:35
Поправка: 
Как программно, при нажатии на кнопку, поменять запрос в компоненте PFibDataSet?

Автор: superVad 26.2.2007, 15:57
Читай выше, я там вроде все уже написал (мой сотый пост  smile )

Автор: _andrews_ 27.2.2007, 01:34
ПРи попытке осуществить выше описанное выводит ошибку, типа 

pFIBDataSet not in Edit or Inser mode

Есть таблица Фильмы и таблица Должники(Клиенты) (БД "Домашняя видеотека"). Нужно, чтобы выводился запрос по Нику должника со всеми его фильмами...
Может быть с запросом не то. Подскажите, плиз
Пишу вот такое:
Код

with pFIBDSFilm do
    begin
      Close;
      SelectSQL.Clear;
      SelectSQL.Add('select film.name_f, klient.name_k');
      SelectSQL.Add('from film, klient where film.kod_k=klient.kod_k');
      SelectSQL.Add('and klient.nick_k like '' ');
      SelectSQL.Add(''''+Edit1.Text+'''');
      SelectSQL.Add('%''''');
      Open;
    end;


Прошу на кавычки и прочую ерунду пока внимания не обращать...Меня интересует принцип работы... Плиз

Автор: superVad 27.2.2007, 11:01
Вообще такая ошибка выдаеться если ты пытаешся добовлять или редактировать данные в ДатаСете не вызвав перед этим Edit или Append. В этом коде мне не понятно почему она возникает.

Попробуй запрос переписать вот так:

Код

with pFIBDSFilm do
begin
  Close;
  SelectSQL.Clear;
  SelectSQL.Add('select a.name_f, b.name_k');
  SelectSQL.Add('from film a, klient b');
  SelectSQL.Add('where a.kod_k=b.kod_k and b.nick_k like :param1');
  ParamByName('param1').AsString:=Edit1.Text+'%';
  Open;
end;


А вообще этот запрос ты в айбиэксперте проверял? Все отбираеться как надо?

Автор: _andrews_ 27.2.2007, 12:03
Упростил схему, добавил Edit

Код

with pFIBDSFilm do
    begin
      Close;
      Edit;
      SelectSQL.Clear;
      SelectSQL.Add('select film.name_f, klient.nick_k fom film, klient where film.kod_k=klient.kod_k');
      Open;
    end;


ошибка таже...

Автор: superVad 27.2.2007, 14:38
Блин...
Не надо эдит ставить тыж не редактируеш данные. Я просто там описал случаи когда такая ошибка может появляться к твоей задаче это не относиться.

Когда дебажиш прогу то на какой строке вылетает?

Какая у тебя delphi?

Автор: Alex 1.3.2007, 01:43
_andrews_, мой тебе совет если хочешь нормально научится работать с FIB+ прочти сначала документацию. Она на русском и там нет ничего лишнего http://www.devrace.com/files/fibplus_dg_6_4.zip
И ознакомься со списком статей http://www.devrace.com/ru/fibplus/articles/#143

PS:
После прочтения и тех примеров, что даны у тебя исчезнет 80% всех вопросов по этой библиотеки.

Автор: jemiko 6.8.2007, 12:42
Цитата(superVad @ 27.2.2007,  11:01)
Попробуй запрос переписать вот так:

Код

with pFIBDSFilm do
begin
  Close;
  SelectSQL.Clear;
  SelectSQL.Add('select a.name_f, b.name_k');
  SelectSQL.Add('from film a, klient b');
  SelectSQL.Add('where a.kod_k=b.kod_k and b.nick_k like :param1');
  ParamByName('param1').AsString:=Edit1.Text+'%';
  Open;
end;

Этот запрос правильный, 
но а если сделать  

SelectSQL.Add('where a.kod_k=b.kod_k and b.nick_k like % :param1 %');
или так
SelectSQL.Add('where a.kod_k=b.kod_k and b.nick_k like ''% :param1 %''');

То уже выдает ошибку.

Кто может помочь?

D2006, FB 2.0, FIB 6.7

Извините, разобрался. Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)