Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 15:57   #1
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию D7+Paradox, как сделать фильтрацию данных?

Здравствуйте, у меня такая проблема, я хочу сделать фильтрацию в БД.
Пример: На форме таблица, радиокнопки, edit и bitbtn. При нажатии на кнопку он берёт данные из edit'a, смотрит по какому критерию делать фильтр (радиокнопка) и выводит в таблице.
У меня был рабочий код (тетрадь к сожалению утерял, а исходников на компе не нашлось) - поэтому прошу форумчан оказать мне помощь.
На память было что то подобное:
Код:
if RadioButton1.Checked=true then
begin
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('select * from Mashines where marka=:marka');
query2.Params[0].AsString:=Edit6.Text;
query2.Prepare;
query2.ExecSQL;
query2.Close;
query2.Open
end;
Но этот код у меня не работает...

UPD: Еще есть мысли по поводу этого кода - однако таблица не реагирует, может кого нибудь приведёт к правильной мысли:
Код:
procedure TForm2.sBitBtn6Click(Sender: TObject);
 var s:string;
begin
if form2.RadioGroup1.Itemindex=0 then
begin
s := Form2.DataSource1.DataSet.FieldValues['Familiya'];
Form2.Table1.Active:=false;
Form6.Query1.Close;
Form6.Query1.SQL.Clear;
Form6.Query1.SQL.Add('select * from abonents.db ');
Form6.Query1.SQL.Add('where (Familiya="'+s+'")');
Form6.Query1.ExecSQL;
Form2.Table1.Active:=true;
Form6.Close;
end;
end;

Последний раз редактировалось nursak; 24.05.2011 в 16:08.
nursak вне форума Ответить с цитированием
Старый 24.05.2011, 16:25   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Код:
if RadioButton1.Checked=true then
begin
 query2.Close;
 query2.SQL.Clear;
 query2.ParamByName('marka').Value := Edit6.Text;
 query2.SQL.Add('select * from Mashines where marka=:marka');
 query2.Open;
end;
Код:
procedure TForm2.sBitBtn6Click(Sender: TObject);
 var s:string;
begin
 if form2.RadioGroup1.Itemindex=0 then
 begin
  s := Form2.DataSource1.DataSet.FieldValues['Familiya'];
//  Form2.Table1.Active:=false;        // ??? Зачем Вам это? Вы же с таблицей ничего не делаете, ни прямо ни косвенно!
  Form6.Query1.Close;
  Form6.Query1.SQL.Clear;
  Form6.Query1.SQL.Add('select * from abonents.db ');
  Form6.Query1.SQL.Add('where (Familiya="'+s+'")');
  Form6.Query1.Open;
//  Form2.Table1.Active:=true;        // ???
  Form6.Close;  // Для чего это... Вы же жмёте кнопку на форме 2...
 end;
end;
До свидания

Добавка
Сразу не увидел См. красное выделение с вопросами выше. Думаю потому у Вас таблица не реагирует.
Добавка 2
Вам надо заменить Table1 на запрос в качестве набора данных и тогда не Query1 менять, а этот запрос (который вместо Table1). НО, после Вашей фильтрации Вы не сможете выбирать фамилию из списка, т.к. останется одна, выбранная Вами последней!

Последний раз редактировалось OlegVE; 24.05.2011 в 17:20. Причина: Добавка
OlegVE вне форума Ответить с цитированием
Старый 24.05.2011, 18:03   #3
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Код:
var s:string;
begin
if form2.RadioGroup1.Itemindex=0 then
begin
s := Form2.DataSource1.DataSet.FieldValues['Familiya'];
Form2.Query1.Close;
Form2.Query1.SQL.Clear; //Filter
Form2.Query1.SQL.Add('select * from abonents.db ');
Form2.Query1.SQL.Add('where (Familiya="'+s+'")');
Form2.Query1.Open;
end;
Извините, но у меня ничего не вышло...
Про добавку 2 можно поподробней?

UPD: Form6 моя ошибка - я скопипастил код, и забыл его поменять, извините что ввёл в заблуждение. =(

Последний раз редактировалось nursak; 24.05.2011 в 18:06. Причина: Не умею кодить
nursak вне форума Ответить с цитированием
Старый 24.05.2011, 19:03   #4
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Сохраните проект.
Киньте на форму ещё один DataSource (подключите его к Form2.Query1), DBGrid (подключите к этому DataSource), в Form2.Query1.SQL изначально запишите (а может через кнопку записать) select * from abonents.db . И понаблюдайте. Может для тогда вырисуется конечная цель и Вы измените подход.
Про добавку 2.
Вы меняете набор данных (Query1), а в Вашей DBGrid (или ещё где-то) отображаются данные из другого набора (Table1) и они друг на друга не влияют.
Если Вам заменить Table1 на запрос, то при фильтрации, у Вас пропадут все остальные фамилии кроме последней, выбранной Вами, а Вы берёте список фамилий из Form2.DataSource1.DataSet.FieldValu es['Familiya'].
Может Вам лучше использовать отношение Master-Detail, тогда у Вас для выбранной фамилии в одной DBGrid будут отображаться все данные в другой DBGrid.
OlegVE вне форума Ответить с цитированием
Старый 24.05.2011, 20:00   #5
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Вот блин, я ведь забыл сделать так - чтобы входные данные для фильтрации для брались из Edit1. Пишу в строчке Form2.Query1.SQL.ADD('where (Familiya="'+Edit1.Text+'") ');
Он всё так же не реагирует, будто никакого нажатия кнопки и нет вовсе.
Про первую строчку я не особо понял - если обойтись без использования table1 - это может дать какое то преимущество/скорость? Я делаю как меня научили в колледже, поэтому код получается такой кривой.
Про добавку 2 - Вы меня еще больше запутали, я там всё очень смутно понял - и врядли смогу данное действие осуществить.
Спасибо за отклик
nursak вне форума Ответить с цитированием
Старый 25.05.2011, 16:36   #6
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

тема еще актуальна
nursak вне форума Ответить с цитированием
Старый 25.05.2011, 17:52   #7
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
У вас разные наборы данных, один - Table1 второй - Query1 которые Вы получили из таблицы abonents.db. Table1 отображает всё, что есть в этой таблице (abonents.db), если вы не указали поля которые отображать. Query1 отображает из той-же таблицы всё, что Вы запросили с помощью select ... С таблицей abonents.db ничего не происходит, если Вы не пользуетесь, например, UPDATE или INSERT. За ними (наборами данных Table1 и Query1) Вы ставите DataSource которые служат интерфейсом между Data Controls и DataSet.
В вашем случае, изменяя Query1, Вы никак не влияете на Table1. Чтобы отображать данные (это с целью тестирования, а не окончательный ответ) в соответствие с Query1, Вам надо создать и подключить DataSource к нему, а к последнему создать и подключить, например, DBGrid. Попробуйте добавить их в Ваш проект и посмотреть, что я Вам и предлагал ранее.
До свидания
Добавка.
Может я неправильно выразился, тогда рассматривайте Table1 как Form2.DataSource1.DataSet

Последний раз редактировалось OlegVE; 25.05.2011 в 18:04.
OlegVE вне форума Ответить с цитированием
Старый 27.05.2011, 19:51   #8
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Спасибо, но к сожалению я ничего не понял
nursak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
D7+Paradox - как сделать редактирование БД nursak Помощь студентам 6 23.05.2011 19:21
Как произвести фильтрацию данных Dronlion Microsoft Office Excel 2 12.04.2011 22:48
Как сделать вывод данных после всего ввода данных. Donatello Общие вопросы C/C++ 6 16.01.2011 16:32
Как снять пароль на базы данных Paradox Viktoria30 БД в Delphi 3 02.02.2009 13:15